¿Qué usos clave requiere cada método de intercambio de claves?

26

Sólo estoy realmente preocupado por las claves RSA, por lo que los métodos de intercambio son RSA (generar una clave, cifrarla y enviarla) y [EC] DHE_RSA (generar una clave DH [EF] efímera, firmarla, y utilizarlo para el acuerdo clave).

La operación real en RSA es "Key Encipherment", y en [EC]DHE_RSA es la firma digital, pero ambas son formas de acuerdo clave. Entonces, ¿cuál de "Key Encipherment", "Digital Signature" y "Key Agreement" son necesarios en la extensión de uso de clave para cada método? No he podido encontrar esto especificado en ningún lugar y probablemente varía según la implementación, por lo que la respuesta podría ser una tabla por implementación.

    
pregunta Ben Jencks 17.11.2012 - 00:02
fuente

1 respuesta

29

La extensión de uso de clave se describe en la sección 4.2.1.3 de X.509 , con las siguientes marcas posibles:

  KeyUsage ::= BIT STRING {
       digitalSignature        (0),
       nonRepudiation          (1), -- recent editions of X.509 have
                            -- renamed this bit to contentCommitment
       keyEncipherment         (2),
       dataEncipherment        (3),
       keyAgreement            (4),
       keyCertSign             (5),
       cRLSign                 (6),
       encipherOnly            (7),
       decipherOnly            (8) }

En SSL / TLS , cuando el certificado del servidor contiene una clave RSA, entonces:

  • se usa un conjunto de cifrado DHE o ECDHE, en cuyo caso la clave RSA se usa para una firma (consulte la sección 7.4.3 de RFC 5246: el mensaje "Intercambio de claves del servidor"); esto ejerce el uso de la clave digitalSignature ;

  • o "RSA sin formato" se usa, con un valor aleatorio (el secreto de maestro de 48 bytes) cifrado por el cliente con la clave pública del servidor (consulte la sección 7.4.7.1 de RFC 5246); Esto está justo en la definición de la claveEncifrado indicador de uso de la clave.

dataEncipherment no se aplica, porque lo que está encriptado no es información directamente significativa, sino un valor que se genera principalmente al azar y se usa para derivar claves simétricas. keyAgreement tampoco se aplica, porque ese es para algoritmos de acuerdo clave que no son un caso de cifrado asimétrico (por ejemplo, Diffie-Hellman). El indicador de uso keyAgreement aparecerá en un certificado que contiene una clave DH, no una clave RSA. nonRepudiation no se usa, ya que todo lo que esté firmado como parte de un intercambio de claves SSL / TLS no se puede usar como prueba para un tercero (no hay nada en un túnel SSL / TLS que el cliente pueda grabar y luego use para convencer a un juez cuando intente demandar al servidor en sí; los datos que se intercambian dentro del túnel no están firmados por el servidor).

Para resumir: digitalSignature para conjuntos de cifrado DHE (EC), keyEncipherment para conjuntos de cifrado RSA sin formato. Sin embargo, algunas implementaciones también aceptarán keyAgreement en lugar de keyEncipherment , o nonRepudiation incluso si digitalSignature no está establecida; y algunos simplemente ignorarán totalmente la extensión de Uso de la Clave (incluso si están marcados como críticos). Para una máxima interoperabilidad, especifique los cuatro indicadores en la extensión de uso de clave.

    
respondido por el Thomas Pornin 17.11.2012 - 04:59
fuente

Lea otras preguntas en las etiquetas