一、实验目的
SM2加密与解密算法与实现
(1)按照有效的椭圆曲线参数生成椭圆曲线
(2)掌握 SM2加密与解密算法原理
(3)将字符串明文转换为比特串格式之间转换,能够将有意义的消息 转换为比特串进行加密,并将解密的结果还原为字符串
硬件:运行 Windows 操作系统的计算机
软件:Python
二、方案设计
背景
SM2算法是中国国家密码管理局(CNCA)发布的一种基于椭圆曲线的非对称加密算法。它采用椭圆曲线密码体系(Elliptic Curve Cryptography,ECC)进行密钥交换、数字签名和公钥加密等功能。SM2算法包括SM2-1椭圆曲线数字签名算法、SM2-2椭圆曲线密钥交换协议和SM2-3椭圆曲线公钥加密算法,分别用于实现数字签名、密钥协商和数据加密等功能。
SM2算法于2010年12月17日首次公开发布,并在2012年成为中国商用密码标准(标准号为GM T 0003—2012),2016年成为中国国家密码标准。该算法的安全性基于椭圆曲线离散对数难题,具有较小的密钥长度、更快的运算速度和更高的安全性,相对于RSA算法具有显著优势。
原理
1.椭圆曲线
椭圆曲线不是椭圆,之所以叫椭圆曲线,是因为其表达式和计算椭圆周长的积分表达式有相似之处,这就是椭圆曲线名称的由来。椭圆周长的积分表达式为:
其中,E(x)是x的三次或四次多项式。
Weierstrass型椭圆曲线是在椭圆曲线密码体制中的一种最常用的曲线:
j称为不变量,当俩条椭圆曲线相同时,则它们同构。
通过变量置换:
得到常用仿射坐标方程简化形式:
判别式为:
2.椭圆曲线离散对数问题(ECDLP)
给定定义在有限域Fp上的椭圆曲线E,及E上的一个n阶点G,和另一点Q,如果存在k,0<k<n-1,使Q=kG,则称k是Q的以G为基的离散对数。
由k和G,求Q容易。
由G和Q,求k困难。
ECC就是建立在求解相应加法群中ECDLP困难基础上的。
3.SM2算法
SM2-算法-密钥生成算法
(1)选择随机整数 。
(2)以G为基点,计算点 。
(3)密钥是,其中d是私钥,P是公钥。
SM2-算法-加密算法
设需要发送的明文为比特串M,klen为M的比特长度。用户A获得用户B的公钥后:
(1)选择随机数 。
(2)计算椭圆曲线点,并将
的数据类型转换为比特串。
(3)计算椭圆曲线点(ℎ为余因子,
为椭圆曲线
的阶,n 是基点G的阶),若S是无穷远点,则报错并退出。
(4)否则计算椭圆曲线点,并将坐标
的数据类型转换为比特
串。
(5)计算,若t为全0比特串,则回退至步骤(1)。
(6)否则计算、
。
(7)输出密文。
SM2-算法-解密算法
用户B用自身的私钥对密文
解密,设klen为密文中
的比特长度:
(1)从C中取出比特串C_1,将C_1的数据类型转换为椭圆曲线上的点,验证是否满足
椭圆曲线方程,若不满足,则报错并退出。
(2)否则计算椭圆曲线点S=[ℎ]C_1,若S是无穷远点,则报错并退出。
(3)否则计算[d_B]C_1=(x_2,y_2),并将坐标x_2、y_2的数据类型转换成比特串。
(4)计算t=KDF(x_2||y_2, klen) ,若t为全0比特串,则报错并退出。
(5)否则从C中取出比特串C_2,计算M^′=C_2⊕t 。
(6)计算u=Hash(x_2||M^′ ||y_2),从C中取出比特串C_3,若u≠C_3,则报错并退出。
(7)否则输出明文M^′=C_2⊕t。