- 功能型密码算法设计与分析
- 黄欣沂 赖建昌
- 686字
- 2023-11-07 17:24:08
1.6 SM2公钥加密方案
本节介绍我国商用密码SM2公钥加密方案。作为我国的商用密码行业标准(也是国家标准),SM2在区块链、物联网等新领域应用广泛。由于SM2公钥加密方案的安全性分析没有公开,本节主要描述SM2公钥加密方案的构造,不讨论其安全性。方案描述如下:
●SysGen:输入安全参数λ,KGC首先选取密码哈希函数H:{0,1}*→{0,1}z,密钥派生函数KDF:{0,1}*→{0,1}klen,其中klen为加密消息M的比特长度。选择椭圆曲线E的一个基点g,g的阶为p。计算余因子h=#E(Fq)/p,其中E(Fq)为Fq上椭圆曲线E的所有有理点组成的集合。最后输出系统参数SP=(g,p,H,KDF,h)。
●KeyGen:输入系统参数SP,随机选取,作为用户私钥sk,计算pk=gs,作为用户公钥。
●Encrypt:设待加密的明文消息为比特串M,接收者公钥为pk。加密者执行以下运算步骤。
1)选取随机数;
2)计算椭圆曲线点C1=gk=(x1,y1),将C1的数据类型转换为比特串;
3)计算椭圆曲线点S=pkh,若S为无穷远点,则报错并退出;
4)计算椭圆曲线点pkk=(x2,y2),将坐标(x2,y2)的数据类型转换为比特串;
5)计算t=KDF(x2||y2,klen),若t为全0比特串,则返回到第1步;
6)计算C2=M⊕t;
7)计算C3=H(x2||M||y2);
8)输出密文C=C1||C2||C3。
●Decrypt:设待解密密文C=C1||C2||C3,私钥为sk=s,解密者执行以下运算步骤。
1)从C中取出比特串C1,将C1的数据类型转换为椭圆曲线上的点,验证C1是否满足椭圆曲线方程,若不满足则报错并退出;
2)计算椭圆曲线点,若S是无穷远点,则报错并退出;
3)计算,将坐标(x2,y2)的数据类型转换为比特串;
4)计算t=KDF(x2||y2,klen),若t为全0比特串,则报错并退出;
5)从C中取出比特串C2,计算M′=C2⊕t;
6)计算μ=H(x2||M′||y2),从C中取出比特串C3,若μ≠C3,则报错并退出;
7)输出明文M′。