¿Es seguro usar las claves públicas de Diffie-Hellman como nonces para protegerse contra los ataques de repetición?

1

Tengo un caso interesante con respecto a la protección contra ataques de repetición. Bajo el supuesto de que Alice y Bob han usado el intercambio de claves Diffie-Hellman para establecer una sesión temporal segura, ¿sería seguro para ellos usar la parte pública de sus claves DH como sembradoras no asociadas en combinación con HMAC para protegerse de los ataques de repetición? En pseudo código -

Estableciendo una sesión:

a:
    (dhA, dhSecret) = DH_GEN(common)
    a->b (dhA)

b:
    (dhB, dhSecret) = DH_GEN(common)
    b->a (dhB)

a:
    a<-b (dhB)
    sessionKey = DH_KEY(dhB, dhSecret)

b:
    b<-a (dhA)
    sessionKey = DH_KEY(dhA, dhSecret)

Ahora, cuando Alice quiere enviar algunos datos a Bob:

a:
    data = ENCRYPT(sessionKey, data)
    dhA++
    hmac = HMAC(sessionKey, data | dhA)
    a->b (data, hmac)

Y en el lado de Bob, el proceso se invierte:

b:
    b<-a (data, hmac)
    if (hmac == HMAC(sessionKey, data | dhA+1)) {
        dhA++
        data = DECRYPT(sessionKey, data)
    }

Lo mismo sucede en la dirección opuesta:

b:
    data = ENCRYPT(sessionKey, data)
    dhB++
    hmac = HMAC(sessionKey, data | dhB)
    b->a (data, hmac)

a:
    a<-b (data, hmac)
    if (hmac == HMAC(sessionKey, data | dhB+1)) {
        dhB++
        data = DECRYPT(sessionKey, data)
    }

Y la segunda pregunta: ¿sería más fácil y seguro usar un nonce auto-incremental a partir de un número fijo (digamos 0) en lugar de usar claves públicas DH bastante grandes para el nonce inicial?

¿Cuáles son los peligros (si los hay) de tal enfoque, aparte de un posible ataque MITM durante el establecimiento de la sesión que se puede frustrar usando algún tipo de KE Diffie-Hellman autenticado (por ejemplo, tener las claves públicas generadas firmadas por certificados de confianza durante el intercambio)?

Gracias

    
pregunta BeagleEagle 06.03.2014 - 13:32
fuente

2 respuestas

1

Un nonce es un "número usado una vez".

Esta pregunta es: "debería usar el mismo valor para mi nonce cada vez". La respuesta es no.

Comience con un número que no sea predecible, por ejemplo, de una buena fuente aleatoria.

Edición 2: usted mismo dio la respuesta. El nonce no necesita mantenerse en secreto. Pero la clave compartida DH debe ser. Si usa la clave para el nonce, deberá mantener el secreto ...

Edit: Creo que lo que tenemos aquí es que nadie ha considerado la pregunta, de la misma manera que nadie ha preguntado "¿es seguro limpiar mis dientes con un poco de pulido en un dremel ". Pasar el tiempo pensando en la pregunta es una pérdida de tiempo.

  • Para limpiar sus dientes, use un cepillo de dientes.
  • Para un nonce, use una buena fuente aleatoria.

Entonces continúa con el próximo trabajo.

O, para ser un poco menos sarcástico, debes asegurarte de que el número solo se use una vez. Una buena fuente aleatoria logra eso estadísticamente. Usando por ejemplo El tiempo remoto de IP lo logra físicamente. Ninguno de esos utiliza información que deba mantenerse en secreto.

    
respondido por el Ben 06.03.2014 - 14:13
fuente
0

A su segunda pregunta: use un nonce auto incremental a partir de 0 (por ejemplo), ¿no debería ser difícil de adivinar un nonce idealmente? Un nonce de incremento lineal es, por naturaleza, predecible.

    
respondido por el katrix 06.03.2014 - 18:30
fuente

Lea otras preguntas en las etiquetas