
#8 overallClassic
Cryptography I
Coursera
41 recommenders · 47 threads · recommended in 14 years, 2012–2025 · score 66.8
An introductory Coursera course by Dan Boneh (Stanford) covering the fundamentals and math of cryptography, including practical exercises such as breaking flawed constructions. It is the first of a two-part sequence, with Cryptography II as the follow-up.
Commenters repeatedly call it one of the best courses they have taken, praising its clear, thorough explanations of crypto fundamentals and its hands-on attack exercises.
Recommendations by year
20062026
What are the best online courses you’ve taken?
On Coursera, I did Andrew Ng’s machine learning course and Dan Boneh’s cryptography course and both were excellent. Time well spent IMHO.
The next thing I want to take is a WinDbg course. Udemy has one that looks pretty good. I should probably also find a modern assembly language course…
Dan Boneh's intro cryptography course is excellent.[0] The closest to a Khan Academy "cryptography edition" one can find.
0. https://www.coursera.org/learn/crypto
PS: I must be old because I can't get past the neologism of "crypto" abused to mean "cryptocurrency" rather than "cryptography."
Dan Boneh's "Cryptography I". https://www.coursera.org/learn/crypto Was one of the best basic lecture I have seen on the crypto topic. I have enjoyed several lectures in my studies but some things I just understood after the good and interesting explanations in this course. Really amazing. Still waiting for the the Crypto 2 course.
If you understand german I recommend you math lessons by Christian Spannagel https://www.youtube.com/@pharithmetik. Makes some less interesting topics enjoyable.
I loved Dan Boneh's "Crypto 1" course on coursera about 10 years ago, and signed up for "Crypto 2" immediately. After a few years of postponement I unsubscribed from the emails, I guess it never happened :(
But I will take a look through this as it looks like it covers some of the same ground and then continues from there...
I can think of many - I have taken several starting since 2013. The tricky thing is that Coursera classes seem to get merged, re-mashed or otherwise re-branded. And as such only one currently is listed in my "Completed" courses section of my profile.
Having said that and with the caveat that these probably changed since I taken them, I recommend the following:
- Cryptography - https://www.coursera.org/learn/crypto - great introduction to the fundamentals and math behind cryptography. A lot of theory but also some practical exercises. This is my top recommended.
- Machine Learning - https://www.coursera.org/learn/machine-learning - a good introduction to the basic of machine learning; focuses on octave/matlab and does not dive into frameworks like scikitlearn or tensorflow
- Introduction to Interactive Programming with Python - https://www.coursera.org/learn/interactive-python-1 - I took a course from Rice University on Python programming through making games that was fun. As far as I can tell, this is the modern incarnation in two parts.
- Software Security - https://www.coursera.org/learn/software-security - goes into stack / overflow exploits, tools for testing, and web-based attacks
- Functional Programming Principles in Scala - https://www.coursera.org/specializations/scala - this was a good introduction to scala and functional programming - it got me thinking in a different way
- C++ for C Programmers - https://www.coursera.org/learn/c-plus-plus-a - I think this was the first coursera class I took. This course dove into the C++ STL and a lot of modern features introduced in C++11.
Three Coursera MOOCs I particularly enjoyed:
* Discrete Optimization: almost entirely problem-driven, very challenging and entertaining prof; https://www.coursera.org/learn/discrete-optimization
* Crypto I: very deep, thorough and crystal clear explanations; https://www.coursera.org/learn/crypto
* Computer Networks: excellent overall course covering a wide variety of topics; https://www.coursera.org/instructor/~517478, https://www.youtube.com/playlist?list=PLfgkuLYEOvGMWvHRgFAcj...
If you come from a computer science/math background, and want an intro to cryptography in general, I can strongly recommend the Coursera course from Stanford University by professor Dan Boneh - https://www.coursera.org/learn/crypto. To really understand the implementations of security libraries and tools, one should be at least familiar with the fundamentals and terminology of crypto. Otherwise you are blindly encrypting things without being aware of whether you are actually securing things.
The course is free and takes 6 weeks long, and is very interesting if you had never dwelled too deep into security or crypto. There's also a new cryptography class that will be available in September of 2017 - https://www.coursera.org/learn/crypto2.
Maybe I am being too harsh, but it is clear the author does not have a formal education in the subject [0] nor any track in breaking non-toy crypto implementations [1]. This alone makes me a bit wary of any recommendation one may read in the material.
There seems to be more attention to listing all the beasts in the cryptographic zoo than to the few fundamental tools required to really understand the mechanics (e.g. birthday paradox, PRFs, some prime number theory).
Sure, I can't spot anything fundamentally wrong and it all reads pretty smoothly, but calling this a "course" is highly misleading. If the intention is to guide people in selecting good crypto primitives, then maybe "guide" is a more honest word?
For those interested, I would strongly recommend to bite the bullet and dedicate time to Boneh's course on Coursera.
[0] I don't have any either [1] Ditto
I just wanted to chime in and say that I had always avoided infosec as "too hard" (I'm primarily a UI guy), but the Snowden leaks have made me a lot more conscious of my digital footprint and security in general. I even spent several months on khan academy learning the requisite maths to understand the stanford crypto 101 class on coursera (awesome course by the way!). Of course I'm far from journeyman status but I believe there are many more like me whose awareness of the issue was significantly raised by the leaks. Even if no political changes come about as a result, that's a huge aggregate effect that will only increase over the next years/decades.
I recommend Coursera's Crypto 1 course - it walks you through the internals of a lot of the crypto stuff, hammers "Don't do it yourself!" into you and there are programming challenges that involve breaking crypto constructions, finding hash collisions etc etc.
I'm really hoping crypto 2 actually starts in about 10 days as it seems to have been put back a lot.
--edit-- Just to sell it further, it also goes into padding oracles, timing attacks and a variety of clever stuff to show you just how easy it is to screw up :)
Try Dan Boneh's crypto course on coursera [1]. It covers quite a lot of ground, both practical and theoretical, and includes programming exercises similar to the matasano puzzles. Without a doubt it's one of the best courses of the dozen MOOCs I've taken. There's also a followup course [2] (I haven't taken it yet personally, but I believe the currently scheduled run will be the first).
Interestingly enough, there's also an upcoming security course (with no date planned yet) which will cover the application programming part of security and will be co-taught by him. [3]
[1] https://www.coursera.org/course/crypto [2] https://www.coursera.org/course/crypto2 [3] https://www.coursera.org/course/security
This is not terribly on-topic, but, if you're interested in cryptography, Dan Boneh (Craig Gentry's advisor) is currently giving a Coursera course on it:
https://class.coursera.org/crypto-006/class
I'd highly recommend it, it's amazingly interesting, and Boneh is very good at explaining things. I used to think that cryptography was hopelessly impenetrable, but it turns out most algorithms (well, mostly symmetric cryptography) are simple to understand. We're currently at asymmetric crypto and the math's starting.
The quality of the courses I have followed was excellent:
Coursera:Cryptography I - Dan Boneh
Coursera:Functional Programming Principles in Scala - Martin Odersky
Coursera:Compilers Alex Aiken
class2go.stanford.edu Introduction to Databases Jennifer Widom
As I stated on another comment, one of the main barriers to entry for me is the money to pay tuition while I am studying, with no guaranteed return, the question then is where to go from here, I don't want to let myself stagnate academically, so I want to at least do something to self improve and I feel that learning yet another language can only teach me so much, I've been toying with the though of an ICS course or something similar but none of the courses they offer are really any good.
(Disclaimer: I have already tried the Coursera courses and thought they were great but didn't really enjoy the format, I would however recommend the Dan Boneh Cryptography class, it taught me more than any other!)
Dan Boneh is amazing. I took his Cryptography course at Stanford and loved it so much that I ended up having him advise me on my senior thesis. Would highly recommend stuff that he puts out.
Yes, the Coursera title was "Cryptography I", so I was expecting another part, but ten years after, I still do not see any. A great course anyway.
I learned a lot about cryptography in Stanford Cryptography I and II courses, and about machine learning in Andrew Ng course (but it was years ago so it's kind of useless now)
I then tried to learn compilers on something Standford has called LaGunita or whatever and it was closed while I was studying it (and it never worked properly). But I wouldn't finish that course anyway, compilers are hard.
Personally, I feel that HAC has aged surprisingly well compared to other books of that era. It’s focus on theory and fundamentals helps there. I still think it has some of the best introductions to cryptography topics. But, yes, read it in combination with a newer resource like Coursera’s Crypto I course, or Serious Cryptography by Aumasson. (I wouldn’t recommend the Boneh/Shoup book for newcomers. It is still very much a draft).
I took Boneh's graduate class a few years ago through SCPD. Recommended if you can justify it. He has a Coursera course that I assume is of similar high quality with less depth and rigor.
We used the above two books in addition to Handbook of Applied Cryptography by Alfred J. Menezes, Paul C. van Oorschot and Scott A. Vanstone. I notice Boneh no longer uses the latter for CS255; perhaps it is too out of date now? At any rate, it is also available free on the web: https://cacr.uwaterloo.ca/hac/
All videos of all courses in Coursera are free. You can watch them fully without providing your credit card info.
There are two types of courses in Coursera- free and paid.
In case of the paid courses, you can go to the course and navigate to the "Buy Subscription" page and click on "audit the course". You can watch all the videos for free, but you don't get access to quizzes and programming assignments (you never know what a web search will turn up ;)) ⊕. You do not get a certificate by completing a course or completing all courses of a "Specialization".
In the case of a free course, you get access to all the videos, quizzes, and assignments. You don't get any kind of certificate. Instead of going to subscription page, you can just click "Enroll" and choose the no certification option.
There are some great courses in the free tier (videos + assignments, no certs) as well. Dan Boneh's Cryptography and Grossman's Programming Languages A, B, C come to mind. Also Model Thinking by Scott Page.
There were some great discussions on HN in the past. [0][1][2]
⊕ There are courses where duplicates of paid assignments and quizzes are provided under "Practice Assignment" as opposed to "Graded Assignment". Like Martin Odersky's Functional Programming Principles in Scala MOOC.
[0]: https://news.ycombinator.com/item?id=25245125
[1]: https://news.ycombinator.com/item?id=16745042
[2]: https://news.ycombinator.com/item?id=22826722
That is a shitty problem to have, there is no perfect solution. If you at all can, change the problem. If that means you need a virtualization layer, use it if possible.
---
The first sentence of the link I gave you reads as follows: "Some applications may need to store the authentication tag and the encrypted message at different locations."
Then it shows you the following function that achieves that separation (with zero performance overhead I might add):
int crypto_aead_aes256gcm_encrypt_detached( unsigned char *ciphertext, unsigned char *mac, unsigned long long *mac_size_p, const unsigned char *message, unsigned long long message_size, const unsigned char *additional_data, unsigned long long additional_data_size, const unsigned char *always_NULL, const unsigned char *nonce, const unsigned char *key);
If that does not help you, you need more basic training. I recommend Dan Boneh's standford cryptographic course or crypto1O1. And if you need to understand the severity of various attacks at a gut level, you might want to take a look at the cryptopals challenges as well:
http://openclassroom.stanford.edu/MainFolder/CoursePage.php?...
https://www.crypto101.io/
https://www.cryptopals.com/
I have no idea. I'm self taught, and I tend to limit myself to implementation techniques. My tutorials on the subjects are mostly implementation focused:
http://loup-vaillant.fr/tutorials/fast-scalarmult
http://loup-vaillant.fr/tutorials/cofactor
http://loup-vaillant.fr/tutorials/128-bits-of-security (This one is more about choosing your primitive than implementing it.)
If you want to get started in cryptography in general, I can recommend 2 sources: Dan Boneh's course, and crypto101 by lvh:
https://www.coursera.org/learn/crypto
https://www.crypto101.io/
I agree--I very strongly recommend this course. I binged Dan Boneh's lectures on a late Friday night like I was watching Netflix. I'm serious.
I think that what most of them are missing are testing hard questions and projects without hand-holding. Many of the courses I have taken have been good, but they will just graze the surface of anything approaching harder mathematical questions on tests and projects are too "fill in the blank (function)" rather than requiring critical thinking. I took one Udacity class and I certainly felt like I had been cheated, more cutesy animations and polished videos than real content.
I would use them for an introduction, but would definitely pick up a well recommended textbook after, or do a medium sized personal project after. Although the Coursera Cryptography class I took was just as good as my University one so I guess it really depends.
What's the difference between Udacity and Udemy? Are they the same company?
Also, I'd love to hear about your favorite online courses. I took Andrew Ng's Machine Learning and Dan Boneh's Cryptography (both on Coursera) and they were excellent.
Dan Boneh's (Stanford) Cryptography I on Coursera.
Excellent course; he is a fantastic teacher.
If you are interested in more than an article, this course is very good.
https://www.coursera.org/learn/crypto
Sorry to spoil it, but the conclusion will basically be the same as the article, as in "just don't".
The other course from Coursera that I thought was outstanding was the Cryptography course by Dan Boneh. It covers a lot of material in a very practical, hand-on way.
And Dan Boneh's Coursera course is excellent too (maybe one day he will get around to doing the endlessly postponed part 2).
I've paid for a few courses to simply pay for the content that I'm watching. The Coursera crypto course was excellent. Lately, the better courses that I've seen have been on the edX platform.
That was my intention when I signed up for University too. However, I've only had two maths modules, and they haven't been particularly challenging.
One of the things I was looking forward to learn at University was hardcore cryptography, since I believe that's one of the few things for which getting formal, structured education is the best way to go. Sure, you can learn the fundamentals on your own fairly easily (even more so today - Stanford's online course in cryptography is very good), but you need to learn about attacks or you'll write code vulnerable to known problems like hash length extension attacks, ciphertext modification...
However, the only time cryptography was mentioned - at all - in my entire BSc was in first year, where we had a few lectures explaining the rudiments of RSA. Interesting, for sure, but pretty much useless without the remaining 80% of knowledge required to have a full picture of what's going on.
I've completed a bunch of Coursera courses. Quality really varies. Even within the 9 course Data Science specialization [1] track some courses were rather poor while the rest were very good. I'm currently taking the #5 rated course [2]. It is excellent. But I'm only taking it because the Statisical Inference course in the Data Science specialization was so weak.
I would also recommend the Cryptography 1 course by Dan Boneh on Coursera [3]. Excellent if you are at all interested in the subject.
I always download the lecture videos, slides, quizzes, labs and exams because, as mentioned, many of the courses don't allow access once the class is completed.
You definitely have to have plenty of self discipline to complete MOOCs. And I don't have any delusions about a Coursera certificate being useful in landing a job; that's not what I'm after. I'm building the skills I want to apply to my own projects.
[1] https://www.coursera.org/specializations/jhudatascience [2] https://www.coursera.org/course/statistics [3] https://www.coursera.org/course/crypto
Lovely, I'm currently taking Stanford's Criptography course on Coursera and it's both entertaining and enlightening. I highly recommend it. https://class.coursera.org/crypto-015/
Try this "Crypto I" course
https://www.coursera.org/course/crypto
So I don't know what textbook to suggest but are you aware of: https://www.coursera.org/course/crypto I've heard it's pretty good.
I recommend Dan Boneh's coursera course, Crypto I, to get a good (basic) grounding in how some of this stuff works. He shows just how easy it is to break bad crypto systems in unexpected ways, and he does it by leading you through 5he attacks and getting you to implement some.
Was rather impressed...
Both coursera and udacity have amazing courses on crypto.
Udacity: https://www.udacity.com/course/cs387
Coursera crypto I: https://www.coursera.org/course/crypto
Coursera crypto II: https://www.coursera.org/course/crypto2
I took coursera crypto I myself. It was a lot of work, but I learned a ton.
There's a great Crypto I course on Coursera that I would highly recommend.
I second that, it's been the best course I've taken up on coursera so far (with Dan Boneh's crypto). The lectures are great, but the best for me was the high quality provided course notes. I read those in my morning and evening commutes and I didn't even have to watch the videos!
The exercises were well crafted, guiding you part by part to build your program, and challenging enough that you learned something valuable. It definitely made me interested in exploring more the three languages presented - ML, Racket and Ruby.
I'm currently taking the second Scala course and I have to say it's a bit of a disappointment so far. Martin Odersky's part was good, but I didn't really like Erik Meijer's teaching style (I understood Futures and Promises better after reading a few articles about these). I haven't caught up with Roland Kuhn's part yet.
However I've been incredibly frustrated with the exercises. They are tedious, but for the wrong reasons: you have to make a lot of guesses on what are exactly the semantics of what you're supposed to implement, sifting through the forum and the FAQ for relevant information. After you've submitted, you now have to wait for a long time (between 20 and 100 minutes) for the automatic grader to tell you whether your guess about what exactly you had to implement was right or wrong.
It's still an interesting course, and it's worth just for the sake of getting your hands into some Scala code, but there's that caveat.
Dan Boneh's Cryptography I class on Coursera is about to start again in just a few days. I highly recommend it: https://www.coursera.org/course/crypto
Dan did such a great job on the Stanford Crypto course, it's worth learning the basics to learn the important bits.
https://www.coursera.org/course/crypto
Yes, I've heard about the Matasano's Crypto Challenge, but want to recommend Coursera's Crypto courses too: https://www.coursera.org/course/crypto
I'd recommend the Coursera crypto course: https://www.coursera.org/course/crypto
Dan Boneh's crypto course is starting in 5 days on Coursera. Syllabus is not same as the OP's course but is very good and useful nonetheless.
https://www.coursera.org/course/crypto
You can sign up for Cryptography courses at Coursera.org. You learn about basic tenets of crypto like attacker games, cryptogaphic advantage, cracking some exploits (AES-CBC). If you do the problem sets and programming assignments and pass the course without help, you are off to a very good start I would say.
https://www.coursera.org/course/crypto is excellent
If you find this kind of stuff interesting, take Dan Boneh's Cryptography class on Coursera. It covers issues like this very well...
https://www.coursera.org/course/crypto
Zenst - it sounds like you have a lot of interest in cryptography, and your lack of familiarity with PBKDF2 and friends suggests that you have just entered this space.
I highly recommend https://www.coursera.org/course/crypto as a great introduction into some of the more interesting elements you are working through.
tl;dr:
To learn about some cryptography fundamentals:
* Read Katz & Lindell's Introduction to Modern Cryptography
* If you're missing math background, read Timothy Gowers' blog
* Supplement: Take Jonathan Katz' and Dan Boneh's MOOCS (links in post)
To get to the point where you can "design/analyze crypto protocols" (and maybe know what you're doing):
* Read Oded Goldreich's Foundations of Cryptography (Volumes 1&2)
* Try to have quasi-intelligent conversations with real cryptographers (advice for this in blog post)
* Get a PhD somewhere with a good crypto program
edit: formatting
There was not a lot of low level stuff on block ciphers. In an early unit, he said that while it is interesting to go into how block ciphers work at the low level, he was going to omit that to get on to application of cryptography (I believe the official title of the course is "Applied Cryptograph"). He emphasized that very very few people should be designing their own block ciphers or doing their own implementation of existing designs--almost everyone should be using a library implementation that has been well tested by experts.
I haven't taken the Stanford course (I'd like to--but my schedule has just not worked out to allow it yet), but I did go look at the slides from a few of the lectures there and it appeared that they go into more detail at the lower level on ciphers and hashes. I got the impression that the Stanford course and the Udacity course would compliment each other quite a bit.
As far as breaking someone's encryptor goes, there would be some mention of how things could be exploited if the thing you were attacking had certain flaws, usually as motivation to explain why things were done a certain way. E.g., if you don't have a random nonce here, someone will be able to do this and that will reveal something about your plaintext...that kind of thing.
For the specific example of trying to break someone's system that is using a block cipher in CTR mode to make a stream encryptor, I think a student finished the Udacity course and did well would know enough to:
(1) recognize that CTR mode is essentially using the block cipher to generate the key for a OTP, so flipping bits in the ciphertext flips the corresponding bits in the decrypted plaintext. Hence, if the attacker can find out through some means enough information about the structure of the messages so as to predict what is in the plaintext (account number to receive the deposit, for instance) he can make meaningful changes (assuming the system does not include some kind of check on the message integrity).
(2) recognize that if the key and counter sequence are ever reused the consequences are essentially the same as reusing a OTP key, and so focus on how the keys and counters are being initialized.