Updated SM2加解密性能 (markdown)

Sun Yimin 2024-05-19 10:14:53 +08:00
parent 5d09055612
commit de3cbb2e08

@ -89,6 +89,21 @@ BenchmarkHash8K-6
# 关于SM3基于SIMD的多路并行 # 关于SM3基于SIMD的多路并行
目前已经有好多基于SIMD的哈希算法实现MD5SHA256也包括SM3。通用SIMD多路并行设计实现的难点在于输入、输出协调处理象**SM2-KDF**这种应用场景是最简单的处理的数据块数相同数据源单一。预测当待加密数据足够长的情况下SM2加密性能能赶上甚至超过无SM4-NI的SM4-CBC的性能。接下来会做一些实验性实现观察一下效果。 目前已经有好多基于SIMD的哈希算法实现MD5SHA256也包括SM3。通用SIMD多路并行设计实现的难点在于输入、输出协调处理象**SM2-KDF**这种应用场景是最简单的处理的数据块数相同数据源单一。预测当待加密数据足够长的情况下SM2加密性能能赶上甚至超过无SM4-NI的SM4-CBC的性能。接下来会做一些实验性实现观察一下效果。
# 关于密文格式C1C2C3和C1C3C2
C1C2C3更适合加密流式处理
* 用公钥生成Encrypter。
* 生成随机数和点C1随之生成Z初始化KDFCOUNTER及HASH(Z)输出C1点。
* XOR Stream输出部分密文C2同时计算C3也就是认证码。
* Finalize输出最终C3值。
解密过程:
* 用私钥生成Decrypter。
* 读入至少96字节生成C1随之生成Z初始化KDFCOUNTER及HASH(Z))。
* XOR Stream, 输出部分明文同时计算C3'。这一步要特殊处理缓冲区中至少保留32字节。
* Finalize如果缓冲区数据长度超过32字节则先对多出部分继续进行XOR stream动作计算最终C3'和缓冲区中的最后32字节进行比较相等则返回成功否则失败。
由此可见解密时C1C2C3比C1C3C2复杂一点但C1C3C2做不到流式加密。当然如果我们严格按照SM2非对称加密设计的初衷只对少量数据进行加解密则各种格式都没什么问题。
# 结论 # 结论
经过KDF共享Z状态优化后 经过KDF共享Z状态优化后
``` ```