¿Es posible que para firmar un mensaje con una clave PGP de una manera que fuga la clave

1

Alice proporciona un software para firmar mensajes. El software se ejecuta en un entorno con espacio de aire.

El software recibe el mensaje que debe firmarse y la clave privada. Luego, el software produce un mensaje PGP firmado firmado con el que muestra la clave pública correcta. ¿Es posible que el software oculte la clave privada en algún lugar de la firma del mensaje?

    
pregunta Christian 13.04.2015 - 16:19
fuente

3 respuestas

2

Las firmas PGP, como la mayoría de los esquemas de firmas modernas, no son deterministas: es decir, firmar el mismo mensaje dos veces no dará como resultado la misma firma. Para hacer esto, se utiliza un nonce aleatorio (número usado una vez). El nonce debe MIRAR al azar, pero no hay forma de garantizar que lo sea: puede cifrar algunos datos que desee filtrar con una clave fija, y sería imposible distinguirlos de un nonce adecuado. La firma todavía se verificará, pero alguien "con conocimiento" podría descifrar el código para recuperar los datos exfiltrados.

Dicho esto, los archivos no suelen ser lo suficientemente grandes como para contener una clave privada completa. Puede mitigar esto fácilmente al filtrar un segmento aleatorio de la clave privada con cada mensaje; el destinatario podría volver a juntar la llave después de ver suficientes mensajes.

Editar para hacer un seguimiento: el método ingenuo descrito anteriormente produce la misma firma cada vez, un sorteo muerto. Aunque es bastante fácil de arreglar El nonce en un protocolo suele ser lo suficientemente largo como para proporcionar una fuerza criptográfica, que es más que suficiente para incluir algunos bits aleatorios para garantizar que no se pueda detectar la firma maliciosa. Por ejemplo, podrías dividir el nonce por la mitad; la primera mitad podría ser verdaderamente aleatoria, y la última mitad podría ser una parte de la clave privada cifrada con el uso de la primera mitad como IV. Como una mejora adicional, el primer byte más o menos de los datos exfiltrados podría usarse como compensación, mostrando qué parte de la clave se está filtrando en ese mensaje.

    
respondido por el Reid Rankin 13.08.2015 - 18:13
fuente
0

Sí, es posible. Considera:

signature = sign_message(message, private_key)
// super secret sneaky private key theft
signature = signature + "/" + base64(private_key) 
signed_message = embed_signature(message, signature)

Si desea que la firma aún se valide con el estándar gpg --verify , alternativamente puede usar un encabezado de firma de Comentario o MessageID.

    
respondido por el Lie Ryan 13.04.2015 - 17:21
fuente
0

La falla Debian RNG / DSA en realidad permitió exactamente hacer esto.

Si usa números aleatorios erróneos (por ejemplo, fuera de un rango pequeño como sucedió en la falla de Debian), la clave privada se puede calcular a partir de la firma (forzando bruta a través de todos los números aleatorios posibles). sesse.net tiene una buena explicación de cómo funciona exactamente.

Por lo tanto, use un generador de números aleatorios incorrecto (por ejemplo, devolver un valor constante en lugar de un número aleatorio) junto con las claves DSA, y realmente esconda la clave en la firma. Esto es posible realizando algunos cambios menores en GnuPG y recompilando.

(Comicde XKCD )

    
respondido por el Jens Erat 14.04.2015 - 17:07
fuente

Lea otras preguntas en las etiquetas