Estoy escribiendo un servidor TLS. Al manejar el conjunto de cifrado ECDHE-RSA, se necesita el intercambio de claves del servidor. Según Conjuntos de cifrado de cifrado de curva elíptica (ECC) para seguridad de la capa de transporte (TLS)
select (KeyExchangeAlgorithm) {
case ec_diffie_hellman:
ServerECDHParams params;
Signature signed_params;
} ServerKeyExchange;
NOTE: SignatureAlgorithm is "rsa" for the ECDHE_RSA key exchange
algorithm and "anonymous" for ECDH_anon. These cases are defined in
TLS [2][3].
[2] Dierks, T. and C. Allen, "The TLS Protocol Version 1.0",
RFC 2246, January 1999.
[3] Dierks, T. and E. Rescorla, "The Transport Layer Security (TLS)
Protocol Version 1.1", RFC 4346, April 2006.
Así que revisé TLS 1.0 & 1.1, en TLS 1.1
struct {
select (KeyExchangeAlgorithm) {
case diffie_hellman:
ServerDHParams params;
Signature signed_params;
case rsa:
ServerRSAParams params;
Signature signed_params;
};
} ServerKeyExchange;
struct {
select (SignatureAlgorithm) {
case anonymous: struct { };
case rsa:
digitally-signed struct {
opaque md5_hash[16];
opaque sha_hash[20];
};
case dsa:
digitally-signed struct {
opaque sha_hash[20];
};
};
};
} Signature;
Por lo que yo entiendo, debo usar:
digitally-signed struct {
opaque md5_hash[16];
opaque sha_hash[20];
};
¿Y qué es esta estructura firmada digitalmente? También vi algunos ejemplos usando sha512, ¿es md5 realmente necesario?
Gracias.