¿Es lo suficientemente seguro firmar el archivo apk de Android con el resumen SHA1?

5

Ejemplo de línea de comandos de Google para firmar archivos apk:

$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name

fuente: enlace

Como saben, tanto MD5 como SHA1 se consideran gravemente defectuosos (con MD5 muy dañado en la práctica también). Entonces, ¿la firma de archivos apk de Android con hash SHA1 es lo suficientemente segura? Si no, los chicos de Google deberían saberlo y me pregunto por qué han proporcionado un ejemplo de este tipo. ¿Puedo usar otro algoritmo para firmar apks de Android?

    
pregunta user273084 30.03.2016 - 19:05
fuente

2 respuestas

5

MD5 y SHA-1 tienen fallas con respecto a colisiones (en el caso de SHA-1, estas fallas son "teóricas" en el sentido de que aún no se ha producido una colisión real). Las colisiones no son necesariamente un problema, dependiendo del contexto.

Una colisión es un par de entradas m y m ' que son distintas, pero que tienen el mismo valor. Como los algoritmos de firma operan en mensajes con hash, una firma en el primer mensaje de un par de colisiones también sería válida para el otro mensaje, mecánicamente. Las colisiones son distintas de segundas preimágenes en el siguiente sentido:

  • en una segunda preimagen, al atacante se le muestra un mensaje m y se le desafía a encontrar un m ' distinto que colisione con m ;
  • en una colisión, el atacante elige tanto m como m '.

Actualmente, no se conoce un segundo ataque de preimagen en SHA-1 y solo un muy segundo ataque de preimagen muy teórico en MD5 (esfuerzo de más de 2 120 ).

La firma de la aplicación se trata de responsabilidad . Normalmente no querrá instalar una aplicación que pueda hacer cosas malas; la firma no garantiza que la aplicación no haga cosas malas, pero le da al usuario un poder de represalia: el firmante no debe poder negar haber firmado la aplicación. Es importante recordar esto: la firma hace su trabajo siempre que permita rastrear al culpable.

Un atacante podría querer hacer dos versiones de su aplicación, las dos versiones combinadas con el mismo valor y, por lo tanto, usar el mismo valor de firma. Una versión sería "honesta", y la otra secuestraría su teléfono o promulgaría una tontería similar. ¿Pero qué le ganaría al atacante? Si la aplicación m y la aplicación m ' comparten el mismo valor de firma, entonces la firma "demuestra" que el autor de la aplicación realmente escribió ambas ... ¡lo cual es totalmente cierto! La propiedad de seguridad de la firma, la responsabilidad, sigue siendo válida en presencia de colisiones.

Lo que realmente quiere el atacante es una segunda imagen previa: quiere crear una aplicación incorrecta que esté firmada por alguien más . Para eso, necesita tomar una aplicación "honesta" existente y crear una que tenga el mismo valor, lo que le permite tomar prestado el valor de la firma. En este momento, nadie sabe cómo hacerlo con una firma RSA / SHA-1 (o, para el caso, con una firma RSA / MD5).

Las colisiones pueden ser un problema cuando el atacante elige lo que firmará otra persona. Esto es lo que sucedió con una demostración que involucra RSA / MD5 y certificados . Sin embargo, esto no se aplica a su contexto, cuando lo que firma es su propia aplicación. Las colisiones en MD5 o SHA-1 serían relevantes si imagináramos una situación que iría así:

  1. Attacker crea un par de aplicaciones, una honesta y una maliciosa, que tienen el mismo valor.
  2. Attacker envía la primera aplicación a alguien que puede firmarla.
  3. El firmante inspecciona el código de la aplicación a fondo, ve que todo se ve bien y lo firma.
  4. El atacante luego reutiliza el valor de la firma en su aplicación maliciosa.

Incluso en ese caso, mientras que la firma apuntaría al firmante, ese firmante sabría, en caso de problemas, que la aplicación maliciosa no es lo que firmó. De hecho, simplemente exhumaría la "aplicación honesta" de sus correos electrónicos, y demostraría que tanto la aplicación honesta como la maliciosa son un par en conflicto para la función hash, lo que demuestra la intención maliciosa del autor de la aplicación (no se producen colisiones). de mala suerte, hay que hacerlo a propósito).

Resumen: los defectos conocidos de MD5 y SHA-1 con respecto a las colisiones no ponen en peligro el modelo de seguridad de la firma de la aplicación. Todavía es una buena idea investigar el uso de funciones más modernas y robustas como SHA-256, pero no hay urgencia .

    
respondido por el Thomas Pornin 30.03.2016 - 19:39
fuente
1

La firma no tiene trato ni dependencia en lo que se firma, es la fuerza / debilidad de un algoritmo criptográfico proyectada al sujeto firmado. Pruebe SHA-512 o cualquier miembro de SHA-2, debería estar funcionando. El ejemplo se arraiga en un momento de hace mucho tiempo cuando fue escrito, por lo que está desactualizado.

    
respondido por el Alexey Vesnin 30.03.2016 - 19:21
fuente

Lea otras preguntas en las etiquetas