Para las funciones hash (como SHA-1) que se utilizan para firmar certificados SSL, la seguridad se ve socavada por completo si tiene ataques de colisión exitosos. Debido a la paradoja de cumpleaños , una función de hash de N bits proporciona efectivamente N / 2 bits de seguridad contra ataques de colisión. Es decir, un forzador bruto puede crear colisiones para una función hash de N bits después de generar aproximadamente 2 N / 2 posibles cadenas para el hash. Por lo tanto, una función hash de 160 bits proporciona alrededor de 80 bits de seguridad contra colisiones (lo que significa que se requieren aproximadamente 2 80 esfuerzos para generar una colisión mediante fuerza bruta).
Para un cifrado de bloque (como AES), utiliza una clave de N bits que mapea un bloque de texto (128 bits en el caso de AES) en un bloque de texto cifrado de manera reversible si posee el bit N llave. Por lo tanto, para forzar un cifrado de bloque con una clave de N bits (y ninguna otra vulnerabilidad), debe probar aproximadamente 2 claves N hasta que encuentre una clave que transforme el texto cifrado en el mensaje original .
Por lo tanto (sin mirar ninguna falla específica en los dos algoritmos), un cifrado de bloque con una clave de 128 bits es mucho más fuerte (lo que requiere 2 128 fuerza bruta) que usar un SSL certificado firmado con una función hash de 160 bits (que requiere 2 80 esfuerzos para encontrar una colisión y socavar completamente la seguridad). De hecho, es aproximadamente 2 48 ~ 281 billones (10 12 ) veces más seguro.
Explicación de por qué las colisiones rompen los certificados SSL
Básicamente, un certificado SSL consiste en cierta información de texto plano p
y una firma S
proporcionada por una autoridad de certificación. Este texto simple normalmente incluye el nombre de su organización y su nombre de dominio e información similar. Si desea un nuevo certificado, luego envíe esta información a una autoridad de certificación (CA) en la que los populares navegadores web confían intrínsecamente. La CA verifica su información (por ejemplo, verifica que usted es el propietario del dominio, por ejemplo, enviando un código de correo electrónico a la dirección de correo electrónico que figura en los registros DNS de ese dominio, O paga por un certificado de validación extendido y la CA realiza más comprobaciones la organización que dices que eres). Si la información se retira, la autoridad de certificación aceptará firmarla y emitirle la firma para completar el certificado. La firma consiste en el hashing de la información de texto sin formato H(p)
en el certificado y luego usar la clave privada de la CA ( K_priv
) para cifrar ese hash ( S = E(K_priv, H(p))
. Entonces cualquiera puede usar la clave pública correspondiente de la CA ( K_public
(y su sistema operativo y / o navegador web generalmente viene con una lista de claves públicas de autoridades de certificación confiables) para descifrar la firma para encontrar H(p) = D(K_public, S)
y verificar que la firma coincida con el hash de la información de texto sin formato en el certificado SSL.
Por lo tanto, si genera aproximadamente 2 80 mensajes de texto sin formato diferentes p
(algunos en la forma debían ser un certificado para un dominio, algunos en la forma de certificados para una autoridad de certificación intermedia), podría ser posible encontrar un par de dos mensajes p1
y p2
que colisionan. Si, por ejemplo, p1
identifica un dominio cambiado aleatoriamente ( sgnjnjrafaftjhyqsv.com
) que puede comprar fácilmente (o si varía subdominios de los dominios que ya posee como sgnjnjrafaftjhyqsv.blah.com
), entonces puede verificar la propiedad de p1
en una CA y usted puede obtener una firma de CA de p1
. Como los hashes coinciden con H(p1)==H(p2)
, puede tomar la firma del certificado de p1
y usarla con p2 para generar un certificado válido. Si p2
, por ejemplo, fue una autoridad de certificación intermedia que le permite firmar otros certificados, puede utilizar esa autoridad de certificación intermedia para firmar cualquier certificado que desee (y podría, por ejemplo, falsificar cualquier sitio web que desee, al menos ignorar otras protecciones). como la fijación de certificados).
Para referencia, este ataque se usó con éxito para crear falsos certificados de autoridad intermedios contra MD5 (hash de 128 bits) certificados firmados alrededor de 2008 . Tenga en cuenta que ignorar fallas específicas en los hashes relevantes para encontrar una colisión SHA-1 es solo 65,000 veces más difícil que encontrar uno en un hash MD5. Con el costo de cómputo disminuyendo, se cree que es factible para los atacantes sofisticados atacar a SHA-1 y socavar la seguridad SSL. El uso de un hash de 256 bits (como SHA-256) es aproximadamente 18 mil millones (18 x 10 18 ) veces más seguro que un hash de 128 bits (como MD5) contra ataques de colisión (nuevamente ignorando fallas específicas en las funciones hash).