Computer Science 321.01

Cryptography

Spring 2018

Instructor:

Professor Tom Valente

x6210

Bagby 123

Office Hours:  MTuWR 2:30PM-4:00 PM

Meeting Times:

MWF 1:30PM – 2:20PM in Bagby 020

Textbook:

Cryptpology Unlocked   by  David Wayne Bishop

Course Description:

Cryptography is the study of the design and implementation of systems for enciphering secret messages.  A message is encrypted or “enciphered” using a “cipher”, which is a scheme for replacing “plain text” with “cipher text”.  Naturally, a means must exist for the intended recipient to decipher or “decrypt” the cipher text.  It should be that the algorithms for encryption and decryption must both be fast in the presence of a so-called “key”.  It should also be the case that decryption without the so-called key is computationally difficult, if not unfeasible.

A great deal of mathematics is required for the design of cryptographic systems, much of it from the field known as number theory, though fields such as abstract algebra and linear algebra often play a role as well.  Thus, we will hope to learn a fair amount of mathematics in order to appreciate both the design of cryptographic systems and also whether or not such systems are vulnerable to attack by “cryptanalysis”.

Our tour of cryptographic systems will be, in part, historical.  We’ll want to know about a system used by Julius Caesar roughly 2000 years ago, and the kinds of systems that were used throughout the centuries leading up to the 20th Century.  We’ll want to know about the more sophisticated systems used during World War II, when, for the first time, computers were involved in code breaking.  Finally, we’ll want to know about how classical number theory results by Fermat and Euler from the 18th century have contributed, only since the 1970’s,  to schemes for both “private key” and  “public key cryptography”, and how these schemes play a role in today’s secure communications.

Objectives:

1. Gain an appreciation of classical cryptography and the (discrete) mathematics that is involved.
2. Learn enough Number Theory to understand modern cryptographic systems and why they are secure.
3. Gain exposure to Java programming and its BigInteger class.
4. Know the complexity of various important algorithms that are important in the study of modern cryptography.
5. Have lots of fun doing homework and other things (see below).

The Plan:

Weeks Of                               Topic                                      Textbook Chapter

1/15, 1/22                    A History of Cryptography                             1

through World War I

1/29    Code breaking during World War II (various media)

2/5    The complexity of some simple “big integer” algorithms,

motivated by the author’s “big integer” class, and an               2

introduction to  Java’s BigInteger class.

Properties of Integers                                                                 3

2/12                             LDEs and Linear Congruences                       4

2/19                             Linear Ciphers                                                5

2/26                             The Chinese Remainder Theorem                  8

3/19                             Quadratic Ciphers (introduce Mca)               10

Exam (March 23rd)

3/26                             Primality Testing                                            11

4/2                               Factorization Techniques                                12

4/9                               Exponential Congruences                               13

Exponential Ciphers,

4/16, 4/23                    RSA and its Weaknesses;                               14

Key Exchanging and Digital Signatures

Homework (textbook exercises and programming)    45%

Quizzes (probably 3 or 4, all prior to March 23rd)     10%

One semester exam (March 23rd)                               15%

Take-home Final Exam                                              30%

Home Grown Web Pages

This site is for quick encoding of letters with 2-digit replacements.

Modular exponentiation in the small.

The Java API