For what's it's worth (from work I did ages ago).
RSA is an asymmetric cipher (as is Elliptic Curve(ECC)). AES is a symmetric cipher as is Rijindael, twofish, OneFish, BlowFish etc. I think AES is very similar or a variation of Rijindael (see The Differences Between Rijndael and AES, http://blogs.msdn.com/b/shawnfa/archive/2006/10/09/the-differences-between-r ijndael-and-aes.aspx). As far as I understand it, as an asymmetric cipher is slow, it is used to encrypt exchange keys for a symmetric cipher (exchange keys are generally randomly generated) and to encrypt digital hashes (aka digital signatures). The DSA used to be the SHA-1 algorithm, but as this function has been broken, a better digital hash should be used (i.e. SHA-224, SHA-256, SHA-384, and SHA-512). This forms the basis of PKI and asymmetric keys are mostly distributed using X.509 digital certificates. Certificates can be used to distribute both pairs of asymmetric keys (private and public) or just the public ones. The public keys are made publically available while private keys are kept as securely as possible. It does not make sense to distribute symmetric keys via X.509 certificates. I am not sure that this even possible. I think the Diffie-Hellman key exchange may work better (http://www.codeproject.com/KB/security/DiffieHellmanExample.aspx) for exchanging symmetric cipher keys. To substantiate non repudiation of encrypted data, a third party certificate authority (VeriSign, Thawte) is normally used. If you generate your own certificates, the encryption will work but the aspect of non repudiation is weakened. The most common asymmetric cipher used to support PKI is RSA and as far as I know the only one supported within the .NET framework. If you want to outside what the .NET framework supports, I suggest you look at what Bouncy Castle provides http://www.bouncycastle.org/csharp/ as well as other suppliers of Cryptography ciphers. If you want a comparison of cipher vendors, Kellerman software compares theirs with some others as well as the .NET framework (may be a bit out-dated now). http://www.kellermansoftware.com/p-17-net-encryption-library.aspx and click on the link Download the full list of features. <http://www.kellermansoftware.com/download/DotNetTools/EncryptionCompetition .xls> Regards Peter Maddin Applications Development Officer PathWest Laboratory Medicine WA Phone : +618 6396 4285 (Monday, Wednesday,Friday) Phone : +618 9346 4372 (Tuesday, Thursday) Mobile: 0423 540 825 E-Mail : [email protected]; [email protected] The contents of this e-mail transmission outside of the WAGHS network are intended solely for the named recipient's), may be confidential, and may be privileged or otherwise protected from disclosure in the public interest. The use, reproduction, disclosure or distribution of the contents of this e-mail transmission by any person other than the named recipient(s) is prohibited. If you are not a named recipient please notify the sender immediately. From: [email protected] [mailto:[email protected]] On Behalf Of Greg Keogh Sent: Tuesday, 27 December 2011 12:19 PM To: 'ozDotNet' Subject: RE: makecert fixed on RSA ? I'm doing some research on certificates it seems that when makecert in windows server 2008 is used you don't get a choice on the certificate's algorithm? It defaults to RSA for key exchange ? looking at the extended option in makecert it only has the option of allowing to change the signature algorithm as opposed to the encryption algorithm? What can I do if I wanted to use AES just as an example. Dunno if this helps, but RSA is a bit of a performance burden and usually used for encrypting small amounts of data such as keys. AES is a comparatively efficient block cipher. RSA uses a key-pair and AES uses one key, so they are designed for different purposes. DSA is usually used for making signatures. I think you're mixing up the algorithms. Greg
