Sobre todo, sí, se trata de escribir código y recordar no hacer nada malo. En su esencia, el proceso de escritura de código encriptado realmente es una combinación de comprensión y conocimiento actualizado .
Para escribir código criptográfico, debe saber cómo el código que escribe se traduce en ensamblaje, luego en código de máquina, luego en señales eléctricas; Puede ayudar tener algunas nociones sobre cómo funciona un transistor. No tiene tener para desarrollar en ensamblaje, pero debe poder pensar en qué se convierte su código. Observar la salida del ensamblaje del compilador (suponiendo que trabaje en C o algo similar) es muy instructivo.
El punto de este conocimiento es que los ataques más de moda hoy en día son sobre canales laterales , que se alimentan de diferencias sutiles en tiempo de ejecución o patrón de acceso a la memoria o consumo de energía del código. Los lenguajes de programación están diseñados para proporcionar una vista abstracta que oculta todos estos detalles; el codificador criptográfico exitoso es uno que puede deshacer esa abstracción en su cabeza mientras escribe el código. Un codificador criptográfico debe dominar su lenguaje de programación hasta el punto de poder escribir el compilador en sí mismo (no es que lo haga, debe ser capaz de hacerlo).
Luego debes mantenerte actualizado con todos los vectores de ataque conocidos, lo que significa mantener un seguimiento de todos los descubrimientos sobre ese tema. Experimentalmente, encuentro que este mismo sitio (security.SE) y las interminables divagaciones de los usuarios de la sala de chat es un buen método para recopilar información. Sin embargo, una vez que sepas que existe un posible ataque, tienes que desenterrar un poco. , incluida la lectura de los trabajos académicos y los resúmenes, que requieren, por supuesto, habilidades para leer documentos académicos (el tipo de habilidades que adquiere cuando realiza un doctorado).
Una implementación de criptografía puede considerarse tan buena solo en la medida en que se puede revisar, por lo que, independientemente de lo bien que la escriba, aún debe documentarla en gran medida. La seguridad no puede ser probada , por lo que algunos códigos pueden considerarse seguros solo si se puede entender completamente. La "carga de la prueba" recae sobre los hombros del desarrollador: no es suficiente que nadie haya encontrado una manera de romper el código (todavía); el propio desarrollador debe demostrar explícitamente por qué su código está bien.
Todo esto se trata de la implementación de un algoritmo estandarizado y existente. Por ejemplo, está escribiendo un código RSA . El estándar es muy específico acerca de dónde debe ir cada bit, por lo que su trabajo es "solo" para realizar una implementación sólida que no filtre información sobre la clave o los datos cifrados (lo que básicamente significa utilizar un cegamiento aleatorio o un código de tiempo constante con un patrón de acceso a la memoria fija). Cuando se consideran dispositivos integrados con una fuente de alimentación externa controlada por un atacante (por ejemplo, tarjetas inteligentes), el problema se vuelve mucho más complejo y solo se puede definir como "investigación de alto nivel" (y los proveedores de tarjetas inteligentes emplean investigadores de alto nivel exactamente para esa razón). Para plataformas de software más mundanas, esto lo puede hacer un programador solitario, siempre que domine sus herramientas y sepa cómo usar la investigación académica.
Diseñar sus propios algoritmos, o sus propios protocolos (un protocolo puede definirse como un conjunto de algoritmos), es otra lata de gusanos. Uno grande.
No estoy seguro de si es posible resumir todos los conocimientos necesarios para una buena codificación criptográfica como un conjunto de reglas que se pueden enseñar. Sin embargo, algunas personas lo están intentando . Es posible que ese sitio web no sea la respuesta definitiva, pero al menos contiene muchos consejos y sugerencias, y al menos puede servir como una lista de cosas a tener en cuenta. No intente escribir código criptográfico de nivel de producción hasta que pueda leer las reglas de codificación y, al menos, comprender qué problemas figuran en la lista. es, de dónde proviene, cómo podría ser explotado y por qué debería importarlo (o no) en su contexto específico.
En última instancia, las habilidades para una buena codificación criptográfica se basan en experiencia , por lo que lo mejor que puede hacer al respecto es comenzar escribiendo algunas implementaciones, luego compararlas con otras implementaciones y ver en qué aspectos se diferencian y por qué. Funciones de hash como la familia SHA son un buen punto de partida.