95-804 Applied Cryptography
- 12 units
Prerequisites: 95-712 or 95-713 and strength in algebra
This course presents the mathematics and programming associated with selected topics from public key and secret key cryptography. The course includes a discussion of the general principles of encryption and digital signatures, the mathematical underpinnings of the basic public key algorithms, and implementation of these methods in high level tools such as SSL/TLS. The course also includes a set of programming projects implementing various cryptographic algorithms and protocols. Mathematical topics include primes and unique factorization, Greatest Common Divisors and the Euclidean Algorithm, basic modular arithmetic, inversion using the Extended Euclidean Algorithm, efficient calculation of large powers in modular arithmetic, Fermat's Little Theorem, the Rabin-Miller Test, and discrete logarithms. With this background, public key methods based on factorization and discrete logarithms are discussed. Projects are coded in Java and include a "bare hands" implementation of basic cryptographic algorithms using Java's primitive types, Java's BigInteger class, and projects involving high-level tools such as the Java Cryptographic Extension API (JCE) and the Java Cryptography Architecture (JCA). Prerequisite: It will be assumed that the student has basic Java programming skills and is enthusiastic about mathematics and programming.