Una posible ruta hacia la criptografía es a través de implementación . Tome alguna función estándar o conjunto de funciones, por ejemplo, la familia de funciones hash SHA . Desde el estándar, produce tu propio código; El estándar incluye algunos vectores de prueba que le ayudarán a verificar que su implementación sea correcta. Luego compare su código con las bibliotecas existentes, por ejemplo, OpenSSL , Crypto ++ y sphlib ; evalúe su código y vea qué podría hacer para que su código se ejecute más rápido y / o más suave. Aunque obtener una implementación rápida de la función hash no es extremadamente útil por sí mismo (ya que las implementaciones rápidas ya están disponibles gratuitamente), el ejercicio le brindará un conocimiento preciso y profundo de cómo funcionan estas funciones, y eso será una un gran activo para entender los trabajos de investigación sobre ellos.
Las funciones de hash son un buen punto de partida, ya que tienden a especificarse con precisión y no usan ninguna tecla. Una vez que haya dominado algunas funciones hash, pruebe HMAC . Luego continúe con el cifrado simétrico (especialmente RC4 , DES y 3DES , y AES ). En ese momento, tendrá algunas nociones del funcionamiento interno de algunos cifrados simétricos y, quizás más importante, sabrá cómo leer y comprender las especificaciones de algoritmos.
Otros pasos serán incursionar en criptografía asimétrica, básicamente RSA . La criptografía asimétrica requiere algunas matemáticas; Es posible que desee consultar el Manual de criptografía aplicada , que está disponible gratuitamente y es un buen libro de referencia (este libro no tiene relación alguna con la "criptografía aplicada" de Bruce Schneier (este último es un libro de introducción muy citado, pero mucho menos útil como referencia). Si desea implementar su propio RSA, el uso de un lenguaje de programación o una biblioteca que proporcione aritmética de enteros grandes hará las cosas más simples (por ejemplo, Java con java.math.BigInteger
, C # / .NET 4.0 con System.Numerics.BigInteger
, o alguna biblioteca externa como GMP ). Alternativamente, siga adelante y escriba su propio código de entero grande (de nuevo, un ejercicio saludable); para eso, querrá leer el capítulo 14 del Manual .
Una vez que haya realizado funciones hash, HMAC, cifrado simétrico y RSA, puede escribir su propia biblioteca SSL / TLS, comenzando con TLS 1.0 . Escribir un cliente TLS que pueda conectarse e interactuar con el servidor TLS existente le brindará un conocimiento íntimo del protocolo de enlace SSL / TLS, y podrá comprender toda la investigación sobre los ataques conocidos en SSL y cómo se solucionan (por ejemplo, BEAST, Caniche,...). Use esta respuesta como una guía de lectura sobre TLS.
Implementación no es la única forma de aprender criptografía, pero funciona.