Mientras estudiaba el tiempo consumido por algunos métodos, descubrí que el cifrado toma más tiempo que el descifrado. ¿Es esto correcto? Estoy usando AES (se tomarán los mismos pasos durante el enc y dec)
Varios cifrados de bloques simétricos (específicamente unos como AES, DES, Blowfish, RC5) tomarán la misma cantidad de tiempo (dentro del error de medición) para el cifrado y descifrado, cuando se opera en un solo bloque (por ejemplo, 128 bits para AES ).
Sin embargo, hay varias razones por las que parece diferente al cifrar / descifrar múltiples bloques. Por ejemplo, con encadenamiento de bloque de cifrado (CBC), el cifrado debe realizarse secuencialmente ( encripte el bloque 0 antes de poder cifrar el bloque 1 antes de que pueda cifrar el bloque 2 ...), mientras que el descifrado se puede paralelizar como el paso XOR (con el bloque de texto cifrado anterior) se realiza después de aplicar el cifrado de bloque.
Vea los diagramas a continuación (XOR se denota con un círculo más). Para cifrar el segundo bloque de texto plano p[1]
, usa c[1] = AES_Encrypt(p[1] XOR c[0])
, esto significa que no puede generar c[1]
hasta que haya terminado de generar c[0]
.
Mientrastantoparadescifrarelsegundobloquedetextocifrado,usep[1]=c[0]XORAES_Decrypt(c[1])
.Estonodependedelbloqueanteriordetextosimplep[0]
,porloquepuedesercompletamenteparalelizado(ypuedeejecutarsemuchomásrápidoensistemasdemúltiplesnúcleos).
Si desea un descifrado y cifrado rápido, puede considerar usar CTR, ya que puede ser paralelo tanto en el cifrado como en el descifrado.
También deberías tener cuidado con las pruebas que están sesgadas debido a los cachés en tu sistema. Si decide aleatoriamente leer un archivo del disco y cifrarlo, tomará varios milisegundos leer cada fragmento del archivo; Sin embargo, la próxima vez que acceda a él, el archivo generalmente se almacenará en la memoria caché y se accederá mucho más rápido. Mientras tanto, para la prueba de descifrado, es probable que el archivo encriptado que se escribió recientemente en el disco todavía esté en un caché en la memoria y no sufra la penalización de la lectura del disco.
Tiempo de 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
Los primeros tres cifrados muestran el efecto de la caché de disco, donde el primer acceso de un archivo fue mucho más lento que el de los accesos posteriores. También muestra que para el CTR que tanto el cifrado / descifrado de esta máquina virtual de 7.4 G tomó aproximadamente 35 segundos. (En la repetición de vez en cuando, el descifrado sería más rápido o más lento).
Lea otras preguntas en las etiquetas encryption aes