I'm studying for CISSP and know they will ask what type of encryption to use in different situations. Does such a list exist or is there a general rule of thumb to use?
-
Look at the difference between stream and block ciphers. When or how often do you need to re-key?– this.joshJul 10, 2012 at 5:41
-
Well there is list of ciphers, hashes, also prngs, as well the PKI certificates, so in every situation you need to design something which is best suited, but this largely depends on the situation.– Andrew SmithJul 10, 2012 at 9:01
3 Answers
I think in general you'll need to understand the difference between symmetric and asymmetric encryption. Symmetric algorithms are faster and stronger per bit of key length than asymmetric algorithms. But symmetric algorithms require a pre-shared key and asymmetric algorithms do not. So, in situations where strength and speed is required, and securely pre-sharing a key is possible, you would use symmetric ciphers like AES.
In practice, cryptographic hashes, symmetric and asymmetric encryption are combined to provide a more complete solution. For example, asymmetric encryption can be used to exchange the keys for symmetric encryption. This is how Secure Sockets Layer (SSL) works.
The general reasoning looks like this:
We have some sensitive data which must be transformed to preserve its confidentiality. Does it needs to be transformed back ? If no, then this is a case for hashing, not encryption (as in "password storage": you do not want to get the password back, you just want to verify that a given password matches what was stored). Password hashing is sometimes called "encryption" (that's wrong, but widespread).
Assuming we need to do actual encryption, then will the people doing the encryption be the same entity (morally) than the people doing the decryption ? If both are the same entity (e.g. you encrypt a file so that you can retrieve it later on), then that's symmetric encryption (encryption and decryption use the same key). Otherwise, that's asymmetric encryption (typical case: encrypted emails: encryption by the sender, decryption by the recipient, who is somebody else).
If doing symmetric encryption, then use AES -- but do it in a proper mode such as EAX, which ensures confidentiality and integrity. There are other encryption algorithms, some of which providing better performance in some situations, but it takes some creative engineering to find a situation where AES speed is not more than adequate. Don't pollute security design with unsubstantiated worries about performance.
If doing asymmetric encryption, then you will probably need to use hybrid encryption: you asymmetrically encrypt a random key (a bunch of bytes), which you then use for symmetric encryption over the actual data. Asymmetric encryption algorithms (such as RSA) don't handle bulk data; some of them do not actually let you choose the data which you encrypt (these are key exchange algorithms like Diffie-Hellman).
And, of course, don't do it yourself. Cryptographic algorithms are sensitive beasts; it is easy to get it wrong when assembling them into protocols. You should rely on existing protocols as much as possible. For instance, you do not encrypt an email; you use S/MIME or OpenPGP, which will take care of applying the encryption in an appropriate manner.
-
Some day, I will run into the original question asker, and he will tell me that he insured both confidentiality and integrity by using EAX. I'll ask him if he ever studied cryptography, and he will say "no." I don't think this type of high-level crash-course answer on such a hazard-prone topic serves anyone.– ruiefFeb 24, 2013 at 20:42
You're asking how you know what "type of encryption" to apply in a given situation. This could mean one of two things.
If you want to know how to apply cryptography as an engineer, you need a thorough knowledge of various algorithms, protocols, and attacks. If that's your goal, he Handbook of Applied Cryptography (HAC) is a unique and crucial resource. This is a technical book intended for readers with some computer science background, and its coverage of the area is unmatched in breadth and detail. However it is also somewhat out of date, as books on cryptography tend to be. On that note, you would also need to catch up by surveying cryptography-related journals and works on elliptic curve cryptography (ECC) in the intervening years since its publication, and continue to follow such things in the future.
Since you're studying for a CISSP, however, I suspect that you want a higher-level view. Be warned that pursuing this path will not qualify you to apply cryptography on an engineering level. It will support you in high-level specification of products and technologies, which is what CISSP's tend to do — but you will need to acquire (or work with someone who has) deeper knowledge to engineer, verify, and test the security of your applied crypto. If this is your goal, there are all kinds of CISSP study guides, and also Bruce Schneier's famously accessible Applied Cryptography which gives a decent survey of algorithms and their particular applications but little in the way of theory. There is also Cryptography Engineering, which is a clasically Schneier-style reduction of HAC's outline into a book that reads like an InfoWorld article from start to finish.
I would be remiss not to give the usual warning about snake oil crypto. Choose products from highly-established open-source projects or vendors that specialize in security and cryptography. Engineering cryptography is not a common skill, or something to be dabbled in. Even the experts don't often get it right.