SHA-1 cómo y cuándo es realmente un problema

4

Primero, aquí está mi interpretación del proceso de validación del certificado (si se equivoca, siéntete más libre de corregirme).

Al conectarse a un sitio web mediante https, el sitio web presenta un certificado SSL al navegador. Se utiliza para autenticar el sitio web. El navegador debe tener una forma de decidir si confiar en ese certificado. El navegador hace esto verificando si el certificado del sitio web fue emitido y firmado por una Autoridad de Certificación de confianza. Cuando se emite un certificado, la Autoridad de certificación incluye esta prueba al "firmar" criptográficamente el certificado con una clave privada, de una manera que solo la CA real podría hacer y que los navegadores pueden verificar. Pero la CA en realidad no firma el certificado en bruto. Si ejecuta el certificado a través de un algoritmo hash unidireccional como SHA-1 y lo firma con la clave privada de la AC. Cuando se presenta el certificado con el navegador, una de las primeras cosas que hace es verificar la firma. Debido a que el certificado se firmó con la clave privada de la CA (y asumimos que solo está en posesión de la CA) podemos verificar la firma (por lo tanto, autenticar) el servidor porque la clave pública correspondiente de la CA está envuelta en un certificado X.509 precargado en el navegador. A continuación, el navegador calcula el SHA-1 para ese certificado y luego lo compara con el valor presentado en el certificado enviado por el sitio web para verificar su integridad, que no se modificó durante el tránsito.

Si lo anterior es cierto, entonces tengo la siguiente pregunta. Aunque los investigadores de Google demostraron recientemente que dos archivos .pdf diferentes produjeron el mismo valor de SHA-1, por lo que se produjo una colisión, me pregunto cómo puede explotarse esto. Quiero decir, digamos que example.com tiene un certificado con un valor SHA-1 igual a X y está firmado por Verisign. Un atacante crea un certificado para example.com y el valor de SHA-1 también es igual a X, así que de nuevo, tenemos una colisión, pero esta vez no es de ninguna CA confiable. Entonces, si el atacante ahora intenta hacerse pasar por example.com, ¿cómo puede ser explotado si el navegador no puede verificar que está firmado por una CA raíz de confianza? ¿Esto no causaría ningún problema solo si la CA raíz se ve comprometida?

Añadido: ¿O por qué es incluso un problema con la firma de documentos? Quiero decir, decir que un socio comercial está a punto de enviarme un contrato. Está firmado por él y puedo verificarlo y lo envié de vuelta después de firmar con mi clave privada. Entonces, ¿por qué debería preocuparme que él pudiera calcular un documento de aspecto similar con el mismo valor hash? Si no lo entendí, ¿cómo puede él probar que lo firmé? Supongo que no puede. E incluso si obtengo el documento "falso", solo porque está firmado, ¿no debería verificar lo que hay en el documento antes de firmarlo y enviarlo de vuelta?

EDITAR:

Creo que empiezo a entender. Entonces, si para el certificado A, el compendio del mensaje es igual a X y una CA raíz lo firma con su clave privada, todos pueden verificar su autenticidad descifrando la firma con la clave pública que está precargada en el navegador en forma de una X Certificado .509, ¿correcto? Entonces, dado el valor hash de X (ya que no es un secreto de todos modos) e incluso sin saber la clave privada que firmó el hash, sé que el resultado final (firma) = Y. Entonces, si sé el hash del certificado A = X y Puedo computar otro certificado (con el Emisor archivado establecido en la CA raíz que firmó el certificado real) y su valor hash también será = X (se produjo una colisión), incluso sin conocer la clave privada de los firmantes, si proporciono el El valor Y en cuanto a la firma (debido a que el hash único del certificado más el cifrado a través de la clave privada produciría un valor de la firma Y), el navegador aceptará y validará el certificado, ya que podrá descifrar la firma con el la clave pública correspondiente de la CA raíz, que está realizando la validación, calcula ese hash nuevamente y la compara con lo que envió el servidor falso y el certificado falso, ¿correcto? Gracias

    
pregunta adam86 18.03.2017 - 11:00
fuente

