Working on cryptography requires some background on various parts of Mathematics, theoretical and algorithmic sides of Computer Science, and possibly some additonal fields. To help new learners, we have prepared a list of suggested resouces for learning each sub topic that is necessary for performing well in cryptography research.

The best use of the following list would be to first assess yourself, and then work on the parts that you are weakest at first. All the resources are chosen for your convenience, among many alternatives, and decided to be one of the best in their relative fields.

At the end, we also provide resources for learning cryptography itself as well.

**1. DISCRETE MATHEMATICS**

The topics involve basic mathematical concepts, such as sets, functions, relations, modular arithmetic, and possibly their applications to algorithms. All computer scientists and engineers must know these concepts well.

Beginner's resource: "Discrete mathematics : mathematical reasoning and proof with puzzles, patterns, and games" by Douglas E. Ensley and J. Winston Crawley.

More comprehensive resouce (includes topics that are directly related to Computer Science, and partly cryptography): "Discrete Mathematics with Applications" by Susanna Epp.

**2. PROOF TECHNIQUES**

Crucial for cryptography.

http://zimmer.csufresno.edu/~larryc/proofs/proofs.html

**3. ALGORITHM ANALYSIS and BIG-OH**

Introductory resources:

http://en.wikipedia.org/wiki/Analysis_of_algorithms

http://www.perlmonks.org/?node_id=573138

http://www.roseindia.net/java/java-tips/algorithms/big-oh/bigoh.shtml

Advanced resources: Must take a course on Data Structures, and a course on Algorithms. Such courses may be found freely online at http://www.coursera.org

Also see "Algorithms" by Robert Sedgewick. http://algs4.cs.princeton.edu/home/

**4. (DISCRETE) PROBABILITY**

Crucial for cryptography. Mostly, continuous random variables are not needed.

"An Introduction to Probability Theory and Its Applications", by William Feller

**5. LINEAR ALGEBRA**

Some cryptographic constructions require linear algebra, though not all. But at the very least, basic concepts such as vector spaces, matrices, matrix multiplication, determinants, etc. should be known. If you work on lattice-based cryptography, advanced levels would be necessary.

Introductory resource: "Linear Algebra" by Jim Hefferon.

Advanced resource: "Linear Algebra" by Georgi E. Shilov.

Many exercises: "Linear Algebra: A Modern Introduction" by David Poole.

**6. NUMBER THEORY**

This topic is at the heart of modern cryptography. The following resource can be used by computer science and engineering students who did not take abstract algebra or number theory courses.

"A friendly introduction to number theory" by Joseph H. Silverman.

Interactive resouce for fun learning: http://userpages.umbc.edu/~rcampbel/NumbThy/Class/BasicNumbThy.html

**7. COMPUTATIONAL COMPLEXITY**

Introductory resource: "Introduction to the Theory of Computation" by Michael Sipser.

Mostly, the eventual knowledge we are trying to learn here is the complexity classes using Turing machines. Things like complexity class P and NP, concepts such as NP-completeness and reductions. Once the introductory knowledge has been gained, cryptography researchers are suggested to continue with the advanced resource.

Advanced resource: "Computational Complexity: A Modern Approach" by Sanjeev Arora and Boaz Barak.

-------------------------------

AT THIS POINT, MANY STUDENTS CAN BE CONSIDERED TO HAVE ENOUGH BACKGROUND FOR PERFORMING RESEARCH ON CRYPTOGRAPHY. DEPENDING ON THE SUB TOPIC OF THE RESEARCH OF THE STUDENT, THE FOLLOWING CONCEPTS SHOULD ALSO BE LEARNED. **THESE TOPICS ARE ADVISED FOR SERIOUS LEARNERS.**

-------------------------------

**8. INFORMATION THEORY and CODING**** THEORY**

These topics go hand-in-hand with probability. Entropy in information theory is a key concept in cryptography. Furthermore, coding theory concepts such as error-correction codes are used in many cryptographic applications.

Introductory resources (mostly on information theory):

"An Introduction to Information Theory: Symbols, Signals and Noise" by John R. Pierce.

"Introduction to Coding and Information Theory" by Steven Roman.

More resources (mostly on coding theory):

"A First Course in Coding Theory" by Raymond Hill.

"Coding Theory: A First Course" by San Ling and Chaoping Xing.

**9. NETWORK PROGRAMMING**

Cryptography, in general, does not require knowledge of networks. But applying cryptographic constructions generally do require network *programming*. Network security research, on the other hand, does indeed require knowledge of computer networks, but such resources are not included here. For network programming, one may use the following resource:

"Unix Network Programming, Volume 1: The Sockets Networking API" by W. Richard Stevens.

**10. OPERATING SYSTEMS**

Cryptography, in general, does not require knowledge of operating systems. But, some key cryptographic concepts, such as passwords and encryption, pay a critical role in operating systems, and thus may be good to know how they are used. Furthermore, systems security researchers must know these concepts well.

"The Design of the UNIX Operating System" by Maurice J. Bach.

"Operating Systems Design and Implementation" by Andrew S. Tanenbaum.

-------------------------------

Finally, some resources on **CRYPTOGRAPHY** itself: We provided a carefully planned and maintained up to date self study program for learning cryptography. We employ a mix of resources available freely online, as well as provided freely by us. You may find the self study program here:

https://sites.google.com/a/ku.edu.tr/self-crypto/

-------------------------------

Special thanks to Miray Gizem Yılmaz and İsmail Cevat Ertoy for their help in preparing this pathway.