Cryptography is the science of designing algorithms and protocols that guarantee privacy, authenticity, and integrity of data when parties are communicating or computing in an insecure environment. Over the past twenty years, cryptography has evolved both in theory and practice. Indeed, without noticing it, we are starting to use cryptography in our everyday life (e.g., when we perform a secure internet transaction over the web).
In this introductory course, we will uncover some of the secrets behind the magic of encryption, authentication and other cryptographic tasks. Correspondingly, we will go into the ``math'' behind the currently used cryptographic algorithms, and also point out the (slowly narrowing) gap between cryptographic theory and cryptographic practice.
Since this is an introductory undergraduate course, we will often go wide instead of going deep. Nevertheless, you will be assumed to have some elementary mathematical background and maturity, while the more advanced material will we developed in class. When possible, we will also discuss formal mathematical definitions, although we will often keep the presentation at an intuitive, semi-formal level.
Tentative topics include:
Although you will learn a lot, this course will not teach you everything you need to know about cryptography, and certainly not everything you need to know about the more general field of computer security. For example, we will not study intrusion-detection and firewall software, or how to ``hack'' into a government system, or how to implement a given cryptographic system in the most efficient manner.
Finally, remember that this course is not about learning the ``acronyms'' to impress your peers: instead, we will concentrate to see how cryptographic primitives are actually built.