Cryptography-I is offered by Professor Dan Boneh from Stanford University on the Coursera platform. I completed the certification recently, and that took a very long time (~ 5 months) to complete the 7-week course. I could not commit to the course faithfully and because of that I kept extending the deadline, but there is a great sense of satisfaction after completing the course.
What is it about
The course is about the theory and practice of modern cryptography and provides an in-depth view of the field. The course has two parts – Symmetric key cryptography and Public-key cryptography. The first 4 weeks cover the symmetric key cryptography, the next 2 weeks cover the public key cryptography and last week contains only the final assignment which contains questions from the complete course.
Symmetric key cryptography starts with the basic encryption & decryption first and then moves to the study of authentication, integrity check, and authenticated encryption (For more details, visit the course ;)). In every topic, we create cryptographic constructions using the basic structures called primitives and then prove that our construction is secure given the specified assumptions and security of those primitives.
Public key cryptography covers some basic mathematics and then deals with asymmetric cryptography where encryption and decryption are done using different keys known as the public and private keys. Public key cryptography also follows the same provable security under specified assumptions model, and the only topic mainly covered apart from basic encryption was how to securely share symmetric encryption keys using public-key cryptography techniques.
What I liked
- Simplicity – Prof. Dan Boneh had tried his best to explain every concept and with enough examples to support the learning. He even covered the basic mathematics required for the public key cryptography within the course itself, making the course self-sufficient.
- Great assignments – The main learning came from the Assignments. They make you think about the problems differently and all the questions are conceptual. You won’t see questions where just cramming would help you answer the question. You always need to apply the concepts from the lectures, analyze the problem, and then come up with the answer.
- Practical approach – The course ensures that you learn how to use (also how not to use) these algorithms in your projects. Professor has specially emphasized that we should never implement the cryptographic primitives ourselves and use only the available standard libraries.
What I didn’t like
- No advanced topics – It’s been a few years since the Cryptography-I course came out and it talks about the more advanced Cryptography-II course during some lessons but the course is still not available on the platform and not sure if it will be available at all. This course contains the basics and might be good enough for most of the people, but a few lectures about the open problems and recent advancements would have been awesome.
Although I learned a lot from the course, I might forget some details I have learned. Because as a software developer, we only use the standard libraries (Professor suggests this in the course itself) and never have to implement them ourselves. The main outcome of the course is that you get to think differently from our usual methods of solving problems and understand the importance of mathematical proofs. For me, it wasn’t the course to learn encryption-decryption algorithms but an extension to the standard algorithms course. I believe every software engineer should take this course at least once to develop the thinking in terms of security while designing the software and also understand what is going on inside the libraries being used.