首页 > 编程语言 >SM2 - 公钥加密算法

SM2 - 公钥加密算法

时间:2024-10-23 16:20:41浏览次数:7  
标签:公钥 比特 曲线 klen SM2 椭圆 计算 Ha 加密算法

符号
A,B:使用公钥密码系统的两个用户。
\(a,b\):\(F_q\)中的元素,他们定义\(F_q\)上的一条椭圆曲线\(E\)。
\(d_B\):用户B的私钥。
\(E⁡(F_q )\):\(F_q\)上椭圆曲线\(E\)的所有有理点(包括无穷远点\(O\))组成的集合。
\(F_q\):包含\(q\)个元素的有限域。
\(G\):椭圆曲线的一个基点,其阶为素数。
\(Hash()\):密码杂凑函数。
\(H_v ()\):消息摘要长度为\(v\)比特的密码杂凑函数。
\(KDF()\):密钥派生函数。
\(M\):待加密的消息。
\(M'\):解密得到的消息。
\(n\):基点\(G\)的阶(\(n\)是\(♯⁡E⁡(F_q )\)的素因子)。
\(O\):椭圆曲线上的一个特殊点,称为无穷远点或零点,是椭圆曲线加法群的单位元。
\(P_B\):用户B的公钥。
\(q\):有限域\(F_q\)中元素的数目。
\(x‖y\):\(x\)与\(y\)的拼接,其中\(x\)和\(y\)是比特串或字节串。
\([k]P\):椭圆曲线上点\(P\)的\(k\)倍点,即:\(\lbrack k\rbrack P = \underset{k\text{个}}{\underbrace{P + P + \cdots + P}}\),其中\(k\)是正整数。
\([x,y]\):大于或等于\(x\)且小于或等于\(y\)的整数的集合。
\(⌈x⌉\):顶函数,大于或等于\(x\)的最小整数。例如,\(⌈7⌉=7\),\(⌈8.3⌉=9\)。
\(⌊x⌋\):底函数,小于或等于\(y\)的最大整数。例如,\(⌊7⌋=7\),\(⌊8.3⌋=8\)。
\(♯⁡E⁡(F_q )\):\(E⁡(F_q )\)上点的数目,称为椭圆曲线\(E⁡(F_q )\)的阶。

密钥派生函数
设密码杂凑函数为\(H_v ()\),其输出是长度为\(v\)比特的杂凑值。
密钥派生函数\(KDF⁡(Z,klen)\):
输入:比特串\(Z\),整数\(klen\)(表示要获得的密钥数据的比特长度,要求该值小于\((2^{32}-1)v\))。
输出:长度为\(klen\)的密钥数据比特串\(K\)。

  1. 初始化一个32比特构成的计数器\(ct=\mbox{0x}00000001\);
  2. 对\(i\)从\(1\)到\(⌈klen⁄v⌉\)执行:
    2.1. 计算\(Ha_i=H_v⁡(Z‖ct)\);
    2.2. \(ct++\);
  3. 若\(klen⁄v\)是整数,令\(Ha!_{⌈klen⁄v⌉}=Ha_{⌈klen⁄v⌉}\),否则令\(Ha!_{⌈klen⁄v⌉}\)为\(Ha_{⌈klen⁄v⌉}\)最左边的\((klen-(v×⌊klen⁄v⌋))\)比特;
  4. 令\(K=Ha_1 ‖Ha_2 ‖⋯‖Ha_{⌈klen⁄v⌉-1} ‖Ha!_{⌈klen⁄v⌉}\)。

加密算法
设需要发送的消息为比特串\(M\),\(klen\)为\(M\)的比特长度。
为了对明文\(M\)进行加密,作为加密者的用户A应实现以下运算步骤:

  1. 用随机数发生器产生随机数\(k∈[1,n-1]\);
  2. 计算椭圆曲线点\(C_1=[k]G=(x_1,y_1 )\);
  3. 计算椭圆曲线点\(S=[h] P_B\),若\(S\)是无穷远点,则报错并退出;
  4. 计算椭圆曲线点\([k] P_B=(x_2,y_2 )\);
  5. 计算\(t=KDF⁡(x_2 ‖y_2,klen)\),若\(t\)为全0比特串,则返回步骤1;
  6. 计算\(C_2=M⊕t\);
  7. 计算\(C_3=Hash⁡(x_2 ‖M‖y_2 )\);
  8. 输出密文\(C=C_1 ‖C_2 ‖C_3\)。

解密算法
设\(klen\)为密文中\(C_2\)的比特长度。
为了对密文\(C=C_1 ‖C_2 ‖C_3\)进行解密,作为解密者的用户B应实现以下运算步骤:

  1. 从\(C\)中取出比特串\(C_1\),验证\(C_1\)是否满足椭圆曲线方程,若不满足则报错并退出;
  2. 计算椭圆曲线点\(S=[h] C_1\),若\(S\)是无穷远点,则报错并退出;
  3. 计算\([d_B ] C_1=(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'\)。

注:观察加密算法的步骤4与解密算法的步骤3,有如下等式成立

\([k] P_B=[kd_B ]G=(x_2,y_2 )=[d_B k]G=[d_B ] C_1\)
,所以加密算法的步骤5与解密算法的步骤4,可以计算出相同的\(t\)。




参考
GM/T 0003.4—2012

标签:公钥,比特,曲线,klen,SM2,椭圆,计算,Ha,加密算法
From: https://www.cnblogs.com/miro-cnblogs/p/18496652

相关文章

  • SM2 - $F_{2^m}$
    1符号和缩略语\(a,b\):\(F_q\)中的元素,它们定义\(F_q\)上的一条椭圆曲线\(E\)。\(E\):有限域上由\(a\)和\(b\)定义的一条椭圆曲线。\(E⁡(F_q)\):\(F_q\)上椭圆曲线\(E\)的所以有理点(包括无穷远点\(O\))组成的集合。\(F_p\):包含\(p\)个元素的素域。\(F_q\):包含\(q\)个元素的有限......
  • 通过已知明文攻击破解弱加密算法
    样本分析日志实习期间在微步沙箱上找到一个样本,其SHA256:36c3405eafd9bdb4c6dd0ca98a2a4779ab34b8777a36b38347316f09109a87e6,在沙箱上检测为木马。通过分析发现该样本总共分为三个阶段:第一阶段的逻辑是先检查当前路径,然后自复制到公共目录并运行,最后从远程FTP服务器上下载第二......
  • 基于拉格朗日插值多项式的Shamir's Secret Sharing 加密算法
    Shamir'sSecretSharing是一种加密算法,由AdiShamir于1979年提出,旨在将一个秘密(如密码、密钥等)分割成多个部分,并分发给不同的参与者。只有当足够数量的参与者(大于等于一个特定的阈值)将他们的份额组合在一起时,秘密才能恢复。少于阈值数量的参与者无法得到任何有用的信息。核心......
  • SM2268XT2量产工具找到了,SM2268XT2量产工具下载,支持B58R闪存颗粒开卡,SM2268XT2开卡工
    前一阵买了一个固态硬盘,主控是SM2268XT2,闪存颗粒是B58R的,由于自己之前量产过SM2263XT主控,所以这次也想玩一下量产。找了半天,才发现这个主控目前还没有公开的SM2268XT2量产工具下载。就在快要放弃的时候,在网上查到量产部落发布了慧荣SM2268XT2主控支持YMTC_WDS闪存的量产工具,......
  • H3C交换机SSH使用RSA公钥免密登录配置
    1.使用puttygen.exe计算RSA 2.保存公钥和私钥公钥:pub.key  注意:公钥上传到交换机(FTP等方式)。私钥:private.ppk3.配置交换机<Switch>system-view[Switch]public-keylocalcreatersaTherangeofpublickeysizeis(512~2048).Ifthekeymodulusisgreatert......
  • 【php加密算法】加密算法举例
    原创php中文网课程PHP是一种广泛使用的服务器端脚本语言,用于开发动态网页和应用程序。在PHP中,加密算法是保护数据安全和隐私的重要组成部分。PHP提供了多种加密算法,用于加密和解密数据。本文将介绍一些常用的PHP加密算法。MD5算法:MD5(MessageDigestAlgorithm5)是一种广泛使......
  • 全同态加密算法概览
    我们前面有谈到《Paillier半同态加密算法》,半同态加密算法除了支持密文加法运算的Paillier算法,还有支持密文乘法计算的RSA算法,早期的PSI(隐私求交)和PIR(匿踪查询)都有使用基于RSA盲签名技术来实现。今天我们来谈谈能够有效支持任意函数密文计算的全同态加密算法(fully......
  • SM2244LT量产工具经验分享,SM2244LT量产工具下载,SM2244LT开卡教程
    一、注意事项1、个人观点,仅供参考2、开卡后无法恢复数据二、开卡前的准备1、坏固态硬盘一个(确认主控芯片是慧荣SM2244LT)2、尖头镊子(细铜线、铁丝等能导电的金属都行,塑料的不行)3、一台电脑(可以是笔记本或台式机,台式机最好不要用后置USB)4、转接卡(可以是开卡板、硬盘盒等,建......
  • 混合密码系统——用对称密钥提高速度,用公钥密码保护会话密钥
    混合密码系统(HybridCryptosystem)是一种结合了多种密码学技术和算法的加密方案,旨在充分利用不同密码算法的优势,以提供更强大的安全性、更高的效率或更好的功能特性。以下是对混合密码系统的详细解释:组成要素对称加密算法特点与作用:对称加密算法使用相同的密钥进行加密和......
  • 七彩虹SL300固态硬盘不认盘修复,SM2256K量产工具,支持AD,3A,18,A3,61,25颗粒H27QFG8PDM
    固态硬盘里采用慧荣主控的品牌很多,其中常见的慧荣主控型号有SM2246XT、SM2256K、SM2258XT、SM2259XT、SM2259XT2、SM2259XT3、SM2263XT等等,这些主控的固态硬盘要是坏了,在保质期里的可以返厂维修,如果过保了,我们还是有办法自己修复的,方法就是从量产部落下载量产工具,用量产工具来......