4 ms·
> I hear this every time cryptography is brought up. I think I get that it's hard, but people make it sound like it's the hardest thing ever. It’s not literall
by dsacco 9y ago
> I hear this every time cryptography is brought up. I think I get that it's hard, but people make it sound like it's the hardest thing ever.
It’s not literally the hardest thing ever, but it’s probably in that category of difficulty with a few other domains. There are several reasons why this is the case.
First, to understand cryptography well enough to safely design a novel cryptosystem requires significant knowledge of information theory, complexity theory and approximately all of undergraduate mathematics. If you’re only developing symmetric encryption cryptosystems or primitives like hash functions, you can probably stop there. If you’re developing a novel public-key cryptosystem, you will be adding on graduate-level study in number theory and algebra; in particular for advanced topics in elliptic curves, coding theory and vector spaces (lattices). Throw in game thory while you’re at it to model cryptosystems and their security proofs. You don’t need everything from every course, and it doesn’t have to happen in a strictly academic setting, but you still need to acquire that knowledge if you want to design novel systems.
Second, while a lot of “hard” fields require knowledge of very advanced topics in math, cryptography is somewhat unique in that the incentive to identify a mistake in your design is extraordinary. Designing an imperfect alternative to bcrypt or scrypt results in absolute catastrophe for real-world user privacy and monetary assets if a serious vulnerability is found after it’s widely adopted. Simply put: this is an arms race, and most software does not need to be designed to be fault-tolerant in an actively hostile environment. This elevates the design difficulty to what you could call the “military setting.”
Finally, and corollary my second point, cryptography is very difficult to implement. It’s fairly easy to choose the wrong parameter when you’re implementing a cryptographic primitive from a specification, or to accidentally destroy the security of the cryptosystem in an attempt to make it a bit faster (e.g. lattice reduction). And other than that you need to defend against a battery of side channel attacks, which introduces another level of complexity.
I personally understand a lot of academic cryptography (but the more you learn the less you actually know...), and I’d say that, categorically speaking, cryptography is comparable to rocket science. I’m not claiming it’s absolutely as hard, but it shares many of the broad strokes. It’s not brain meltingly difficult in any single dimension (I find cryptography papers far easier to read than some blog posts by Terence Tao, for example), but the conceptual addition of a “safety” requirement makes everything more complex. It elevates the requisite mathematical knowledge and engineering rigor needed to design and implement a good cryptosystem.