This course provides an introduction to the fundamental concepts of cryptography, the practice of protecting information and securing communication in computer systems. We start with classical encryption techniques, and consider modern private-key and public-key crypto systems and study their security against eavesdroppers or attackers, who tamper with network traffic. The course is aimed at students with a background in computer science or mathematics, and will include both theoretical and programming exercises.