如何对加密库进行基准测试?
我们应该使用哪种单位(时间、CPU周期等)来比较不同的加密库?
是否有任何工具、程序等?
欢迎提出任何想法和评论!
感谢您的回答!
如何对加密库进行基准测试?
我们应该使用哪种单位(时间、CPU周期等)来比较不同的加密库?
是否有任何工具、程序等?
欢迎提出任何想法和评论!
感谢您的回答!
在我之前有一些非常好的回答,但请记住,优化是通过时序攻击泄露关键材料的一种非常好的方式(例如,请参阅AES有多么具有毁灭性)。如果攻击者有任何机会计时您的操作,您需要选择可用的最恒定时间库(如果有任何人可以监视你,可能还需要选择最恒定的功率使用)。 OpenSSL在保持对当前攻击方面做得很好,不能保证其他库也是如此。
git clone https://github.com/weidai11/cryptopp.git
cd cryptopp
make static cryptest.exe
# 2.0 GHz (use KB=1024; not 1000)
make bench CRYPTOPP_CPU_SPEED=1.8626
./cryptest.exe b <time in seconds> <cpu speed in GHz>
<HEAD>
和 <BODY>
标签。您仍然可以在 Web 浏览器中查看它。-O3
可以在仅使用软件实现时产生很大的差异。这是因为GCC在-O3
下进行了大量向量化处理,您可能会看到2倍至2.5倍的加速。例如,编译器可以生成在-O2
下以40 cpb运行的代码。在-O3
下,它可以以15或19 cpb运行。良好的SSE2或NEON实现应该比仅使用软件的实现快几个字节。在同样的例子中,SSE2或NEON实现可能以8到13 cpb的速度运行。撇开我上面的评论,美国政府有一个FIPS计划,你可能想要查看一下。它并不完美(远远不够),但这是一个开始——你可以了解到他们在评估密码学时关注的事情。
我还建议查看NIST的计算机安全部门。
此外,顺便提一下……阅读大师Bruce Schneier在密码学中的安全陷阱方面的观点总是有好处的。另外:安全比看起来更难。