数据加密
Andrew Parno(讨论 | 贡献)2024年4月22日 (一) 07:00的版本
在典枢中,使用ECIES(Elliptic Curve Integrate Encrypt Scheme)方法对数据进行加密。ECIES加密可以认为是先基于ECDH(Elliptic Curve Diffie–Hellman key exchange)协商密钥,再用协商一致的密钥进行对称加密,这样能够结合非对称加密和对称加密的优点。
加密参数
典枢使用的ECIES包括两种标准,第一种标准命名为stdeth,第二种标准名为为gmssl。 每种标准都包括三个参数,即椭圆曲线,散列算法,对称加密算法。需要注意的是,即使这三个参数是一致的,实现上的差异依然会带来差别,例如ECDH中密钥的生成算法,此处不详细描述。
stdeth
这是默认选项。在这种标准下的参数选择如下:
- 椭圆曲线:specp256k1
- 散列算法:keccak256
- 对称加密算法:Rijndael128GCM
gmssl
这是支持国密版本的选择。
- 椭圆曲线:SM2
- 散列算法:SM3
- 对称加密算法:SM4
加密格式
无论采用哪种加密标准,加密后的格式都是确定的。假设原文为m,相应的密文为M,加密后的数据格式为 M || public_key || mac,其中public_key为公钥,mac为校验码。 在上述两种标准中,public_key的长度为64字节(一个可能的优化方式是采用压缩的公钥,其长度为33字节),mac的长度为16字节。
代码实现
相关的代码实现有两个,一个是基于JavaScript实现的meta-encryptor,另一个是基于C++实现的YeeZ-Privacy-Computing。