MasterSecret expansión a claves

6

Intento profundamente comprender los pasos durante un saludo de TLS.

He leído esta respuesta (que es bastante completa), pero todavía tengo una pregunta sobre la utilización de MasterSecret , en el marco de un saludo de ECDHE-RSA-AES-GCM-SHA TLS.

Al final del protocolo de enlace, hemos utilizado SHA como PRF para generar el Mastersecret (de la pre-MS y los números aleatorios). Lo expandimos para crear key y MAC key . La clave se utiliza para cifrar los mensajes y la clave MAC para calcular el hash (en el mensaje cifrado en el modo GCM). Ok.

Tengo 2 preguntas sobre la expansión de MasterSecret:

  1. En sección 8: 3 , dicen que creamos 2 teclas MAC y 2 llaves. ¿No es eso lo suficientemente seguro si el cliente y el servidor usan la misma clave y la misma clave MAC ? (Dado que estas claves se generan a partir de nada menos que un MasterSecret). Creo que parece un poco sobreprotegido ...

  2. Cuando tienes el MasterSecret, ¿cómo lo amplías para crear las claves y las claves MAC? Dudo que tomemos los primeros N bytes para la clave y el resto para la clave MAC ...

    Además, la frase Cuando se generan claves y claves MAC, el secreto maestro se usa como fuente de entropía. ( section 8: 3 ) me molesta. ¿Es por eso que no puedo entender cómo expandir las claves?

pregunta EisenHeim 04.09.2015 - 11:41
fuente

1 respuesta

3

Q1. ¿Por qué dos conjuntos de material clave?

  

En la sección 8: 3, dicen que creamos 2 teclas MAC y 2 teclas. ¿No es eso suficientemente seguro si el cliente y el servidor usan la misma clave y la misma clave MAC? (Dado que estas claves se generan a partir de nada menos que un MasterSecret). Creo que parece un poco sobreprotegido ...

No. Esto se hace por una razón seria. Esto hace que sea más difícil de atacar. Hay una clase de ataque, donde solo se refleja lo que un lado dijo a sí mismo. Esto se denomina Ataque de reflexión . Y al tener las teclas de dirección fija, haces que esa clase de ataque sea imposible.

Q2. ¿Cómo cortar el bloque de teclas?

  

Cuando tiene MasterSecret, ¿cómo lo expande para crear claves y claves MAC? Dudo que solo tomemos los primeros N bytes para la clave y el resto para la clave MAC

Lamento decepcionarte, pero eso es todo. No hay mucha magia aquí.

Tienes el bloque de teclas que es una cadena larga de octetos. Y luego simplemente lo trocea en 6 partes más pequeñas.

RFC

Aquí está la sección en el TLS 1.2 RFC :

  client_write_MAC_key[SecurityParameters.mac_key_length]
  server_write_MAC_key[SecurityParameters.mac_key_length]
  client_write_key[SecurityParameters.enc_key_length]
  server_write_key[SecurityParameters.enc_key_length]
  client_write_IV[SecurityParameters.fixed_iv_length]
  server_write_IV[SecurityParameters.fixed_iv_length]

Así que son seis partes. Y en ese orden exacto. Las entradas impares (1, 3, 5) son para la dirección client_write . Incluso las entradas (2, 4, 6) son para la dirección server_write .

OpenSSL

Aquí está el bit de corte en OpenSSL:

  • p es el bloque clave.

Esto se corta en:

  • ms , MAC secreto
  • key , clave de encriptación masiva
  • iv , vector de inicialización

Código fuente de t1_enc.c de OpenSSL :

if ((which == SSL3_CHANGE_CIPHER_CLIENT_WRITE) ||
    (which == SSL3_CHANGE_CIPHER_SERVER_READ)) {
    ms = &(p[0]);
    n = i + i;
    key = &(p[n]);
    n += j + j;
    iv = &(p[n]);
    n += k + k;
    exp_label = (unsigned char *)TLS_MD_CLIENT_WRITE_KEY_CONST;
    exp_label_len = TLS_MD_CLIENT_WRITE_KEY_CONST_SIZE;
    client_write = 1;
} else {
    n = i;
    ms = &(p[n]);
    n += i + j;
    key = &(p[n]);
    n += j + k;
    iv = &(p[n]);
    n += k;
    exp_label = (unsigned char *)TLS_MD_SERVER_WRITE_KEY_CONST;
    exp_label_len = TLS_MD_SERVER_WRITE_KEY_CONST_SIZE;
    client_write = 0;
}

No hablo C demasiado bien. Así que realmente no lo entiendo.

  • No entiendo la indexación en p .
  • No entiendo por qué solo seleccionan la mitad de las teclas. Cada extremo necesita ambos conjuntos. Un conjunto para escribir en el otro extremo. Y un set leyó lo que decía el otro extremo. - Supongo que ese corte ocurre en otro lado.
respondido por el StackzOfZtuff 04.09.2015 - 22:02
fuente

Lea otras preguntas en las etiquetas