14 steps for learning crypto.
I personally found the Real World Cryptography book invaluable in understanding cryptographic building blocks and how they tie together.
Below content was provide by @SalusaSecondus [1]
- Dan Boneh's Cryptography I
- Cryptopals Crypto Challenges
- Introduction to Cryptography by Christof Paar (I haven't personally verified this one.)
- Read the source of the libraries you use.
- Find people working in spaces closer to professional cryptography than you and ask them to help you (buy them beers or beverages of choice)
- Look at public issues on GitHub for libraries you use and see if you can contribute, or at least understand them
- Read tons of specifications. You use AES-GCM? Read NIST SP 800-38D You use HMAC? Read RFC #2104
- Read The Stick-Figure Guide to AES
- Read the Latacora Blog (especially the "Right Answers")
- Read my Cryptographic Gotchas list.
- Read If You’re Typing the Letters A-E-S Into Your Code You’re Doing It Wrong(link is broken). archived link alternate link by the NCC group
- Remember (and try to follow) any company/person mentioned in this list.
- How To Learn Cryptography as a Programmer
- KNOW YOUR LIMITS - Let me re-emphasize that last one. As everyone tells you, doing crypto is hard and dangerous. If you are confident that you're doing things right with no problems, you can't be trusted. You need to treat cryptography with the caution and respect it deserves. I can think of at least one coworker whose cryptography I don't trust because he is over-confident in his own abilities. (And his skills are better than mine. Still, I'm more trusted because I'm more cautious.)
[1] For more please also visit the excellent guide @SalusaSecondus has put together Crypto Gotchas!.