mirror of
https://github.com/emmansun/gmsm.git
synced 2025-05-11 03:26:17 +08:00
Updated SM2加解密性能 (markdown)
parent
bc12e329c5
commit
f89ded0c04
58
SM2加解密性能.md
58
SM2加解密性能.md
@ -7,7 +7,7 @@
|
||||
* 第6步是异或操作;
|
||||
* 第7步是SM3哈希计算;
|
||||
|
||||
SM2加密的性能主要是由上述7步计算共同决定的,关于SM2椭圆曲线计算,这里不作讨论。第6步异或操作,相对最简单、耗时也最少。第7步SM3哈希计算,其耗时随待加密数据长度增加而增加。我们来看看性能数据:
|
||||
SM2加密的性能主要是由上述7步计算共同决定的,关于SM2椭圆曲线计算,和待加密数据无关,这里可以看作常量,不作讨论。第6步异或操作,相对最简单、耗时也最少。第7步SM3哈希计算,其耗时随待加密数据长度增加而增加。我们来看看性能数据:
|
||||
|
||||
**SM2加密(明文长度不超过32字节,使第5-7步影响最小)**:
|
||||
```
|
||||
@ -22,7 +22,63 @@ BenchmarkLessThan32_SM2-6
|
||||
|
||||
**第5步KDF**:
|
||||
```
|
||||
goos: windows
|
||||
goarch: amd64
|
||||
pkg: github.com/emmansun/gmsm/sm3
|
||||
cpu: Intel(R) Core(TM) i5-9500 CPU @ 3.00GHz
|
||||
BenchmarkKdfWithSM3
|
||||
BenchmarkKdfWithSM3/zLen=32-kLen=32
|
||||
BenchmarkKdfWithSM3/zLen=32-kLen=32-6
|
||||
5110834 232.9 ns/op 32 B/op 1 allocs/op
|
||||
BenchmarkKdfWithSM3/zLen=32-kLen=64
|
||||
BenchmarkKdfWithSM3/zLen=32-kLen=64-6
|
||||
2580963 463.4 ns/op 96 B/op 2 allocs/op
|
||||
BenchmarkKdfWithSM3/zLen=32-kLen=128
|
||||
BenchmarkKdfWithSM3/zLen=32-kLen=128-6
|
||||
1305332 897.0 ns/op 224 B/op 3 allocs/op
|
||||
BenchmarkKdfWithSM3/zLen=64-kLen=32
|
||||
BenchmarkKdfWithSM3/zLen=64-kLen=32-6
|
||||
2992752 399.6 ns/op 32 B/op 1 allocs/op
|
||||
BenchmarkKdfWithSM3/zLen=64-kLen=64
|
||||
BenchmarkKdfWithSM3/zLen=64-kLen=64-6
|
||||
1893337 638.8 ns/op 96 B/op 2 allocs/op
|
||||
BenchmarkKdfWithSM3/zLen=64-kLen=128
|
||||
BenchmarkKdfWithSM3/zLen=64-kLen=128-6
|
||||
1000000 1102 ns/op 224 B/op 3 allocs/op
|
||||
BenchmarkKdfWithSM3/zLen=64-kLen=256
|
||||
BenchmarkKdfWithSM3/zLen=64-kLen=256-6
|
||||
574406 1982 ns/op 480 B/op 4 allocs/op
|
||||
BenchmarkKdfWithSM3/zLen=64-kLen=512
|
||||
BenchmarkKdfWithSM3/zLen=64-kLen=512-6
|
||||
302526 3704 ns/op 992 B/op 5 allocs/op
|
||||
BenchmarkKdfWithSM3/zLen=64-kLen=1024
|
||||
BenchmarkKdfWithSM3/zLen=64-kLen=1024-6
|
||||
155256 7910 ns/op 3296 B/op 7 allocs/op
|
||||
BenchmarkKdfWithSM3/zLen=64-kLen=8192
|
||||
BenchmarkKdfWithSM3/zLen=64-kLen=8192-6
|
||||
19880 60780 ns/op 34272 B/op 13 allocs/op
|
||||
```
|
||||
可以看到当加密数据长度达到8K时,其耗时和完整的加密不超过32字节的耗时**几乎相同**。
|
||||
|
||||
**第7步SM3哈希计算**:
|
||||
```
|
||||
goos: windows
|
||||
goarch: amd64
|
||||
pkg: github.com/emmansun/gmsm/sm3
|
||||
cpu: Intel(R) Core(TM) i5-9500 CPU @ 3.00GHz
|
||||
BenchmarkHash1K
|
||||
BenchmarkHash1K-6
|
||||
418222 2805 ns/op 365.01 MB/s 0 B/op 0 allocs/op
|
||||
BenchmarkHash8K
|
||||
BenchmarkHash8K-6
|
||||
57502 20781 ns/op 394.21 MB/s 0 B/op 0 allocs/op
|
||||
```
|
||||
可以看到当加密数据长度达到8K时,其耗时几乎和达到了加密不超过32字节的耗时的**1/3**。但是,目前SM3的软件实现的优化空间已经不大。
|
||||
|
||||
# KDF软件实现优化分析
|
||||

|
||||
|
||||
针对SM2的KDF,有以下特点:
|
||||
* 输入的比特串Z的长度固定,为64字节,正好为SM3的一个处理块长度。第二个处理块,也是尾块,由ct开头,后续由填充和长度68构成。
|
||||
* klen决定了要调用哈希运算的次数:(klen + v - 1) / v
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user