AES比RSA加密更快吗?

5

我想在Ubuntu上使用OpenSSL测试RSA和AES的速度。

我使用了以下代码进行测试。

echo -n "0123456789012345" > message.txt

openssl genrsa -out private.pem 1024
openssl rsa -in private.pem -out public.pem -pubout


for i in {1..1000}
do
    openssl rsautl -encrypt -inkey public.pem -pubin -in message.txt -out message_enc.txt
done

for i in {1..1000}
do
    openssl rsautl -decrypt -inkey private.pem -in message_enc.txt -out message_dec.txt
done

for i in {1..1000}
do
    openssl enc -e -aes-128-cbc -in message.txt -out aes.bin -K ddf -iv 345

done

结果:

$ time ./rsa_enc 
real    0m3.697s
user    0m1.308s
sys     0m0.680s

$ time ./rsa_dec
real    0m14.273s
user    0m3.172s
sys     0m0.696s

$ time ./aes

real    0m3.790s
user    0m1.408s
sys     0m0.500s

这表明RSA加密比AES加密更快。

AES不应该更快吗?我有做错什么吗?

谢谢。


我不相信你的数字,但你可以尝试计时一个nop指令,以查看计时循环中有多少开销。 - President James K. Polk
2个回答

5
除了@jbtule正确指出RSA和AES加密的不同目的之外,您基准测试的设计存在根本性缺陷。
您在此测量的不仅仅是RSA或AES加密例程,而是这些openssl命令的整个执行过程。
尽管使用外部程序之外的计时器来衡量其功能表现可能是有意义的,但这样做需要执行其他操作(如解析命令行参数、查找正确的OpenSSL子模块、打开文件、读取文件)所花费的时间相对于执行定时函数所需的时间可以忽略不计。
在这里,显然不是这种情况,特别是对于如此短的测试消息。

2
为什么速度更快很重要呢?实际上,你不能将它们用于同一件事情。RSA只能加密非常少量的数据
但是通常,如果您需要使用RSA加密大量数据,则可以使用它来加密随机AES密钥并使用AES对明文进行加密。但这更多是基于块大小和解密速度而不是加密速度的安全考虑。

这个答案是不安全的。对于对称密钥的传输,标准使用Diffie-Hellman生成共享密钥。通过Diffie-Hellman,只有在两个私钥都被揭示的情况下,密钥才会被泄露,而此方法只需要一个密钥被揭示。除非绝对必要,否则永远不要直接发送密钥! - Alex Nolte
@AlexNolte 这个回答并没有什么安全或不安全的问题,它只是描述了一个错误的假设,即RSA和AES可以互换使用。 - jbtule
我应该澄清,RSA确实是最适合处理少量数据的。然而,将用于加密大负载的AES密钥加密后发送的建议并不被安全社区认为是安全的。安全的密钥交换协议可以在此处找到:链接1 和 [链接2] (https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57pt1r4.pdf)。 - Alex Nolte
是的,我同意没有人应该再使用RSA加密了。 - jbtule

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接