I want to clarify that my real concern with using cascaded algorithms (notably by amateurs) is the greatly increased risk of security holes in the resulting code. Especially given that the supposed increased security is usually far, far less than what it naively seem to be. Think “weakest link.” E.g., using 3 different schemes in a row might result in a system that may (emph. “may”) be as weak as the weakest of the 3. Serious professional cryptographers might be able to give an opinion on a particular combination’s weakness, but a non-professional’s estimation is not going to sell. Putting extra effort into something that not only might not give any benefits but could actually open up new holes is not a good thing.
I keep seeing posts that refer to MD5 and encyrption. MD5 is a hash scheme. It is useful for encoding short things like passwords and in providing certificates. It cannot and must not be used for encoding anything of non-trivial length. There’s just so much wrong with thinking that MD5 is an encryption scheme that I don’t even know where to start.
It’s a common hash based encryption for passwords. The main benifits that arise from using it is that theres no way to decrypt something from a MD5 hash, only to verify it so there is no chance that someone capturing your MD5 could guess your password from it (unless they brute force it).
Shalmanese, I know what an MD5 hash is. So I am puzzled as to why you attached your post to my previous one. Perhaps you intended to clarify someone else’s post who is mistakenly referencing MD5?
For those not so familiar with encryption, let me explain. Standard encryption goes like this:
Alice takes a plain text plus an (independently generated) encryption key to create a cipher text. She sends it to Bob.
Bob takes the cipher text plus a decrypion key to re-create the plain text.
With hashing schemes like MD5, there are no (independently generated) keys and step 2 doesn’t exist. It is a purely one way process. In particular, it is not a one-to-one function. Different texts can have the same MD5 hash.
Note that it is an open question as to whether MD5 can be broken by non-brute force methods. (Where “break” in this context means “recover any string that maps into the encoded string.”) Almost all phrasing of strength of systems are conditional on “we do not know if…”. (Where “we” means people who don’t work for the NSA and publish their work.)
What if you want to recover all strings which map into the encoded string? If, for instance, you determined that the string x!J5)C_ mapped into the hash you had, that might not help you break into another account with the same password but which uses a different password hashing system. But if you found that the strings x!J5)C_ , G7~+m6 , and fluffy_bunny all mapped into your known hash, then you could probably be pretty confident that this person uses fluffy_bunny as a password.
Recover all strings that map into an MD5 hash? Good luck with that. First there are an infinite number of strings that map into a given MD5 hash. So that’s going to take a while. Secondly, once you are searching strings longer than the hash, there is an exponential growth in strings that map into the same hash. So even a limited search can have so many results that just listing them would be impractical. So what you have there is a list that’s growing exponentially towards infinity.
Note that some bad hashing schemes have been broken in the sense I gave. Many BIOS password schemes use a very poor method. There are programs available that quickly find “a” password that maps into the same hash. It will be nonsense (but so would the original if they picked a good password.) That’s good enough for those purposes.