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 20^{th} 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 18^{th} 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:**

- Gain an appreciation of classical cryptography and the (discrete) mathematics that is involved.
- Learn enough Number Theory to understand modern cryptographic systems and why they are secure.
- Gain exposure to Java programming and its BigInteger class.
- Know the complexity of various important algorithms that are important in the study of modern cryptography.
- 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/12 Quadratic
Congruences 9

3/19 Quadratic
Ciphers (introduce Mca) 10

Exam (March 23^{rd})

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 23^{rd}) 10%

One
semester exam (March 23^{rd}) 15%

Take-home Final Exam 30%

**Home Grown Web Pages**

A general monoalphabetic substitution cipher

Experiment
with Linear Ciphers

Vigenere Cipher** **and *le Tableau*

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

Modular
exponentiation in the *small*.

** **

**Other Links **

Videos
about the German ENIGMA machine

Tony Sale's Codes and Ciphers Page

** **

** **

** **

** **