it-swarm-eu.dev

Perché la crittografia AES richiede più tempo della decrittografia?

Mentre studiavo il tempo impiegato da alcuni metodi, ho scoperto che la crittografia richiede più tempo della decrittografia. È giusto? Sto usando AES (gli stessi passi saranno fatti durante l'enc e il dec)

36
BOB

Diversi codici a blocchi simmetrici (in particolare quelli come AES, DES, Blowfish, RC5) impiegheranno 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 cipher-block chaining (CBC), la crittografia deve essere eseguita in modo sequenziale (crittografare il blocco 0 prima di poter crittografare il blocco 1 prima di poter crittografare il blocco 2 ...), mentre la decrittografia può essere parallelizzata come XOR (con il precedente blocco di testo cifrato) viene eseguito dopo l'applicazione del codice di blocco.

Vedere i diagrammi di seguito (XOR è indicato con un più cerchiato ⊕). Per crittografare il secondo blocco di testo in chiaro p[1], Usi c[1] = AES_Encrypt(p[1] XOR c[0]), ciò significa che non puoi generare c[1] Fino a quando non hai finito di generare c[0].

CBC mode encryption

Nel frattempo per decrittografare il secondo blocco di testo cifrato, usi p[1] = c[0] XOR AES_Decrypt(c[1]). Ciò non dipende dal precedente blocco di testo in chiaro p[0], Quindi può essere completamente parallelizzato (e può funzionare molto più velocemente su sistemi multi-core). CBC mode decryption

Se si desidera una decrittografia e una crittografia veloci, è possibile prendere in considerazione l'uso del CTR in quanto può essere parallelizzato sia sulla crittografia che sulla decrittografia.

Potresti anche essere potenzialmente attento ai test che sono distorti a causa delle cache sul tuo sistema. Se decidi casualmente di leggere un file dal disco e di crittografarlo, occorreranno diversi millisecondi per leggere ogni blocco del file; tuttavia la prossima volta che accederai, il file verrà generalmente memorizzato nella cache e sarà possibile accedervi molto più rapidamente. Nel frattempo per il test di decrittazione quel file crittografato che è stato recentemente scritto su disco probabilmente rimarrà ancora in una cache in memoria e non subirà la penalità della lettura dal disco.


CTR Timing

$ 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 a un file è stato molto più lento rispetto agli accessi successivi. Mostra anche che per CTR sia la crittografia/decrittografia di questa macchina virtuale da 7,4 G ha richiesto circa 35 secondi. (Alla ripetizione di tanto in tanto, la decodifica sarebbe più veloce o più lenta).

58
dr jimbob