¿Necesita ayuda para descifrar el "intercambio de claves del cliente" capturado en Wireshark?

1

Estoy tratando de entender cómo se produce el protocolo SSL para HTTPS.

Hice lo siguiente:

  1. Capturó los paquetes para una conexión HTTPS usando Wireshark.
  2. examinó el Hola del cliente para las suites de cifrado admitidas (no importante)
  3. Examinó el servidor Hello para el conjunto de cifrado decidido por el servidor. Es TLS_RSA_WITH_RC4_128_MD5. Lo que significa El algoritmo de apretón de manos es RSA. lo que significa que la clave maestra se cifra mediante la clave pública del servidor y se envía al servidor.

  4. El siguiente mensaje de intercambio de claves del cliente es donde me enfrento al desafío. Se exportó el flujo de bytes cifrado "Protocolo de protocolo de enlace: intercambio de clave de cliente". El flujo de bytes en hexadecimal es:

    10 00 01 00 8e 1b d9 49 6f 9e 15 8f b9 b6 8a 2e  
    e0 90 f1 54 3b 54 7d d3 d5 2e 64 b5 37 cc ae 74  
    ec 3f 38 59 1a 42 78 98 3f e1 4e 7b 8b 84 74 a9  
    17 95 c0 b7 07 d9 b1 a1 d0 1f 5a a1 2e 71 b6 98  
    ea 4b 6c 62 f3 b3 8c 8e d7 20 9a 4b 6a a7 d7 4c  
    f8 69 c9 6c d6 0b 8b d0 9f 59 28 f5 52 60 fa e9  
    72 52 4c 87 98 30 fe 6f ef a6 5b 11 fd 6b 0e 0d  
    db 60 d5 d4 d8 a6 0e 6d 9f 02 58 01 a4 21 d5 aa  
    17 80 5f 42 ec 84 78 a8 41 ed bc 94 c5 83 ab 74  
    09 b9 91 9d bf 6d c1 4b 85 95 90 d8 b4 22 fb 00  
    a4 76 af 54 e2 c3 1e 84 6f 5e 02 18 05 f5 6c 83  
    7f dc a7 44 85 24 06 b6 89 6f 13 4e 25 f0 ce 59  
    23 8c 50 4d c2 56 11 b9 0d 63 b5 28 b8 ad e7 9c  
    f2 16 96 f8 dd 4a f9 b5 72 8c 6f 6a 6c 8b 40 d7  
    03 c7 a8 d6 8e 88 38 00 d2 d3 9b 4a 04 3a 16 55  
    1f c9 58 c8 3f d3 7a 33 9a 3f 98 1c 74 83 3c 45  
    5a b2 9c da
    

    Eliminé los primeros cuatro bytes (tipo y tamaño de mensaje)

  5. Se intentó descifrar la clave del cliente utilizando la clave privada del servidor mediante el comando:

    openssl rsautl -decrypt -inkey /etc/apache2/ssl/apache.key -in Clientkeyexchange_enc -out Clientkeyexchange_dec
    

    El valor hexadecimal del resultado es:

    03 00 E1 B9  2F 27 4F 85   46 AF 54 CC  5D 55 5E 92
    71 CD 14 60  02 96 08 BA   8D E0 65 B7  A5 27 EF E4
    F7 4E 4A 02  55 47 80 4E   36 FF 49 75  D2 B6 AB 83
    

No puedo descifrar los datos de la aplicación usando este valor. Sé que he entendido mal algo. Pero incapaz de averiguar qué.

    
pregunta Prashanth 26.10.2014 - 05:55
fuente

1 respuesta

3

Primero, antes de responder, espero que sepa que Wireshark puede hacer todo el trabajo por usted en este caso (intercambio de claves simple-RSA y clave privada del servidor disponibles). Simplemente vaya a Preferencias / Protocolos / SSL y dele el archivo (claro) de clave privada y hará los cálculos de la clave y el descifrado.

Si desea comprender un protocolo, consulte la especificación de ese protocolo (cuando estén disponibles y las de IETF) suele ser una buena idea Tenga en cuenta que SSLv3 está mostrando su edad, más recientemente con POODLE (vea varias docenas de preguntas recientes), y realmente debería usar TLSv1.1 o superior (también para abordar BEAST). Bajo ClientKeyExchange encontramos:

5.6.7.1. RSA Encrypted Premaster Secret Message 


   If RSA is being used for key agreement and authentication, the client
   generates a 48-byte premaster secret, encrypts it under the public
   key from the server's certificate or temporary RSA key from a server
   key exchange message, and sends the result in an encrypted premaster
   secret message.

        struct {
            ProtocolVersion client_version;
            opaque random[46];
        } PreMasterSecret;

   client_version:  The latest (newest) version supported by the client.
      This is used to detect version roll-back attacks.

   random:  46 securely-generated random bytes.

Por lo tanto, su valor descifrado RSA es el secreto premaster, y es para SSLv3 aunque no lo haya dicho. Para el intercambio de claves de cualquier una vez que se establezca el secreto del maestro de máscara, se usa junto con los valores Hello.random para derivar (calcular) un secreto maestro como se describe en 6.1. Asymmetric Cryptographic Computations y luego use el secreto maestro con los nonces (que serán nuevos nonces en el caso de reanudación de sesión) para derivar las claves de trabajo y, si corresponde, IVs, plural, como se describe en 6.2.2. Converting the Master Secret into Keys and MAC Secrets .

Nota en TLSv1 (.0) y 1.1 las funciones de derivación de claves se cambian para mezclar mejor MD5 y SHA1, el primero más claramente denominado 8.1. Computing the Master Secret y el segundo avanzado a 6.3. Key calculation pero ambos comparten un PRF movido a% código%. Además, en TLSv1.2, los KDF se cambian para usar SHA-2. También tenga en cuenta que los conjuntos de cifrado de "exportación" utilizaron un KDF modificado en SSLv3 y TLSv1 (.0); en 1.1 y 1.2 estas suites se eliminan oficialmente y el KDF modificado con ellas, pero algunas implementaciones aún pueden permitirlas (pero si lo hacen, no deberían usarlas).

    
respondido por el dave_thompson_085 26.10.2014 - 08:24
fuente

Lea otras preguntas en las etiquetas