As a crucial part of computer security, cryptography has become increasingly important. However, due to the mathematically complex nature of cryptography, misunderstandings, misuses, and abuses of cryptographic techniques are very common. There is a huge gap between the theory of cryptography and its application. In this course, we study cryptography in a rigorous manner. Our focus is correct application of cryptographic techniques in practical scenarios, rather than the mathematical foundations of these techniques. We stress careful design and analysis of secure systems using existing building blocks. Topics to be covered include private communications (DES, AES, ECB, CBC, RSA, Rabin), identification and authentication techniques (passwords, certificates, SSH, Kerberos), secure protocols (digital cash, Internet auction, electronic voting).