SM2椭圆曲线公钥密码算法

一、实验目的

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.椭圆曲线

        椭圆曲线不是椭圆,之所以叫椭圆曲线,是因为其表达式和计算椭圆周长的积分表达式有相似之处,这就是椭圆曲线名称的由来。椭圆周长的积分表达式为:

\int \frac{dx}{\sqrt{E(x)}}

其中,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)选择随机整数  d\in [1,n-2] 。

(2)以G为基点,计算点  P=(x_{P},y_{P})=[d]G

(3)密钥是(d,P),其中d是私钥,P是公钥。

SM2-算法-加密算法

设需要发送的明文为比特串M,klen为M的比特长度。用户A获得用户B的公钥P_{B}后:

                (1)选择随机数  k\in[1,n-1]

                (2)计算椭圆曲线点C_{1}=[k]G=(x_{1},y_{1}),并将C_{1}的数据类型转换为比特串。

                (3)计算椭圆曲线点S=[h]P_{B}(ℎ为余因子,h=\varphi E(F_{q})/n,\varphi E(F_{q})为椭圆曲线

                         E(F_{q}) 的阶,n 是基点G的阶),若S是无穷远点,则报错并退出。

                (4)否则计算椭圆曲线点[k]P_{B}=(x_{2},y_{2}),并将坐标(x_{2},y_{2})的数据类型转换为比特

                        串。

                (5)计算t=KDF(x_{2}||y_{2},klen),若t为全0比特串,则回退至步骤(1)。

                (6)否则计算C_{2}=M\bigoplus tC_{3}=Hash(x_{2}||M||y_{2}) 。

                (7)输出密文C=C_{1}||C_{2}||C_{3}

SM2-算法-解密算法

用户B用自身的私钥d_{B}对密文C=C_{1}||C_{2}||C_{3}解密,设klen为密文中C_{2}的比特长度:

                (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。

 三、方案实现

1.SM2加密算法

1.1 流程图

SM2椭圆曲线公钥密码算法是我国自主设计的公钥密码算法,用于实现数字签名、密钥交换和数据加密等功能。相比于RSA算法SM2算法基于椭圆曲线上点群离散对数难题,具有更高的密码强度。\[1\] 关于SM2算法的移植,目前已经在我国的密码应用领域得到广泛应用。国家密码管理局于2011年发布了《关于做好公钥密码算法升级工作的通知》,要求在建和拟建公钥密码基础设施电子认证系统和密钥管理系统中使用SM2算法。同时,自2011年7月1日起,投入运行并使用公钥密码的信息系统也应使用SM2算法。\[2\] SM2算法的移植工作主要包括将算法应用到相应的系统和设备中,并确保其安全性和性能。移植过程中需要考虑算法的实现细节、密钥管理、算法性能优化等方面的问题。同时,还需要进行相关的测试和验证,确保移植后的算法能够正常运行并满足安全需求。 总之,SM2椭圆曲线公钥密码算法已经在我国得到广泛应用,并且有相关的政策要求在密码应用系统中使用该算法。移植工作需要考虑算法的实现和性能优化,并进行相应的测试和验证。\[1\]\[2\] #### 引用[.reference_title] - *1* *2* *3* [sm2国密算法的纯c语言版本,使用于单片机平台(静态内存分配)](https://blog.youkuaiyun.com/qq8864/article/details/100582268)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值