Mentre stavo studiando il tempo consumato da alcuni metodi ho scoperto che la crittografia richiede più tempo rispetto alla decodifica. È giusto? Sto usando AES (gli stessi passi saranno presi durante enc e dec)
Diversi codici a blocchi simmetrici (in particolare quelli come AES, DES, Blowfish, RC5) impiegano lo stesso tempo (all'interno dell'errore di misura) per la crittografia e la decrittografia, quando si opera su un singolo blocco (ad es. 128 bit per AES ).
Tuttavia, ci sono un paio di motivi per cui appare diverso quando si crittografa / decodifica più blocchi. Ad esempio, con cifratura dei blocchi di codice (CBC), la crittografia deve essere eseguita in sequenza ( cifrare il blocco 0 prima di poter crittografare il blocco 1 prima di poter crittografare il blocco 2 ...), mentre la decrittografia può essere parallelizzata mentre il passo XOR (con il blocco precedente del testo cifrato) viene eseguito dopo l'applicazione del codice a blocchi.
Vedi gli schemi sottostanti (XOR è denotato con un plus cerchiato ⊕). Per crittografare il secondo blocco di testo in chiaro p[1]
, usi c[1] = AES_Encrypt(p[1] XOR c[0])
, questo significa che non puoi generare c[1]
finché non hai finito di generare c[0]
.
Nelfrattempo,perdecifrareilsecondobloccoditestocifrato,usip[1]=c[0]XORAES_Decrypt(c[1])
.Questonondipendedalbloccoprecedenteditestonormalep[0]
,quindipuòesserecompletamenteparallelo(epuòessereeseguitomoltopiùvelocementesusistemimulti-core).
Se desideri una decrittazione e una crittografia rapide, puoi prendere in considerazione l'utilizzo di CTR in quanto può essere parallelizzato sia per la crittografia sia per la decrittografia.
Dovresti anche essere cauto nei test che sono distorti a causa delle cache sul tuo sistema. Se decidi casualmente di leggere un file dal disco e lo cripto, ci vorranno diversi millisecondi per leggere ogni blocco del file; tuttavia la prossima volta che lo accederai, il file verrà generalmente memorizzato nella cache e sarà accessibile molto più rapidamente. Nel frattempo, per il tuo test di decrittografia, il file crittografato che è stato scritto di recente sul disco probabilmente si troverà ancora in una cache in memoria e non subirà penalità dalla lettura dal disco.
Tempo CTR
$ time openssl aes-256-ctr -e -salt -pass pass:passwd -in Fedora_64-bit.vmdk -out vmdk.encrypted
real 0m58.217s
user 0m5.788s
sys 0m8.493s
$ time openssl aes-256-ctr -e -salt -pass pass:passwd -in Fedora_64-bit.vmdk -out vmdk.encrypted
real 0m34.780s
user 0m4.800s
sys 0m7.748s
$ time openssl aes-256-ctr -e -salt -pass pass:passwd -in Fedora_64-bit.vmdk -out vmdk.encrypted
real 0m34.989s
user 0m4.120s
sys 0m6.444s
$ time openssl aes-256-ctr -d -salt -pass pass:passwd -in vmdk.encrypted -out decrypted
real 0m35.944s
user 0m4.140s
sys 0m7.008s
Le prime tre crittografie mostrano l'effetto della cache del disco, in cui il primo accesso di un file era molto più lento degli accessi successivi. Mostra anche che per CTR sia la crittografia / decrittografia di questa macchina virtuale 7.4 G impiega circa 35 secondi. (A volte la ripetizione della decodifica potrebbe essere più veloce o più lenta).
Leggi altre domande sui tag encryption aes