TCrypto - ¿Comentarios sobre las decisiones de diseño que tomé?

1

He enviado algún código a GitHub para demostrar el uso del cifrado de clave simétrica en PHP. Es una pequeña biblioteca de almacenamiento de valor-clave y (opcionalmente) ofrece la capacidad de cifrar la información almacenada. Me gustaría escuchar sus comentarios sobre un par de decisiones de diseño que tomé:

El cifrado se realiza mediante AES en modo CBC (IV aleatorio), con la autenticación "cifrar y luego MAC". La información es básicamente una matriz de PHP, que se serializa y se comprime opcionalmente (gzdeflate). Esta cadena se encripta. Me gustaría escuchar algunas opiniones ¿valdría la pena agregar otra verificación MAC ("interna"), que se encargaría de verificar que los datos sean válidos después de la no compresión? Al principio, esto suena como una pérdida de tiempo, ya que ya hay una comprobación de MAC. Pero, por otro lado, esto podría contrarrestar algunos problemas que pueden surgir debido a errores en la capa de descompresión, etc. ¿Algún comentario sobre esto?

Otra cosa, los expertos en criptografía recomiendan que cuando se usa el modo CTR, el error se genere utilizando un "número de mensaje" único y creciente. Sin embargo, en TCrypto no hay forma de mantener una lista de dichos números de mensajes, por lo que he tomado la decisión de no utilizar el modo CTR. ¿Crees que sería seguro usar el modo CTR generando el "nonce" al azar (/ dev / urandom)? Las claves de cifrado en TCrypto se derivan utilizando una clave constante, marcas de tiempo y el IV (esto garantiza que las claves de cifrado sean únicas para cada operación de cifrado).

enlace

¿Algún otro comentario?

¡Muchas gracias!

Timo

    
pregunta timoh 09.07.2011 - 00:39
fuente

2 respuestas

0
  1. No hay necesidad de un MAC interno. No me queda claro a qué problema se refiere. Supongo que su esquema funciona así: comprima los datos, luego aplique cifrar y luego MAC a los datos comprimidos. Si el resumen de MAC es válido, puede estar seguro de que después de descifrar procesará los mismos datos que envió el remitente, por lo que no es necesario tener otro MAC.

  2. Depende de la variante del modo CTR que utilice y de cómo se forme el contador. En la forma más simple, para cifrar un mensaje n -block debajo del IV v , usamos v , v +1, v +2, .., v + n -1 como contadores, así que déjeme suponer que es lo que está haciendo (si no, especifique). Está bien generar un contador aleatorio de 128 bits con /dev/urandom .

  3. Parece que estás haciendo algo sofisticado para generar la clave utilizada para cifrar cada mensaje. No puedo comentar sobre eso, porque no has proporcionado suficientes detalles sobre lo que estás haciendo.

Si divide esto en varias preguntas y proporciona más detalles, es posible que podamos brindarle mejores respuestas.

    
respondido por el D.W. 10.07.2011 - 03:48
fuente
-3

La compresión y el cifrado son muy fáciles de probar y los errores generalmente se detectan rápidamente. Así que no hay necesidad de tener otro MAC dentro. Nunca he visto tal configuración, y también sería suficiente tener solo un CBC o similar para ese caso. Sugiero simplemente poner un montón de pruebas automatizadas después de la rutina de construcción / instalación.

Que yo sepa, no hay diferencia en la recomendación de la elección IV entre diferentes modos de cifrado. Schneier y Ferguson recomiendan en Criptografía práctica usar un contador como IV. El uso de un valor aleatorio es igual de seguro siempre que tenga un PRNG que funcione en su mayoría.

Si las claves son realmente únicas para cada cifrado, no importa en absoluto cómo se elija el IV. El IV es específicamente para hacer múltiples encriptaciones con la misma clave. Pero probablemente no pueda confiar en eso, ya que el tiempo podría ser constante o reiniciarse por alguna razón. (En general, no debe asumir un reloj de trabajo en su criptografía :-)) Por lo tanto, aún debe usar un conteo IV o incluir / dev / random en la clave actual.

En lugar de encrypt-then-mac, puede usar un ciphermode con cifrado y autenticación combinados, como GCM o CCM. Si recuerdo correctamente, la ventaja de CTR es que el cifrado de un mensaje puede ser paralelo.

Descargo de responsabilidad: no soy un criptógrafo.

    
respondido por el pepe 09.07.2011 - 01:04
fuente

Lea otras preguntas en las etiquetas