La crittografia simmetrica di GnuPG produce risultati diversi

5

Ho un caso d'uso in cui voglio commettere codice sorgente simmetricamente crittografato usando GnuPG (pensate a Coursera assegnazioni per backup e collaborazione). Cifrare / decodificare tutte le fonti in un batch con uno script e mi chiedevo, perché l'output non è stabile.

Quindi in pratica, perché

echo "plain text" | gpg --armor --symmetric --cipher-algo AES256

con password secret restituisce testi cifrari diversi con ogni chiamata? (Sicuramente, questo non influisce sulla decifrazione - i vari testi cifrati possono decodificare lo stesso testo semplice.) Non ho esperienza con gli algoritmi crittografici, ma sfiorando l'articolo Wikipedia sembra che l'algoritmo sia deterministico.

Quindi, in breve, le mie domande sono:

  1. Questo comportamento è una proprietà di AES o sto utilizzando GnuPG in modo errato?
  2. Se il primo è il caso, ci sono altri algoritmi di crittografia simmetrici che sono più adatti per questo caso d'uso?
posta rdanitz 13.05.2015 - 22:08
fonte

3 risposte

7

Di solito, la crittografia simmetrica inizia con un vettore di inizializzazione casuale (IV). OpenPGP utilizza una modalità di feedback della criptazione leggermente diversa con un IV tutto-zero, ma i primi due blocchi sono casuali .

Per questo motivo, anche la crittografia simmetrica non è deterministica; non è possibile confrontare il testo semplice confrontando il messaggio crittografato, il risultato crittografato non è più deterministico.

    
risposta data 13.05.2015 - 22:41
fonte
4

Oltre alla crittografia vettore di inizializzazione (IV), la derivazione della chiave simmetrica utilizza un salt casuale per proteggere dagli attacchi del dizionario offline o della tabella arcobaleno. In particolare, S2K iterato e salato ( Da stringa a chiave ) il pacchetto contiene un sale da 8 byte.

    
risposta data 14.05.2015 - 08:46
fonte
1

Avvicinandoti alla tua seconda domanda, anziché utilizzare un algoritmo di crittografia diverso, puoi sostituire gpg in modalità simmetrica con openssl :

echo "plain text" | openssl enc -aes-128-cbc -nosalt -pass pass:secret

Attenzione:

  • A scopo di esempio, sto fornendo la passphrase nella riga di comando. Vedi PASSARE ARGOMENTI FRASE in openssl (1) per modi migliori di fornirlo.

  • Siccome disabilitiamo esplicitamente il salt, dovresti usare una passphrase più strong che non sia riutilizzata, userei una passphrase generata a caso che cambia per ogni assegnazione,

risposta data 15.05.2015 - 02:44
fonte

Leggi altre domande sui tag