回答
什么是测试加密库的好测试?
下面的答案在Crypto ++的上下文中。我现在不了解其他库,如OpenSSL,Botan,BouncyCastle等。
Crypto ++库有一个内置的基准测试套件。
哪个单位(时间,CPU周期等),我们应该使用比较型动物加密库?
您通常以每字节的周期数来衡量性能。每个字节的周期取决于CPU频率。另一个相关指标是以MB/s为单位的吞吐量。它也取决于CPU频率。
是否有任何工具,程序....?
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
make bench
将创建一个名为benchmark.html
。
如果你想手动运行测试,那么:
./cryptest.exe b <time in seconds> <cpu speed in GHz>
它将输出类似HTML的表,而<HEAD>
和<BODY>
标签。您仍然可以在网络浏览器中查看它。
您还可以在Crypto++ Benchmarks上查看Crypto ++基准测试页。信息的日期和它在我们的TODO清单上。
你也需要accumen为什么看起来是正确的。例如,SSE4.2和ARMv8有一个CRC32指令。每个字节的周期应该从大约3或5 cpb(仅软件)到大约1或1.5 cpb(硬件加速)。它应该等同于在大约2 GHz的现代硬件上大约300或500 MB/s(仅软件)的变化,大约1.5 GB/s(硬件加速)。
其他技术,如SSE2和NEON,更难处理。理论上每个字节的循环数和吞吐量应该可以看到,但是你可能不知道它是什么。您可能需要联系算法的作者才能找到答案。例如,我们联系了BLAKE2的作者,了解我们的ARMv7/ARMv8 NEON实现是否按预期执行,因为它是作者主页上的missing benchmark results。
我也发现GCC 4.6(及以上版本)和-O3
可以在仅有软件的实现方面有很大的不同。这是因为GCC在-O3
的矢量化程度很高,您可能会看到2倍到2.5倍的加速。例如,编译器可能会生成运行在40 cpb的代码-O2
。在-O3
它可能运行在15或19 cpb。一个好的SSE2或NEON实现应该比单纯软件实现至少每个字节少几个周期。在同一个例子中,SSE2或NEON的实现可能运行在8至13 cpb。
还有像OpenBenchmarking.org这样的网站,可以为您提供一些指标。
我上面的评论放在一边,美国政府有FIPS program,你可能想看看。这不是完美的(通过一个长镜头),但这是一个开始 - 你可以了解他们在评估密码学时所看到的东西。
我也建议看看Computer Security Division of the NIST。
此外,在旁注中......回顾主人不得不说的(布鲁斯·施奈尔)关于Security Pitfalls in Cryptography的问题总是很好。另外:Security is harder than it looks。
我假设你的意思是性能基准。我会说时间和周期都是有效的基准,因为一些代码可能在不同的体系结构上执行不同的操作(如果它们不同,可能会大相径庭)。
如果这对你来说非常重要,我会自己做测试。你可以使用一些计时器(几乎所有的语言都有一个计时器),或者你可以使用一些分析器(几乎所有的语言都有其中一种)来找出你在目标平台上寻找的算法的确切性能。
如果您正在查看一种算法与另一种算法,您可以查找其他人已经收集的数据,这会给您一个粗略的想法。例如,以下是来自Crypto ++的一些基准: http://www.cryptopp.com/benchmarks.html
请注意,它们使用MB /秒和周期/字节作为度量标准。我认为这是非常好的选择。
我面前的一些非常好的答案,但请记住,优化是通过timing attack(例如参见how devastating it can be for AES)泄漏密钥材料的一种非常好的方式。如果攻击者有任何机会计算你的操作时间,你不想要最快但最稳定的时间库(如果有人可以监控你的电脑,可能是最常用的电源使用情况)。 OpenSSL在保护当前攻击方面做得非常出色,不一定会说出与其他库相同的东西。
- 1. 在Python中对基准运行时间进行基准测试
- 2. 如何设置MongoDB Sharded Cluster来对Cassandra进行基准测试?
- 3. 如何在Clojure中对函数进行基准测试?
- 4. 如何在SUPERCOP中对单个算法进行基准测试?
- 5. 我如何在wamp中对mysql进行基准测试?
- 6. ios - 如何对着色器进行基准测试
- 7. 我如何对MySQL进行基准测试?
- 8. 使用Python进行基准测试
- 9. 如何基于python脚本对C程序进行基准测试?
- 10. 有没有办法对加密库进行基准测试,以便结果与硬件无关?
- 11. 我该如何运行基准测试?
- 12. 如何进行Apache Mina性能基准测试
- 13. 如何在多核处理器上进行基准测试
- 14. 对一些Javascript框架进行基准测试
- 15. 使用矩阵矢量示例对Akka进行基准测试
- 16. 对UDP服务器进行基准测试
- 17. 使用Specweb 2009对Apache进行基准测试
- 18. 通过.sh脚本对java jar进行基准测试
- 19. Android:对两种算法进行基准测试
- 20. 对Git分支之间的Perl函数进行基准测试
- 21. 使用Python Popen对脚本进行基准测试?
- 22. 我想用java对solaris和linux进行基准测试
- 23. 动态地对DOM进行基准测试
- 24. 如何基于基于websocket的Node.js应用程序进行基准测试?
- 25. 如何在Windows中运行Apache基准测试负载测试?
- 26. 基准测试/测试fastclick.js
- 27. 我如何使用LINPACK对condor HPC集群进行基准测试?
- 28. 如何对我选择的XML解析器进行基准测试?
- 29. Android如何对数据库进行加密/解密
- 30. Siege基准测试
这将取决于可用的库和加密方案以及您可用的平台选项。例如:您正在测试的是对称密钥还是非对称密钥加密?您是在测试加密还是只是数字签名生成?关键优势或原始表现对你更重要吗? – 2011-03-23 17:55:56