¿RNG desempeña un papel en la firma de PGP?

5

Tenemos un sistema Jenkins que crea versiones de software PGP-signs y estamos considerando mover el componente de firma a una máquina virtual aislada en lugar de ejecutarlo como parte de la infraestructura general del constructor, para aislar mejor las claves privadas de todas las otras partes móviles relativamente públicas.

Algunos desarrolladores están discutiendo contra el uso de una máquina virtual, ya que las máquinas virtuales suelen tener pocas fuentes de buena entropía y, por lo tanto, no son generalmente adecuadas para la criptografía. Quiero presentar un argumento en contra que, dado que usaremos las claves PGP generadas en otros lugares, las únicas operaciones criptográficas que se realizarán en esa máquina virtual no dependerán en absoluto de RNG. Mi entendimiento del proceso de firma de PGP es que calcula un hash sha1 / sha2 (no se usa RNG) y luego calcula la firma usando la clave privada (no se usa RNG).

¿Eso es correcto? ¿O me estoy perdiendo algo que haría que un RNG fuerte fuera un requisito para un sistema que solo firma con PGP pero nunca con cifrado con PGP?

    
pregunta mricon 24.03.2014 - 18:28
fuente

2 respuestas

4

Firmar con RSA en OpenPGP es determinista y, por lo tanto, no requiere una fuente de aleatoriedad como lo describió correctamente. Hashear los datos que se van a firmar es determinista, siempre y cuando no se rellene con una semilla aleatoria (consulte la respuesta de @Karol Babioch para obtener más información sobre por qué un podría querer hacerlo), firmar el hash también es.

Discusión detallada de las partes involucradas:

Puede intentarlo usted mismo usando faketime para configurar la hora en un tiempo fijo (no use una fecha anterior a la hora de creación de su clave):

$ faketime '@2147483647' gpg --sign --output - somefile  | gpg --print-md SHA256
93C7E062 151311F2 822FBBBF FC4B061A C8F31A1A 54FDA558 61A9C964 B5107CD4

Sin falsificar el tiempo, recibirás diferentes valores hash a medida que cambie la marca de tiempo.

Para otros algoritmos, consulte la respuesta de @Karol Babioch. La conclusión de este debate sería: Utilice RSA para iniciar sesión en máquinas virtuales u otros dispositivos de baja entropía (algunas cajas incrustadas, enrutadores, ...), ya que no depende de la aleatoriedad; pero es mejor importar el par de claves desde otro lugar.

Por otra parte, el cifrado requiere números aleatorios también con RSA: el cifrado público / privado solo se usa para cifrar la clave de cifrado del bloque, y es posible que se aplique algo de relleno.

Obviamente, la creación de un nuevo par de claves OpenPGP también requiere aleatoriedad.

    
respondido por el Jens Erat 24.03.2014 - 19:11
fuente
6

Lamentablemente, las respuestas anteriores a esta pregunta son no solo incorrectas , sino también peligrosas .

Si bien es cierto que las firmas digitales generalmente involucran funciones de hash, que por su naturaleza son inherentemente deterministas, debe tener en cuenta que las firmas digitales son más que un simple hash . Implican la criptografía de clave pública, que se utiliza de manera que garantiza que solo el propietario legítimo de una clave privada pueda firmar algo. Existen bastantes algoritmos de firma digital, y los siguientes se utilizan ampliamente en la práctica:

Al menos DSA, ECDSA y ElGamal requieren absolutamente números aleatorios por diseño . La reutilización de un número aleatorio, puede llevar a la recuperación de la clave privada. Esto es trivialmente fácil y puede ser comprendido por cualquier persona interesada en el tema con solo unas pocas ecuaciones muy básicas.

Ha habido todo tipo de ataques en el pasado explotando este mismo hecho. Probablemente el ejemplo más frecuente sea el hack de la PlayStation 3, que nos trajo el siguiente cómic de xkcd:

Porotraparte,conRSAnoestanfácil."Schoolbook" RSA no requiere números aleatorios. Sin embargo, es posible que un atacante realice ataques falsificación existencial en implementaciones simples de RSA. Por lo tanto, se utilizan en la práctica esquemas modificados, que podrían funcionar de una manera probabilística. La idea básica es que las firmas válidas tienen que satisfacer una determinada forma. Uno de estos estándares se llama Protocolo de firma probabilística (PSS) ) .

GPG tiene todos los esquemas anteriores implementados. Por ahora, RSA parece ser el predeterminado en la mayoría de los sistemas. RFC 4880 afirma que OpenPGP utiliza EMSA-PKCS1-v1_5 , que es un esquema de relleno determinista y, de hecho, no requiere números aleatorios.

Entonces, en esencia : Sí , las firmas digitales requieren números aleatorios y puede ser una mala idea usar máquinas virtuales para tales Tareas. Al menos es algo para pensar conscientemente.

    
respondido por el Karol Babioch 25.03.2014 - 01:42
fuente

Lea otras preguntas en las etiquetas