Getting Started

Tutorial Problems

Most of the problem descriptions give just enough information to find the solution. That makes for interesting problems but if the topic is new to you it may be kind of confusing. Tutorial problems are easier and give a more in depth explanation of the problem and what you need to do to find the solution, and what you learn can be applied to the more difficult problems.

View Tutorial Problems

Working with RSA Keys

ASCII armored RSA keys are used throughout this site and are of the following form:
[base64 data]
There are several ways you can parse ASCII armored RSA keys, the easiest way being with openSSL. The output will contain several values including the modulus n and the public (or private) exponent e (or d).
$ openssl rsa -RSAPublicKey_in -text < [infile] > [outfile]  # for pkcs1 public keys
$ openssl rsa -pubin -text < [infile] > [outfile]  # for pkcs8 public keys
$ openssl rsa -text < [infile] > [outfile]  # for private keys
If you do not specify an infile openssl will read from stdin. Similarly, if you do not specify an outfile openssl will write to stdout. See the OpenSSL documentation for more information about working with RSA keys.

Math & Cryptography Resources

General Math

Factoring Algorithms: Fermat's Method | Pollard's Rho Algorithm | General Number Field Sieve
Elliptic Curve Arithmetic: Guide To Elliptic Curve Cryptography (Chapter 3) | Point Multiplication

General Crypto

The Diffie-Hellman Key Exchange Protocol: Paper | Attack Against DH In TLS
The RSA Algorithm: Paper | Wikipedia | Survey Of Attacks Against RSA
The AES Algorithm: Spec
Authenticated Encryption Using Generic Composition: Paper | Crypto StackExchange

Practical Attacks

Bleichenbacher's Adaptive Chosen Ciphertext Attack Against RSA: Paper | Wikipedia
BEAST Attack Against TLS: Paper
CRIME Attack Against TLS: Slides
Lucky 13 Attack Against TLS: Paper