¿Qué hay de malo en usar AES directamente / "en bruto"?

2

Al desarrollar aplicaciones que requieren rutinas criptográficas, sé que debo usar bibliotecas como keyczar y libsodium en lugar de rutinas criptográficas "crudas".

Sin embargo, para el caso específico de usar el cifrado simétrico AES-CBC de un bloque de texto, me pregunto cuáles son los inconvenientes con los que me puedo encontrar sin saberlo.

(Para un ejemplo concreto, la curiosidad de usar una biblioteca como esta, que he estado leyendo, es lo que más me interesa: enlace .)

    
pregunta xyz 05.06.2013 - 10:30
fuente

2 respuestas

4

La función de cifrado es solo un elemento fundamental para el cifrado. Es importante, sin duda, pero es solo un componente que puede usarse de forma segura e insegura. Si escribe usted mismo el marco de cifrado y conecta los cifrados, etc. donde cree que van, corre un riesgo muy real de hacer algo mal.

Por ejemplo:

  • ¿Cuál es tu clave de cifrado? ¿Está utilizando una función de derivación de claves o simplemente está modificando de forma ingenua su contraseña?
  • Vector de inicialización? ¿De dónde viene y qué haces con él?
  • Modo de encadenamiento de bloques, ¿cuál escoges y por qué lo escogiste? ¿Dijiste "CBC porque todos los demás lo usan"? ¿El modo de encadenamiento de bloques afecta la elección del vector de inicialización?
  • autenticación de mensajes; ¿estás probando para asegurarte de que el mensaje no haya sido manipulado? ¿Dónde pones ese código de autenticación?
  • Flexibilidad: ¿permite que parámetros como la especificación de cifrado o el modo de encadenamiento se especifiquen en tiempo de ejecución? (¿Cómo) indicas tu decisión en tu salida?
  • ... y docenas de otros problemas que no vienen a la mente de inmediato.

Se deben tomar muchas decisiones y hay muchas formas de hacerlo mal. Por lo general, hay una respuesta errónea, fácil pero horrorosa, para cada pregunta que pueda encontrar simplemente por no saber que tuvo que tomar una decisión.

Los marcos (con suerte) responden muchas de estas preguntas para usted, y (con suerte) lo hacen de una manera que es vetada por la comunidad y en gran medida segura. No todos los marcos hacen las cosas bien, y muchos pueden responderte la pregunta.

Pero (y aquí está el punto importante) si lo haces solo y construyes tu propio marco, hay una probabilidad abrumadoramente alta de que encuentres la respuesta incorrecta para alguna decisión.

Si usas un marco confiable, revisado y bien escrito , aumentas tus probabilidades un poco.

    
respondido por el tylerl 05.06.2013 - 22:27
fuente
1
  

para el caso específico de utilizar el cifrado simétrico AES-CBC de un bloque de texto

El problema aquí, y con la mayoría de las implementaciones de algoritmos criptográficos, es que el caso específico no es lo suficientemente específico. Si está utilizando 128 bits de salida de / dev / random como clave, memorizando esa clave y luego ingresándola manualmente para cifrar y descifrar, es probable que esté seguro.

Sin embargo, si no quiere memorizar 128 bits verdaderamente aleatorios, ¿cómo obtiene su clave? Espero que sea una buena función de derivación de clave basada en contraseña, no un simple hash criptográfico de la contraseña y un salt.

Luego, si no tiene cuidado con la cantidad de veces que intentará descifrar un texto cifrado, necesitará un código de autenticación de mensaje que verifique la integridad del texto cifrado antes de intentar descifrarlo; o te convertirás en un oráculo de relleno. Thomas Ptacek escribió una divertida dramatización de este modo de falla: enlace

Hay muchos otros ataques a los que esta aplicación de AES podría ser propensa, dependiendo de cómo se realicen los detalles reales. El problema cognitivo subyacente es que los humanos pensamos formando modelos mentales de situaciones; y nuestros modelos mentales son, 99.99999% del tiempo, insuficientemente detallados y precisos para implementar criptografía segura.

    
respondido por el Stephen Bachelor 05.06.2013 - 15:31
fuente

Lea otras preguntas en las etiquetas