European Master in Software Engineering

Foundations of Cryptography


Cryptography is a fundamental tool for protecting information and communication in computer systems. This course is an introduction to cryptography, suitable for students interested in mathematics and computer science. The course will primarily focus on definitions and constructions of various cryptographic primitives, including pseudorandom generators, pseudorandom functions, encryption schemes, digital signatures and message authentication codes. Students will learn how to reason about the security of cryptographic constructions and how to properly use these constructions in real-world applications.


  1. General introduction to the problem of secret communication. Perfect security; one-time pad cipher and Shannon impossibility result. Introduction to computational security
  2. Encryption and motivation for basic functionalities: one-way functions/permutations, trapdoor permutations
  3. Number theory and realizations of (trapdoor) one-way functions
  4. Toy public key encryption; from deterministic to probabilistic encryption. Hardcore bits and Goldreich-Levin theorem
  5. Pseudorandom generators
  6. Public key encryption: definition of semantic security and constructions
  7. Secret key encryption and stream ciphers
  8. Pseudorandom functions: definitions and realizations
  9. Message Authentication Codes
  10. Digital Signatures
  11. Collision-resistant hash functions
  12. More topics

Assessment Method

Periodic exercise sheets


No prior knowledge of cryptography is required, as well as no formal mathematical prerequisites are needed. However, mathematical maturity (e.g., reading and writing proofs) is expected.



Recommended Reading


Web site:

Lecture Theatre


Tuition Language


Subscription to this seminars:: To subscribe to the selected seminars, please, fill in this fields (use only your UPM email)::