3 respuestas

2
  

Un atacante crea un certificado para example.com y el valor de SHA-1 también es igual a X, así que nuevamente, tenemos una colisión, ¡pero esta vez no es de ninguna CA confiable!

La CA para un certificado se especifica en el campo emisor dentro del certificado. El certificado se verifica buscando un certificado de confianza que tenga a este emisor como sujeto y luego use este certificado para validar la firma.

Esto significa que si un atacante tiene un certificado válido firmado con SHA-1 por una CA de confianza y quiere usar esta firma para su propio certificado falso, el certificado falso debe tener la misma información de emisor que el certificado original y el resultado en el mismo SHA-1. Si se otorga a ambos, este certificado falso se considera de confianza como el original. Dado que el atacante tiene el control total sobre el contenido del certificado falso, también tiene el control del campo del emisor y, por lo tanto, podría configurarlo según sea necesario.

    
respondido por el Steffen Ullrich 18.03.2017 - 11:16
fuente
0

Hay mucho alarmismo acerca de SHA1.

Comprende que hay diferentes tipos de ataques en una función hash. El ataque de colisión actual en sha1 le permite al atacante hacer lo siguiente.

  1. Elija un prefijo común para los dos archivos en conflicto antes generando los "bloques de colisión".
  2. Elija un sufijo común para los dos archivos en conflicto después generando los "bloques de colisión".

Esto es típico de los ataques de colisión iniciales encontrados en las funciones hash de merkle-damgaurd.

Normalmente, los ataques para este tipo de ataque de colisión toman la siguiente forma.

  1. El atacante elige un formato de archivo en el que la basura se puede ocultar fácilmente y en la que se puede implementar una lógica razonablemente compleja (pdf es el elemento secundario del cartel).
  2. El atacante construye un prefijo común que contiene el encabezado del pdf y cierta lógica para omitir los bloques de colisión.
  3. El atacante genera los bloques de colisión.
  4. El atacante genera un sufijo común distinto que mira los bloques de colisión y cambia el contenido aparente del documento en función de cuál de los bloques de colisión está presente.
  5. El atacante convence a la víctima para que firme el documento "bueno".
  6. El atacante trasplanta la firma al documento "malo".

El atacante ahora tiene una copia del documento "malo" que aparentemente firmó la víctima. Puede usar ese documento para convencer a las personas de que la víctima aceptó algo que realmente no aceptó.

Ahora, ¿cómo se relaciona esto con las AC?

El atacante pretende trasladar una firma de un certificado legítimo firmado por una CA a un certificado Evil. El certificado legítimo será para un dominio que el atacante posee legítimamente, el certificado Evil puede ser para un dominio que el atacante quiere suplantar o puede ser un "certificado intermedio" que permite al atacante firmar certificados a voluntad para los dominios que quiere personificar.

Esto es mucho más difícil que el ataque descrito anteriormente por dos razones.

  1. Las CA solo le dan al cliente un control limitado sobre el contenido de los certificados.
  2. Los formatos de certificado de Afaict no tienen espacio para el nivel de lógica complicada posible en algo como un pdf.

Debido a esto, no creo que sea posible explotar un ataque de colisión "simple" contra una CA.

Más peligroso es un ataque de colisión "prefijo elegido distinto". Actualmente no se conoce ningún ataque de colisión con prefijo distinto para SHA1. Para MD5, se encontró uno aproximadamente 5 años después de que se encontró la primera colisión básica.

En este caso, el atacante puede.

  1. Elija dos prefijos elegidos distintos antes generando los bloques de colisión.
  2. Elija un único sufijo común elegido después de generar los bloques de colisión.

