For years, maybe 10, I’ve been fascinated with cryptography. I read a book about XOR bit-based encryption, and have been hooked ever since thing.
I guess it’s more fair to say that I’m fascinated by those who can break various encryption methods, but I digress.
To the point — what methods do you use when writing cryptography? Is obfuscation good in cryptography?
I use two key-based XOR encryption, various hashing techniques (SHA1) on the keys, and simple things such as reversing strings here and there, etc.
I’m interested to see what others think of and try when writing a not-so-out-of-the-box encryption method. Also — any info on how the pros go about ‘breaking’ various cryptography techniques would be interesting as well.
To clarify — I have no desire to use this in any production code, or any code of mine for that matter. I’m interesting in learning how it works through toying around, not reinventing the wheel. 🙂
Ian
To contradict what everyone else has said so far, go for it! Yeah, your code might have buffer overflow vulnerabilities in it, and may be slow, buggy, etc, but you’re doing this for FUN! I completely understand the recreational enjoyment found in playing with crypto.
That being said, cryptography isn’t based on obfuscation at all (or at least shouldn’t be). Good crypto will continue to work, even once Eve has slogged through your obfuscated code and completely understands what is going on. IE: Many newspapers have substitution code puzzles that readers try and break over breakfast. If they started doing things like reversing the whole string, yes, it’d be harder, but Joe Reader would still be able to break it, neve tuohtiw gnieb dlot.
Good crypto is based on problems that are assumed to be (none proven yet, AFAIK) really difficult. Examples of this include factoring primes, finding the log, or really any other NP-complete problem.
[Edit: snap, neither of those are proven NP-complete. They’re all unproven, yet different. Hopefully you still see my point: crypto is based on one-way functions. Those are operations that are easy to do, but hard to undo. ie multiply two numbers vs find the prime factors of the product. Good catch tduehr]
More power to you for playing around with a really cool branch of mathematics, just remember that crypto is based on things that are hard, not complicated. Many crypto algorithms, once you really understand them, are mindbogglingly simple, but still work because they’re based on something that is hard, not just switching letters around.
Note: With this being said, some algorithms do add in extra quirks (like string seversal) to make brute forcing them that much more difficult. A part of me feels like I read this somewhere referencing DES, but I don’t believe it… [EDIT: I was right, see 5th paragraph of this article for a reference to the permutations as useless.]
BTW: If you haven’t found it before, I’d guess the TEA/XTEA/XXTEA series of algorithms would be of interest.