E 'possibile che firmare un messaggio con una chiave PGP in un modo che perde la chiave

1

Alice fornisce un software per la firma dei messaggi. Il software funziona in un ambiente airgapped.

Il software riceve il messaggio che deve essere firmato e la chiave privata. Il software produce quindi un messaggio PGP firmato e firmato con la chiave pubblica corretta. È possibile che il software nasconda la chiave privata da qualche parte nella firma del messaggio?

    
posta Christian 13.04.2015 - 16:19
fonte

3 risposte

2

Le firme PGP, come la maggior parte degli schemi di firma moderni, non sono deterministiche: vale a dire, firmare lo stesso messaggio due volte non porterà alla stessa firma. Per fare ciò, viene usato un nonce casuale (numero usato una volta). Il nonce ha bisogno di LOOK random, ma non c'è modo di garantire che lo sia: è possibile crittografare alcuni dati che si desidera esfiltrare con una chiave fissa, e sarebbe indistinguibile da un nonce corretto. La firma verrebbe comunque verificata, ma qualcuno "in conoscenza" potrebbe decifrare il nonce per recuperare i dati exfiltrati.

Detto questo, i nonces di solito non sono abbastanza grandi da contenere una chiave privata completa. Si potrebbe facilmente mitigare questo esfiltrando un segmento casuale della chiave privata con ogni messaggio; il destinatario potrebbe quindi ricomporre la chiave dopo aver visto abbastanza messaggi.

Modifica per il follow-up: il metodo naive descritto sopra produce ogni volta la stessa firma, un omaggio indelebile. È abbastanza facile da risolvere però. Il nonce in un protocollo è solitamente abbastanza lungo da fornire la forza crittografica, che è più che sufficiente per includere alcuni bit casuali per garantire che la firma dannosa non possa essere rilevata. Ad esempio, puoi dividere il nonce a metà; la prima metà potrebbe essere veramente casuale e l'ultima metà potrebbe essere una porzione della chiave privata crittografata con l'utilizzo della prima metà come IV. Come ulteriore miglioramento, il primo o più byte dei dati exfiltrated potrebbe essere utilizzato come offset, mostrando quale parte della chiave è trapelata in quel messaggio.

    
risposta data 13.08.2015 - 18:13
fonte
0

Sì, è possibile. Prendere in considerazione:

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

Se si desidera che la firma sia ancora valida con lo standard gpg --verify , in alternativa è possibile utilizzare un'intestazione di firma Comment o MessageID.

    
risposta data 13.04.2015 - 17:21
fonte
0

L'errore Debian RNG / DSA in realtà ha permesso esattamente di farlo.

Se usi numeri casuali errati (ad esempio, fuori da un intervallo ristretto come è successo nel difetto di Debian) la chiave privata può essere calcolata fuori dalla firma (forzando bruto attraverso tutti i possibili numeri casuali). sesse.net ha una bella spiegazione di come funziona esattamente.

Quindi, utilizzare un generatore di numeri casuali errato (ad esempio, restituendo un valore costante anziché un numero casuale) insieme alle chiavi DSA e in realtà si nasconde la chiave nella firma. Questo è possibile eseguendo qualche piccola modifica in GnuPG e ricompilando.

(fumettoda XKCD )

    
risposta data 14.04.2015 - 17:07
fonte

Leggi altre domande sui tag