¿Cuál es la principal diferencia entre una clave, un IV y un nonce?

Abr 24, 2021
admin

Una clave, en el contexto de la criptografía simétrica, es algo que se mantiene en secreto. Cualquiera que conozca tu clave (o pueda adivinarla) puede descifrar cualquier dato que hayas cifrado con ella (o falsificar cualquier código de autenticación que hayas calculado con ella, etc.).

(También existe la criptografía «asimétrica» o de clave pública, en la que la clave tiene efectivamente dos partes: la clave privada, que permite el descifrado y/o la firma, y una clave pública (derivada de la correspondiente clave privada) que permite el cifrado y/o la verificación de la firma.)

Un IV o vector de inicialización es, en su sentido más amplio, simplemente el valor inicial utilizado para iniciar algún proceso iterado. El término se utiliza en un par de contextos diferentes e implica diferentes requisitos de seguridad en cada uno de ellos. Por ejemplo, las funciones hash criptográficas suelen tener un IV fijo, que no es más que una constante arbitraria que se incluye en la especificación de la función hash y se utiliza como valor hash inicial antes de introducir cualquier dato:

Diagrama de una función hash Merkle-Damgård de Wikipedia

A la inversa, la mayoría de los modos de funcionamiento de los cifrados por bloques requieren un IV que sea aleatorio e impredecible, o al menos único para cada mensaje cifrado con una clave determinada. (Por supuesto, si cada clave sólo se utiliza para encriptar un único mensaje, se puede salir del paso utilizando un IV fijo). Este IV aleatorio garantiza que cada mensaje se cifre de forma diferente, de manera que ver varios mensajes cifrados con la misma clave no proporciona al atacante más información que ver un único mensaje largo. En particular, asegura que cifrar el mismo mensaje dos veces produce dos textos cifrados completamente diferentes, lo que es necesario para que el esquema de cifrado sea semánticamente seguro.

En cualquier caso, el IV nunca necesita ser mantenido en secreto – si lo hiciera, sería una clave, no un IV. De hecho, en la mayoría de los casos, mantener el IV en secreto no sería práctico incluso si se quisiera, ya que el destinatario necesita conocerlo para descifrar los datos (o verificar el hash, etc.).

Un nonce, en sentido amplio, es simplemente «un número utilizado sólo una vez». Lo único que se exige generalmente a un nonce es que nunca se utilice dos veces (dentro del ámbito pertinente, como el cifrado con una clave determinada).Los IVs únicos utilizados para el cifrado por bloques se califican como nonces, pero varios otros esquemas criptográficos hacen uso de nonces también.

Hay cierta variación sobre cuál de los términos «IV» y «nonce» se utiliza para los diferentes modos de operación de cifrado por bloques: algunos autores utilizan exclusivamente uno u otro, mientras que otros hacen una distinción entre ellos. Para el modo CTR, en particular, algunos autores reservan el término «IV» para el bloque de entrada de cifrado completo formado por la concatenación del nonce y el valor inicial del contador (normalmente un bloque de todos los bits cero), mientras que otros prefieren no utilizar el término «IV» para el modo CTR en absoluto. Todo esto se complica por el hecho de que hay varias variaciones sobre cómo el nonce/IV enviado con el mensaje en el modo CTR se mapea realmente en la entrada inicial del cifrado de bloques.

Por el contrario, para los modos que no son CTR (o modos relacionados como EAX o GCM), el término «IV» se prefiere casi universalmente sobre «nonce». Esto es particularmente cierto para el modo CBC, ya que tiene requisitos en su IV (específicamente, que son impredecibles) que van más allá del requisito habitual de unicidad que se espera de los nonces.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.