Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

First let me apologize if this is an ill posed question. Let me also note that I

ID: 649789 • Letter: F

Question

First let me apologize if this is an ill posed question. Let me also note that I do not in any way seek a comprehensive answer, simply your thoughts on what makes for a valuable asset to a company like the NSA. I am a Maths student in the US, and I realize that a problem-solving mind is at minimum required for said question.

Some other responses I would find helpful include coursework, relevant programming languages, as well as helpful books. I am currently reading Schneier's (sic?) Applied Cryptography.

Explanation / Answer

It seems we have aligned interests. I'm also a university student (although I am a math/comp sci double major) looking to pursue a career in cryptography. To that end, I have been self-studying it for a while now. So, take what I say with a grain of salt. As a forewarning, this post focuses specifically on what topics cryptographers often encounter and less about what, as a person, makes you useful as an employee to a crypto-agency.

From what I can best tell, the requisite knowledge of computer science is entirely dependent on what you want to do with cryptography exactly. If you are looking to work in an applied area, then you had best had a strong grasp of the basics of computer science. If you are implementing algorithms, then you will likely need to know the basics of modern-day computer architecture.

The reasons for this are many-fold. First, an understanding of computer architecture will allow you to optimize code like no other. For instance, a knowledge of things like instruction-level parallelism and pipelining is incredibly important because taking proper advantage of both can seriously speed code up. Second, you may need to know some basics about architecture in order to ensure security of your scheme. For instance, if you are working with smart cards, you will need to be able to design, or at least verify the security of, tamper-resistant circuitry.

Further, you will need a strong knowledge of C, which sits so close to the hardware that it isn't too far a step away anyways. From what I can tell, the vast majority of "serious" crypto code is written in C, even if it has a language wrapper around it (e.g. PyCrypto). Other languages, especially interpreted ones, simply do not allow the same performance as C, and we do like performant implementations. Another selling point of C is that, in crypto, you are most often working with raw bytes and bits, which is exactly where C shines. It's the de facto language for low-level work.