Search code examples
encryptionpublic-key-encryptionencryption-asymmetric

How does public key encryption work?


How does public key encryption work, using a private and public/public key to decrypt/encrypt? What does it mean for the key to be 256 bits? How is it decrypted? Is there a language for writing encryption programs or is any language fine?


Solution

  • In brief:

    the data is encrypted using symmetric algorithm and a random symmetric key. Then the random key is encrypted using public asymmetric key. The encrypted random key is stored together with the encrypted data. To decrypt the data one uses private asymmetric key to decrypt the stored random key, then the decrypted random key is used to decrypt the data.

    256-bit is the length of the key. However, it has dramatically different meaning for symmetric and asymmetric keys. For symmetric keys 256 bits are a very strong key (you can have even longer keys with AES 384 or AES 512 where the numbers specify the key length the algorithm operates with). For asymmetric algorithms 256 bits is nothing, and comparable strength is 2048 bits.

    Public key encryption can be implemented using any language, that supports math operations and arrays. However, doing this is reinventing the wheels. There exists a number of cross-platform libraries for PKI: open-source OpenSSL for C++, BouncyCastle for Java and some more. Our company offers a supported and maintained SecureBlackbox product for .NET, Windows and Linux (MacOS X version to come soon).

    Also there's a couple of books about PKI that we recommend to all our users. RSA's guide is an easy reading (but very useful) and the second book goes into deeper details.