1.6 SM2公钥加密方案

本节介绍我国商用密码SM2公钥加密方案。作为我国的商用密码行业标准(也是国家标准),SM2在区块链、物联网等新领域应用广泛。由于SM2公钥加密方案的安全性分析没有公开,本节主要描述SM2公钥加密方案的构造,不讨论其安全性。方案描述如下:

SysGen:输入安全参数λ,KGC首先选取密码哈希函数H:{0,1}*→{0,1}z,密钥派生函数KDF:{0,1}*→{0,1}klen,其中klen为加密消息M的比特长度。选择椭圆曲线E的一个基点gg的阶为p。计算余因子h=#EFq)/p,其中EFq)为Fq上椭圆曲线E的所有有理点组成的集合。最后输出系统参数SP=(gpH,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=Mt

7)计算C3=Hx2||M||y2);

8)输出密文C=C1||C2||C3

Decrypt:设待解密密文C=C1||C2||C3,私钥为sk=s,解密者执行以下运算步骤。

1)从C中取出比特串C1,将C1的数据类型转换为椭圆曲线上的点,验证C1是否满足椭圆曲线方程,若不满足则报错并退出;

2)计算椭圆曲线点,若S是无穷远点,则报错并退出;

3)计算,将坐标(x2y2)的数据类型转换为比特串;

4)计算t=KDF(x2||y2,klen),若t为全0比特串,则报错并退出;

5)从C中取出比特串C2,计算M′=C2t

6)计算μ=Hx2||M′||y2),从C中取出比特串C3,若μC3,则报错并退出;

7)输出明文M′。