openssl speed 是 OpenSSL 官方提供的加密算法性能基准测试工具。通过它可以了解不同加密算法在当前硬件上的处理速度,从而为生产环境选择合适的加密算法提供数据支撑。
基本用法#
1
|
openssl speed [options] [algorithm...]
|
常用选项:
-seconds N — 测试持续时间(默认 10 秒)
-bytes N — 测试缓冲区大小(默认 16KB)
-evp name — 使用 EVP 接口测试指定算法
-elapsed — 使用 wall-clock 时间而非 CPU 时间
-mr — 产生机器可读的输出
对称加密算法性能测试#
测试 AES-256-GCM#
1
2
3
4
5
6
7
8
9
10
|
$ openssl speed -seconds 1 -evp aes-256-gcm
Doing AES-256-GCM for 1s on 16 size blocks: 1502986 AES-256-GCM's in 1.00s
Doing AES-256-GCM for 1s on 64 size blocks: 1375746 AES-256-GCM's in 1.00s
Doing AES-256-GCM for 1s on 256 size blocks: 1306923 AES-256-GCM's in 1.00s
Doing AES-256-GCM for 1s on 1024 size blocks: 907925 AES-256-GCM's in 1.00s
Doing AES-256-GCM for 1s on 8192 size blocks: 255844 AES-256-GCM's in 1.00s
Doing AES-256-GCM for 1s on 16384 size blocks: 140289 AES-256-GCM's in 1.00s
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
AES-256-GCM 24047.78k 88047.74k 334572.29k 929715.20k 2095874.05k 2298494.98k
|
测试 ChaCha20-Poly1305#
1
2
3
4
5
6
7
8
9
10
|
$ openssl speed -seconds 1 -evp chacha20-poly1305
Doing ChaCha20-Poly1305 for 1s on 16 size blocks: 11439657 ChaCha20-Poly1305's in 1.00s
Doing ChaCha20-Poly1305 for 1s on 64 size blocks: 5488525 ChaCha20-Poly1305's in 1.00s
Doing ChaCha20-Poly1305 for 1s on 256 size blocks: 2844621 ChaCha20-Poly1305's in 1.00s
Doing ChaCha20-Poly1305 for 1s on 1024 size blocks: 1225154 ChaCha20-Poly1305's in 1.00s
Doing ChaCha20-Poly1305 for 1s on 8192 size blocks: 167295 ChaCha20-Poly1305's in 1.00s
Doing ChaCha20-Poly1305 for 1s on 16384 size blocks: 84364 ChaCha20-Poly1305's in 1.00s
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
ChaCha20-Poly1305 183034.51k 351265.60k 728222.98k 1254557.70k 1370480.64k 1382219.78k
|
性能对比分析#
在大数据块(8192 字节)场景下:
- ChaCha20-Poly1305: 1370 MB/s
- AES-256-GCM: 2095 MB/s
在小数据块(64 字节)场景下:
- ChaCha20-Poly1305: 351 MB/s
- AES-256-GCM: 88 MB/s
结论:
- AES-256-GCM 在大块数据加密时性能更优
- ChaCha20-Poly1305 在小块数据场景下性能更稳定,适合移动设备
哈希算法性能测试#
测试 SHA-256#
1
2
3
4
5
6
7
8
9
10
|
$ openssl speed -seconds 1 -evp sha256
Doing sha256 for 1s on 16 size blocks: 2441039 sha256's in 1.00s
Doing sha256 for 1s on 64 size blocks: 1508808 sha256's in 1.00s
Doing sha256 for 1s on 256 size blocks: 882935 sha256's in 1.00s
Doing sha256 for 1s on 1024 size blocks: 293558 sha256's in 1.00s
Doing sha256 for 1s on 8192 size blocks: 41751 sha256's in 1.00s
Doing sha256 for 1s on 16384 size blocks: 21220 sha256's in 1.00s
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
sha256 39056.62k 96563.71k 226031.36k 300603.39k 342024.19k 347668.48k
|
在大数据块场景下,SHA-256 可以达到约 347 MB/s。
常用算法快速测试#
一键测试多个算法#
1
2
3
4
5
|
# 测试多个对称加密算法
openssl speed -seconds 1 -evp aes-128-cbc aes-256-cbc aes-128-gcm aes-256-gcm chacha20-poly1305
# 测试多个哈希算法
openssl speed -seconds 1 -evp sha256 sha384 sha512 shake128 shake256
|
机器可读输出#
1
|
openssl speed -seconds 1 -mr -evp aes-256-gcm
|
机器可读格式便于编写脚本自动分析结果。
性能优化建议#
1. 选择合适的对称加密算法#
| 场景 |
推荐算法 |
原因 |
| 高性能服务器 |
AES-256-GCM |
大块数据加密性能最优 |
| 移动设备/低功耗 |
ChaCha20-Poly1305 |
小块数据性能稳定,无需硬件支持 |
| 通用场景 |
AES-128-GCM |
平衡安全性和性能 |
2. 启用硬件加速#
现代 CPU 通常支持 AES-NI 指令集,可以大幅提升 AES 性能。检查是否启用:
1
2
3
4
5
|
# 检查 CPU 支持
grep -o aes /proc/cpuinfo
# 或者通过 OpenSSL 查看
openssl engine -t -c
|
3. 考虑算法组合#
在 TLS 配置中,可以根据客户端类型选择不同算法:
1
2
3
|
# Nginx 配置示例
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305';
|
这样支持 AES-NI 的客户端会使用 AES,其他客户端会回退到 ChaCha20。
注意事项#
-
测试环境与生产环境差异:基准测试结果受 CPU 型号、负载、内存等因素影响,建议在目标硬件上进行测试。
-
OpenSSL 版本影响:不同版本的 OpenSSL 性能可能有差异,建议使用生产环境的相同版本测试。
-
测试时间选择:建议在系统负载较低时进行测试,以获得更准确的结果。
-
多核并行测试:可以使用 -multi 选项进行多核并行测试,更全面地评估性能。
1
2
|
# 使用 4 个并行任务测试
openssl speed -seconds 1 -multi 4 -evp aes-256-gcm
|
openssl speed 是评估加密算法性能的实用工具。通过实际测试可以发现:
- 在支持 AES-NI 的硬件上,AES-256-GCM 是大块数据加密的首选
- 在不支持硬件加速的场景下,ChaCha20-Poly1305 提供了更好的性能
- 选择加密算法时,需要综合考虑安全性、性能和兼容性
建议在部署前使用 openssl speed 在目标硬件上进行实际测试,以获得最准确的性能数据。
参考来源#