Cómo comenzar a escribir software criptográfico [cerrado]

34

Esto es solo una pregunta académica, no tengo la intención de escribir mi propio software criptográfico.

Cada vez que alguien hace la pregunta "¿Cómo escribo mi propio Crypto?", la respuesta es no.

Actualmente estoy estudiando informática, y la universidad no ofrece ningún curso que parezca útil. Hay algunos cursos ofrecidos por el departamento de Matemáticas que podrían conducir a una carrera de investigación en algoritmos criptográficos, pero no se trata de implementar los algoritmos y evitar los ataques de canal lateral. Pero obviamente hay algunas personas que están escribiendo buenos criptogramas.

¿Se trata solo de leer sobre las vulnerabilidades y recordar no hacer lo mismo? ¿O de dónde proviene el conocimiento necesario?

    
pregunta Christian Vögl 15.07.2015 - 13:41
fuente

2 respuestas

28

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.

    
respondido por el Tom Leek 15.07.2015 - 15:23
fuente
2

no responde exactamente a tu pregunta, pero: Creo que lo más importante de no ejecutar su propio criptografía no es que otras personas sean más competentes (incluso si es probable que sea cierto), sino más bien que cada vez que haga algo, puede cometer errores (ser bueno o no) cambia eso).

La forma más correcta debería ser no ejecutar no revisado criptografía .

Escribir criptografía no debería ser diferente a escribir otro código crítico, pero no debe confiar en su código antes de haberlo revisado. La calidad del proceso de revisión es lo que le da confianza en un código criptográfico, por este motivo el nuevo y revolucionario cripto revolucionario no es algo que la gente use y la gente prefiera esperar a que se haya revisado la nueva tecnología antes de usarla.

Cuando escribes tu propio proceso de revisión criptográfica es algo que realmente creo que funciona y Roger leyó todo el código una vez sin encontrar ninguna vulnerabilidad, por lo que es seguro.

sobre cómo aprender acerca de crypto:

  • leer investigación académica sobre criptografía
  • algún curso de provisión universitaria (probablemente puedas encontrarlo en línea)
  • leer y comprender (cómo esto sucede no solo el hecho) vulnerabilidad conocida
respondido por el grandchamp robin 15.07.2015 - 14:04
fuente

Lea otras preguntas en las etiquetas