Un ataque de colisión con prefijo distinto es mucho más peligroso porque el contenido del archivo "maligno" no tiene que estar oculto dentro del archivo "bueno". Solo un pequeño bloque de basura aparentemente aleatoria tiene que estar oculto. También significa que mientras el atacante pueda predecir la mayor parte del contenido del archivo, solo necesita controlar una pequeña parte del mismo.

Sin embargo, todavía hay un problema, los certificados tienen un "número de serie". Dado que el número de serie es uno de los primeros campos en el certificado, inevitablemente aparecerá antes de los bloques de colisión y, por lo tanto, el atacante debe poder predecirlo por adelantado.

El foro de CA / navegador requiere que las CA coloquen al menos 64 bits de aleatoriedad en sus números de serie. Si las AC siguen las reglas, sería prácticamente imposible para el atacante predecir el número de serie.

OTOH si una CA es descuidada y no usa números de serie aleatorios, explotar los ataques de colisión de prefijo distintos elegidos se vuelve más factible. Tal ataque fue demostrado con éxito con MD5 por un grupo de académicos. Una vez que se demostró el ataque, la CA en cuestión comenzó a asignar al azar sus números de serie.

Si se encuentra un ataque de colisión de prefijo elegido en SHA1 y el atacante puede encontrar una CA lo suficientemente descuidada, puede crear un certificado SHA1 falsificado.

Aparentemente, eso es suficiente para que los proveedores del navegador decidan eliminar SHA1.

El ataque final en una función hash sería un ataque previo a la imagen. Con tal ataque, el atacante podría trasplantar una firma de cualquier certificado existente a su nuevo certificado. Sin embargo, los ataques de preimagen son mucho más difíciles que los ataques de colisión. Afaict, incluso con MD5, los ataques de preimagen aún no son computables.

    
respondido por el Peter Green 08.05.2017 - 19:37
fuente
-1

En 2008 se demostró un ataque práctico de colisión contra la PKI de la web, explotando CA que aún utiliza MD5. La estructura general del ataque fue:

  1. Cree dos solicitudes de firma de certificado diseñadas para colisionar: una honesta para un sitio web legítimo y una deshonesta que suplanta una CA intermedia y, por lo tanto, está autorizada para emitir certificados .
  2. Presente la CSR honesta a un CA. Ya que es una CSR legítima, la CA emitirá un certificado honesto para ella.
  3. Combine la firma en el certificado honesto y el CSR deshonesto para elaborar un certificado de CA intermedio falsificado.
  4. Use el certificado falsificado para emitir los certificados que desee, para el sitio que desee.

La página tiene los detalles esenciales, pero esto ilustra la forma general de los ataques de colisión contra firmas digitales: el problema es que si Eve puede hacer que Alice firme un documento legítimo que fue diseñado para colisionar con una falsificación, entonces Eve puede usar la firma legítima para convencer a Bob de que Alice firmó el documento falsificado. En el ataque PKI web, Alice es una CA y Bob es un navegador web.

Los ataques de colisión contra MD5 que permitieron este ataque fueron más poderosos que el ataque de hoy en SHA1, por lo que no podemos llevar a cabo tal ataque hoy contra los certificados de SHA1. Pero un principio clave aquí es que deberíamos estar anticipándonos a los ataques antes de que ocurran , no solo reaccionando a ellos después de que estén sobre nosotros. El hecho de que se haya encontrado una colisión para SHA1 significa que es probable que se produzcan ataques más poderosos en el futuro cercano, por lo que debemos abandonar SHA1.

Para usar la historia como ejemplo, la primera colisión de MD5 se encontró en 2004, cuatro años antes del ataque práctico de PKI en la web que he vinculado anteriormente. No sabemos cuándo se encontrarán (o se han encontrado ya) ataques mejorados similares contra SHA1, ni qué ventana tan grande tendremos entre un descubrimiento secreto y conocimiento público.

    
respondido por el Luis Casillas 08.05.2017 - 21:30
fuente

Lea otras preguntas en las etiquetas