This course deals with the study of modern cryptography from a theoretical
perspective, the emphasis of the course being on "provable security". In
particular, we study the cryptographic primitives that are the building-blocks
of various cryptographic applications. The course involves the study of notions
of security for a given cryptographic primitive, its various constructions, and
respective security analysis based on the security notion. The cryptographic
primitives that we cover include pseudo-random functions, symmetric encryption
(block ciphers), hash functions and random oracles, message authentication
code, asymmetric encryption and digital signatures. Time permitting; we also
study how to build secure cryptographic protocols for authenticated key
exchange, using the primitives that we study. We also study
various number-theoretic assumptions cryptography is based upon.