• CombatWombat@feddit.online
    link
    fedilink
    English
    arrow-up
    76
    ·
    23 days ago

    On the internet, to maintain security, you have to have something called a certificate that is used as part of establishing a secure connection using TLS (the secure part of https). The way it works is using a public/private key pair – one half is public, and is used to verify that the certificate is signed by the correct authority, and the other is secret, where no-one else can figure it out. Each key is just a really big number that goes into a cryptographic math problem. One certificate authority, eMudhra, used 8 different private keys that were extremely small numbers, including one that is just the number 4 (represented as 0000000…4, but literally just the number 4). The math problem is much easier to solve with small numbers, and a common way to break the cypher is to check every possible option starting at 0, which gets to 4 pretty fast. It’s remarkable in terms of a security breach because no-one actually had to leak anything for it to be insecure, it’s just that the “password” was so easy to guess that we had to “rotate the passwords” for basically the entire internet, because now anyone can sign a certificate using the private key 4 and it will look like a real certificate for google.com or wellsfargo.com or whatever.

  • paris@lemmy.blahaj.zone
    link
    fedilink
    arrow-up
    8
    ·
    23 days ago

    Essentially all internet security is based on the fundamental idea that if you have some really big randomly selected prime number, you can do math on it easily to get a final value, but doing the math backwards to find the original prime number is computationally infeasible. Your prime number is secret, the calculated final value is public. You can sign data with your prime number private key and someone can use the corresponding public key to verify that the data was signed with the corresponding private key.

    It’s really important that your private key stays private. It’s really important that your private key can’t be brute forced by trying a bunch of numbers to guess your secret prime number.

    Your private key should be using a number like 11185240471355026063328096486023294694077671402173515074581823211722702563586240744645728206308310973537336052780084.

    It would be really bad if your private key was something like 4. It would be REALLY BAD if that private key was used to sign a bunch of data used for internet security.

    https://scotthelme.co.uk/eight-bits-of-trust-emudhras-ca-keys-cracked-in-milliseconds/

    P.S. I don’t actually know if all algorithms use only prime numbers or if some of them can use non-primes.

    • shalafi@lemmy.world
      link
      fedilink
      English
      arrow-up
      1
      ·
      23 days ago

      I thought 4 was the password to recover or lock the private key. Been out of IT for awhile, what am I missing? For example, how could I use 4 to get the private key?

        • shalafi@lemmy.world
          link
          fedilink
          English
          arrow-up
          1
          ·
          23 days ago

          JFC, that’s worse than I imagined. Thought it was a recovery thing, but now I’m questioning if that’s even possible. What am I thinking of? I could swear I’ve entered a password making key pairs.

          • PumaStoleMyBluff@lemmy.world
            link
            fedilink
            arrow-up
            3
            ·
            23 days ago

            ssh-keygen prompts for an optional password, but it’s just for permissions for your local private key file. So it would be like having an additional password on a text file that just contains “4”