<p>I am interested in being a cryptographer after college. I want to get a double major in pure mathematics and computer science with a minor in two foreign languages (I'm thinking french and russian). After I get my graduate degree I plan to go to graduate school to get a masters degree in computer science and a PHD in mathematics (some schools offer dual programs in which you only take a couple extra classes to get both). Do you think this is a good idea, and will make me competitive in the field? Do you have any recommendations, such as colleges to attend, changing my plans, ect.?</p>
<p>Cryptology is one of those areas that crosses both mathematics and computer science. At many schools, a crypto courses (also called error-correcting codes) is a cross-listed course between the Math & CS departments. Therefore, you would not need to “double major”. Just pick either Math or CS as a primary major and take electives in the other…enough electives to get a sound foundation.</p>
<p>Unless…</p>
<p>The school actually has a combined Math/CS degree program that still requires 120-semester/180-quarter credits OR take Computational Mathematics as a major. In other words, no need taking 150 semester hours to get two separate Math & CS bachelor degrees.</p>
<p>The key into getting a good academic foundation in crypto is to:</p>
<p>1) Be able to take junior/senior level Computer Networks courses from the CS dept.
2) Take a Number Theory course from the Math dept.
3) Possibly take a Abstract Algebra course from the Math dept.
4) Take a Crypto/Error-Correcting Codes course from the Math or CS or joint Math/CS depts.</p>
<p>…which can be done without double-majoring.</p>
<p>I have a different stance on this. </p>
<p>If you want to go into cryptography, you should absolutely major in math. Also take a few CS classes on the side, but you’ll need all of the math you can get. </p>
<p>I know several math majors and math PhDs who went on to do cryptography for the NSA. I don’t know a single computer science major (not double-major in math) who did.</p>
<p>
Those are two different subjects. Coding theory (error-correcting codes) will somewhat intersect with cryptography, but their emphasis is very very different.</p>
<p>For what it’s worth, here’s my experience with the two subjects in college. I once considered taking a cryptography course at Haverford College. The course was cross-listed between math and computer science, and on the first day there were mostly computer science majors in the room. One week later, only the math majors were left. The course was impossible to follow without a background in abstract algebra, and only the students with a background in algebraic number theory really understood what was going on. Fwiw, the course was taught by a former NSA cryptographer.</p>
<p>Haverford also had a course in coding theory. That was mostly taken by the computer science majors and you could get pretty far with just linear algebra and combinatorics/basic statistics and probability.</p>
<p>Oops, I just noticed that I never elaborated on the subject of coding theory vs cryptography. </p>
<p>Coding theory deals with good ways of encoding data. How much redundancy do you need in your storage solution to deal with hardware issues? (what if the hard drive randomly flipped a bit?) What’s the trade-off between saving storage space and the effort required to reconstruct compressed data? </p>
<p>Cryptography is concerned with the question, How do you encode and transmit data so that unauthorized users don’t have access to the information contained within the file? </p>
<p>Somewhat related but very different questions.</p>
<p>
</p>
<p>I can agree with this. For one, my introduction into the topic was over 20 years ago and I am not sure if my math department at the time (Michigan State) knew how to properly name courses. While our course was called “Error-Correcting Codes”…once we got to the bookstore to purchase the text…the textbook was titled “Cryptology”.</p>
<p>Also at that time (20 years back), our CS majors were required to take much more math. In today’s CS programs, with only Calc II and Linear Algebra being required, I can see more CS majors today struggling since number theory/abstract algebra is not required or even not thought of as math electives.</p>
<p>For modern cryptography, it’s important to have a solid understanding of complexity theory (beyond what a typical undergraduate CS course in complexity covers). For example, interactive proofs, zero-knowledge proofs. Also, a randomized algorithms class would be good. </p>
<p>Cryptographic protocols nowadays rely heavily on ideas from complexity theory. The days of designing ad-hoc cryptosystems based on “weak” assumptions are over. In addition, there’s been a lot of work near the end of the last century in trying to design ciphers grounded in complexity theory (see knapsack cryptosystem), although no one has really succeeded in doing so I believe. </p>
<p>On the mathematics side, you’ll want to know at least complex analysis and algebra, and then ideally go into analytic/algebraic number theory and algebraic geometry. Basically most of first-year graduate math, and then take relevant classes building on these areas.</p>
<p>edit… why is the double language minor necessary?</p>