security - Secreto vs. Vector de inicialización no secreto
encryption cryptography (3)
Bien, considere que si dos partes tienen la misma función criptográfica, pero no tienen la misma IV, no obtendrán los mismos resultados. Entonces, parece que la propuesta es que las dos partes obtengan el mismo secreto compartido, y cada una genere, de manera determinista, un IV (que será el mismo) y luego puedan comunicarse. Así es como lo leí; pero en realidad no he leído el documento, y no estoy completamente seguro de que mi descripción sea correcta; pero así es como comenzaría a investigar.
Hoy estuve leyendo tranquilamente y tropecé con la Sección 5.8 (en la página 45) de la Recomendación para Esquemas de Establecimiento de Claves Par-Wise Usando la Criptografía de Logaritmos Discretos (Revisada) (Publicación Especial NIST 800-56A) . Estaba muy confundido por esto:
Se utilizará una función de derivación de clave aprobada (KDF) para derivar material de clave secreta de un secreto compartido. La salida de una KDF solo se utilizará para material secreto de claves, como una clave simétrica utilizada para cifrado de datos o integridad de mensajes, un vector de inicialización secreto o una clave maestra que se utilizará para generar otras claves (posiblemente utilizando un proceso diferente) ) El material de clave no secreto (como un vector de inicialización no secreto) no se generará utilizando el secreto compartido.
Ahora no soy Alan Turing, pero pensé que los vectores de inicialización no necesitan mantenerse en secreto. ¿En qué circunstancias uno querría un "vector secreto de inicialización"? Thomas Pornin dice que los IV son públicos y parece muy versado en criptografía. Del mismo modo con caf .
El valor de inicio del contador en el cifrado del modo CTR se puede considerar como IV. Si lo haces en secreto, terminas con cierta cantidad de seguridad añadida sobre la seguridad otorgada por la longitud de la clave del cifrado que estás utilizando. Cuánto más es difícil de decir, pero no saberlo aumenta el trabajo requerido para descubrir cómo descifrar un mensaje dado.
Un vector de inicialización no necesita ser secreto (no es una clave) pero tampoco debe ser público (el remitente y el receptor deben saberlo, pero no es necesario que la Reina de Inglaterra también lo sepa).
Un protocolo de establecimiento de clave típico dará como resultado que ambos involucren a las partes que computan un dato que ellos, pero solo ellos, conocen. Con Diffie-Hellman (o cualquier variante de curva elíptica del mismo), dicha pieza compartida de datos tiene una longitud fija y no tienen control sobre su valor (ambos obtienen la misma secuencia aparentemente aleatoria de bits). Para usar ese secreto compartido para el cifrado simétrico, deben derivar los datos compartidos en una secuencia de bits de la longitud adecuada para cualquier algoritmo de cifrado simétrico que estén a punto de usar.
En un protocolo en el que utiliza un algoritmo de establecimiento de clave para obtener un secreto compartido entre el emisor y el receptor, y usará ese secreto para encriptar simétricamente un mensaje (posiblemente un mensaje transmitido muy largo), es posible usar el KDF para producir la clave y la IV de una vez. Así es como entra, por ejemplo, SSL : del secreto compartido (llamado "secreto premaster" en la especificación SSL) se computa un gran bloque de datos secretos derivados, que luego se divide en claves simétricas y vectores de inicialización para ambas direcciones de cifrado. Podría hacer lo contrario y, por ejemplo, generar IV aleatorio y enviarlos junto con los datos cifrados, en lugar de usar una IV obtenida a través del KDF (así es como funciona en las versiones recientes de TLS , el sucesor de SSL). Ambas estrategias son igualmente válidas (TLS utiliza IV aleatorio externo porque quieren una IV aleatoria nueva para cada "registro", un paquete de datos dentro de una conexión TLS, que es la razón por la cual el uso de KDF ya no se consideraba apropiado).