YCrypt——国密算法高性能实现
YCrypt 是一个高性能的国密算法库,实现了 SM2 椭圆曲线公钥密码算法、SM3 密码杂凑算法和 SM4 分组密码算法。该项目由郁昱教授团队(上海交通大学 、上海期智研究院)和李卷孺研究员团队(华东师范大学)共同开发维护,致力于提供自主可控、安全高效的国密算法实现,为国密应用提供完整的解决方案。
YCrypt 在性能上表现优异,领先于国内外开源国密实现,在 2024 年金融密码杯第二阶段赛事中荣获最高奖 —— 一等奖。
主要特性
- 高性能实现:针对 SM2/SM3/SM4 算法进行深度优化,性能领先
- 标准合规:严格遵循国家密码管理局发布的 GM/T 系列标准
- 跨平台支持:支持 x86-64、ARM 等主流平台架构
- 易于集成:提供简洁清晰的 API 接口,方便快速集成
- 全面测试:包含完整的测试用例和性能基准测试
版本
| Version | YCrypt-std | YCrypt-adv |
|---|---|---|
| SM2 | ✅ | ✅ |
| SM3 | ✅ | ✅ |
| SM4 | ✅ | ✅ |
| Features | 跨平台/架构,兼容性强 | 针对 x64、ARM 等架构进行定制化高性能优化 |
| Source Code | Github、Gitee | 如需高级版本支持,请联系我们 |
性能测试环境
| Platform | CPU | OS |
|---|---|---|
| X86 | AMD Ryzen5 9600x | Debian 12 |
| Library | Branch/Version |
|---|---|
| YCrypt | master |
| Tongsuo | 8.4-master |
| GmSSL | master |
| OpenSSL | 3.0.15 |
SM2算法
SM2签名算法涉及到三个核心部分:大数运算、有限域运算以及椭圆曲线运算。我们使用扩展指令集对这些关键运算进行优化,使用汇编代码实现,以此提高了寄存器利用率、减少了冗余指令和内存读写开销;另外我们针对SM2算法参数,选取了更高效的模运算和椭圆曲线算法。最终大幅提高了SM2签名/验签在X86/64和ARM下的性能。
| YCrypt | Tongsuo | GmSSL | OpenSSL | |
|---|---|---|---|---|
| SM2 sign | 140982.5 | 22260.6 | 8671.2 | 5567.0 |
| SM2 verify | 23202.6 | 10848.1 | 1937.2 | 5977.5 |
SM3算法
SM3杂凑算法的实现主要包括消息填充、消息扩散和消息压缩三个主要部分。SM3杂凑算法的性能瓶颈在于消息扩散和消息压缩过程,因此我们对这两个过程进行了优化,从而提升了运行速度。
| YCrypt | Tongsuo | GmSSL | OpenSSL | |
|---|---|---|---|---|
| SM3 | 722 | 512 | 692 | 661 |
YCrypt还支持SM3算法的4路并行、8路并行和16路并行,其中SM3x4为1330.8MB/s, SM3x8为2499.3MB/s,SM3x16为4391.6MB/s。
SM4算法
本团队实现了多种提高SM4算法运算效率的思路和方法。其中包括使用SIMD硬件扩展指令集做并行优化以及基于比特切片技术的快速软件实现,以达到SM4分组密码算法的最优效率。
| YCrypt | Tongsuo | GmSSL | OpenSSL 3.5.0-dev | |
|---|---|---|---|---|
| SM4 | 7774.1 | 201 | 250 | 219 |
| SM4_CTR | 7232.0 | 192 | 246 | 193 |
高性能 SM4 算法最高可支持 64 个 blocks 并行
其他平台测试结果
| Platform | CPU | OS |
|---|---|---|
| Android | 第三代骁龙8 3.3GHz 8核 | Xiaomi HyperOS 1.0.42.0.UNCCNXM |
| Algorithm | Android | |
|---|---|---|
| SM2 (times/s) | Sign | 38581 |
| Verify | 7463 | |
| SM3 (MB/s) | SM3 | 505.8 |
| SM3 HMAC | 505.6 | |
| SM4 (MB/s) | SM4_ECB | 5098.9 |
| SM4_CTR | 3723.2 | |