本项目是对sm-crypto(JavaScript实现)算法的其他语言实现,主要目的是同步其加密和解密接口。
计划中的实现语言,以及其目前各自的实现情况如下:
| 语言 | SM2算法 | SM3算法 | SM4算法 |
|---|---|---|---|
Rust |
|
||
Python |
|||
Go |
|||
Nim |
SM2算法的实现均仅供学习使用。
SM2算法的实现均仅供学习使用。
Rust实现使用了num-bigint库并非为了密码学设计,其
- 没有常数时间保证,易受定时攻击;
- 内部可能存在内存分配模式可观察性,易受侧信道攻击;
- 不提供随机化缓解措施,易受故障注入攻击;
- 缺少密码学必要的安全性检查,未实现标准化的随机数生成(目前使用
rand库而非符合密码学标准的RNG)。
如果需要在生产中使用SM2,建议选择如下实现:
- ……
sm2实现了SM2的常数级别的椭圆曲线运算,但没有实现加解密、签名和验签。
对于各语言的模块调用示例,请参考各语言的文件夹中的tests测试示例。
- 原项目地址:
sm-crypto - 原作者主页:
JuneAndGreen