Derivación de clave OpenSSL

1

Estoy tratando de descifrar manualmente los paquetes DTLS enviados por OpenSSL.

El conjunto de cifrado utilizado entre el servidor y el cliente es TLS_RSA_WITH_AES_256_CBC_SHA256 y entiendo que el IV utilizado por el cifrado se añade a los datos cifrados de la aplicación. También sé el secreto maestro utilizado por el servidor.

Ahora, a mi pregunta, ¿cómo OpenSSL deriva la clave de cifrado del secreto maestro?

    
pregunta turnl 03.02.2016 - 12:23
fuente

1 respuesta

2

Meta: no agrega mucho a el dupe pero al releer me doy cuenta de que me perdí la" D ".

Los procesos de establecimiento y cifrado / descifrado y autenticación de clave para TLSv1.2 se especifican en RFC 5246 TLSv1.2 más para Intercambios de claves ECC (no aquí) RFC 4492 TLS ECC según la enmienda del apéndice A.7 de 5246. Estos procesos también se aplican a DTLSv1.2 RFC 6347 DTLSv1.2 , aunque los encabezados de registro, La transmisión real y el manejo de algunos errores difieren para DTLS en comparación con TLS.

El establecimiento de claves SSL / TLS / DTLS tiene dos partes: una que varía según (solo) el algoritmo de intercambio de claves utilizado y produce un "secreto de maestro de remasterización", y otra que varía según (solo) el cifrado masivo y Algoritmo (s) MAC / modo seleccionado y utiliza el secreto premaster para producir un secreto maestro y luego las varias claves de trabajo, IVs y nonces. Los procesos de cifrado / descifrado y autenticación varían de manera similar.

Para TLS_RSA_WITH_AES_256_CBC_SHA256 el algoritmo de intercambio de claves es RSA. El secreto del premaster es elegido por el cliente, RSA encriptado bajo la clave pública del servidor y enviado al servidor, el cual RSA lo desencripta y lo verifica. Consulte en 7.4.2 el elemento para RSA , 7.4.7.1 , y 8.1.1 . Para hacer esto fuera del servidor, necesita (una copia de) la clave privada del servidor.

El secreto de premaster se usa con los nonces para derivar el secreto maestro como se especifica en 8.1 usando la PRF (función pseudoaleatoria) definida en sec 5 ; luego se usa de nuevo con los nonces para derivar claves de trabajo como se especifica en 6.3 usando el mismo PRF para el tamaños en apéndice C . Para TLS_RSA_WITH_AES_256_CBC_SHA256 el cifrado es AES_256_CBC, que requiere una clave de 32 octetos en cada dirección y el MAC es HMAC-SHA256 con una clave de 32 octetos en cada dirección.

Cada registro de datos está en MAC y cifrado por el remitente, y descifrado y verificado por el receptor. El proceso de verificación / MAC se especifica en 6.2.3.1 (para todos los sistemas de cifrado / suites que no sean AEAD , y esta suite no es AEAD) y el proceso de cifrado / descifrado para el cifrado en modo CBC (bloque) se especifica mediante 6.2.3.2 ; de hecho, elige un IV por registro y lo añade a los datos de registro cifrados.

Para otro conjunto de cifrado, el esquema es el mismo, pero en algunos lugares se aplican diferentes secciones específicas de RFC 5246 y para el intercambio de claves basado en ECC (ECDH, ECDHE o ECDH_anon) RFC 4492.

    
respondido por el dave_thompson_085 07.02.2016 - 22:31
fuente

Lea otras preguntas en las etiquetas