AES的速度是多少?如何准确估计?在此:
https://security.stackexchange.com/questions/92074/aes-algorithm-encryption-time
他们写的可能是700 MB/s,但这里:
https://www.cse.wustl.edu/~jain/cse567-06/ftp/encryption_perf/index.html
Abdel-Karima Al Tamima估计大约是50 MB/s,为什么会有这样的差异?是因为某种硬件加速吗?我试着把它和PCG发生器比较一下:
https://www.pcg-random.org/paper.html
比较一下产生伪随机数的速度更快的是什么(我知道PCG不是密码安全的,也不是密码)。例如,128位PCG可以进行大约65 GB/s (它可能是在Python的numpy中实现的)。它可与50 MB/s或700 MB/s相比吗?
发布于 2021-04-28 01:21:08
在硬件中实现AES通常是非常快的。在我的笔记本电脑上,核心i7 8665U,AES-128的工作速度为6758 MB/s,在软件中实现要慢得多,在固定时间的实现中用软件实现要慢得多。在我的系统上,一个非固定时间的天真的软件实现以367 MB/s的速度运行。
你说过你在找智能手机处理器。一些较新的处理器将提供AES加速,但并非所有处理器都可用。如果您正在寻找一种能够在几乎所有系统上运行良好、时间恒定、密码安全的算法,我建议使用ChaCha20,或者,如果您确实需要惊人的性能,则推荐ChaCha12。在我的系统上,ChaCha20以3513 MB/s的速度运行,在没有硬件加速的情况下,它的性能明显优于AES。ChaCha12的性能几乎和许多非加密PRNG一样好或更好。对于PRNG,无论是加密的还是非加密的,它都是我的选择,因为它快速、安全,并且没有弱种子(与许多非加密PRNG不同)。它也是Rust rand系列板条箱的默认PRNG,并且在Linux内核中使用ChaCha20生成随机数。
请注意,PRNG的任何性能比较还必须考虑不仅生成值,而且要将它们放到可以使用它们的位置。例如,如果您只使用向量寄存器对相同的数据进行加密,那么AES-NI指令的性能可能会比我前面列出的还要好。但是,当您必须在内存中加载和存储数据时,性能会下降,因为这样做成本更高。我怀疑PCG文件并没有以实际的方式考虑到这一点。
当然,我的系统上的性能度量并不反映其他系统,如果您需要了解特定系统的工作方式,您应该自己对其进行基准测试。您可能还想看看超级警察,它在各种类型的硬件上对许多加密原语进行了基准测试,以回答您的问题。您可能会发现硬件可以与现代和较旧的处理器相媲美,包括各种ARM和ARM64硬件。
关于性能的最后一个注意事项:对于一个作业,您并不总是需要使用最快的算法。在大多数应用程序中,随机数的生成很可能不是瓶颈,使用像ChaCha这样的算法(比如缺乏弱状态和更好的质量)的好处可能会超过稍微慢一点的事实。您的基准需要集中在找出瓶颈的地方,并尽可能地改进这些地方。
https://crypto.stackexchange.com/questions/89610
复制相似问题