SM2 研究

本文介绍了椭圆曲线加密(ECC)的基本原理,包括其背后的数学基础——群论,以及如何利用离散对数问题实现数据加密。通过对比RSA,解释了ECC的安全性和效率优势,并给出了SM2和secp256k1两个具体实现的例子。
摘要由CSDN通过智能技术生成

文章目录

椭圆曲线

加密算法 具有一个特征, 正向容易,逆向困难
比如 RSA, 基于大整数因子分解难题 , 大致理解如下:

y = x ∗ k y=x * k y=xk

正向: 已知 x 和 k, 求解 y。 非常容易
逆向: 已知 y, 将 y 质因式分解成 x 和 k。非常困难


比如 ECC, 基于离散对数求解难题, 大致理解如下:

y = log ⁡ x k y = \log_{x} {k} y=logxk

正向: 已知 x 和 k, 求解 y。 非常容易
逆向: 已知 y和x, 求解 k = log ⁡ x y k = \log_{x} {y} k=logxy。 非常困难


RSA key size (bits)ECC key size (bits)
1024160
2048224
3072256
7680384

y 2 = x 3 + a x + b y^2 = x^3 + a x + b y2=x3+ax+b
4 a 3 + 27 b 2 ≠ 0 4a^3 + 27b^2 \neq 0 4a3+27b2=0

椭圆曲线在线画图
y 2 = x 3 + 7 椭圆曲线 y^2 = x^3 + 7 椭圆曲线 y2=x3+7椭圆曲线
在这里插入图片描述
看到该曲线,一脸懵逼,咋就成为数据加密的基石;深入了解发现,椭圆曲线加密有两点比较重要,第一点 加密是基于群论分析的, 第二点 计算机只能处理整数,是离散的。

群论整数

在数学中,群(group)是由一种集合以及一个二元运算所组成的代数结构,并且符合“群公理”。群公理包含下述四个性质,分别是封闭性、结合律、单位元和对于集合中所有元素存在逆元素。

  • 封闭性
    若 a ∈ G , b ∈ G ,那么 a ⋅ b ∈ G 若 a \in \mathbb{G} , b \in \mathbb{G}, 那么 a \cdot b \in \mathbb{G} aG,bG,那么abG
  • 结合性
    ( a ⋅ b ) ⋅ c = a ⋅ ( b ⋅ c ) (a \cdot b )\cdot c = a \cdot (b \cdot c) abc=abc
  • 单位元
    存在单位元 e ,使得 a ⋅ e = a ⋅ e = a 存在单位元 e, 使得 a\cdot e=a\cdot e=a 存在单位元e,使得ae=ae=a
  • 逆元
    对于任意 a ∈ G ,存在 b ∈ G ,使得 a ⋅ b = e ,则 a 和 b 互为逆元,记 a = b − 1 , b = a − 1 对于任意 a \in \mathbb{G},存在 b \in \mathbb{G},使得 a \cdot b = e,则a 和b 互为逆元, 记 a=b^{-1} , b=a^{-1} 对于任意aG,存在bG,使得ab=e,则ab互为逆元,记a=b1b=a1

  • 交换律
    a ⋅ b = b ⋅ a a \cdot b = b \cdot a ab=ba

整数集 就是一个阿贝尔群, 单位元是 0;

在这里插入图片描述在这里插入图片描述在这里插入图片描述
椭圆曲线集合做一个扩充,引入一个“特殊”的点,这个点叫“无穷远点”,记作 ∞ \infty ,当作单位元; 椭圆曲线上的阿贝尔群定义。 证明可参考这篇文章

因为
P ⋅ Q ⋅ R = ∞ P \cdot Q \cdot R = \infty PQR=
R ⋅ − R ⋅ ∞ = ∞ R \cdot -R \cdot \infty = \infty RR=
那么
P ⋅ Q ⋅ R = R ⋅ − R = > P ⋅ Q = − R P \cdot Q \cdot R = R \cdot -R => P \cdot Q = - R PQR=RR=>PQ=R

基于P 的切线与椭圆曲线的交点的逆元为 R 1 ( 2 P ) R_{1}(2P) R1(2P)
P ⋅ P = R 1 P \cdot P = R_{1} PP=R1
在这里插入图片描述

基于P和 R 1 R_{1} R1的直线与椭圆曲线的交点的逆元为 R 2 ( 3 P ) R_{2}(3P) R2(3P)
P ⋅ R 1 = R 2 = > P ⋅ 2 P = R 2 P \cdot R_{1}= R_{2} => P \cdot 2P = R_{2} PR1=R2=>P2P=R2

在这里插入图片描述

基于P和 R 2 R_{2} R2的直线与椭圆曲线的交点的逆元为 R 3 ( 4 P ) R_{3}(4P) R3(4P) 或 基于 R 1 ( 2 P ) R_{1}(2P) R1(2P) 的切线与椭圆曲线的交点的逆元为 R 3 ( 4 P ) R_{3}(4P) R3(4P)
在这里插入图片描述在这里插入图片描述
P ⋅ R 2 = R 3 = > P ⋅ 3 P = R 3 P \cdot R_{2}= R_{3} => P \cdot 3P = R_{3} PR2=R3=>P3P=R3
R 1 ⋅ R 1 = R 3 = > 2 P ⋅ 2 P = R 3 R_{1} \cdot R_{1}= R_{3} => 2P \cdot 2P = R_{3} R1R1=R3=>2P2P=R3

那么对于基点 G \mathbb{G} G,乘法定义
Q = k G Q = k \mathbb{G} Q=kG

对于计算机,更希望研究整数,即针对有限域 F \mathbb{F} F的离散数学; 对此,非常佩服密码学家的想象力,将点收敛到某个素数 p p p的有限域 F p \mathbb{F}_{p} Fp (⚠️ ≡ \equiv 符号表示 “同余")

{ ( x , y ) ∈ F p 2 ∣ y 2 ≡ x 3 + a x + b ( m o d p ) , ( 4 a 3 + 27 b 2 ≢ 0 ( m o d p ) ) } ∪ { ∞ } \left\{ (x,y) \in \mathbb{F}_{p}^2 \mid y^2 \equiv x ^3 + ax + b \pmod{p} ,(4a^3 + 27b^2 \not\equiv 0 \pmod{p}) \right\} \cup \left\{ \infty \right\} {(x,y)Fp2y2x3+ax+b(modp)(4a3+27b20(modp))}{}

那么已知 Q 和 G Q和G QG 求解 k k k难度更加困难,因为存在 n P = ∞ nP = \infty nP=
Q = k G Q = k \mathbb{G} Q=kG

在这里插入图片描述

1 P 1P 1P 2 P 2P 2P 3 P 3P 3P 4 P 4P 4P n P = ∞ nP = \infty nP=
( n + 1 ) P = 1 P (n+1)P=1P (n+1)P=1P ( n + 2 ) P = 2 P (n+2)P=2P (n+2)P=2P ( n + 3 ) P = 3 P (n+3)P=3P (n+3)P=3P ( n + 4 ) P = 4 P (n+4)P=4P (n+4)P=4P ( n + n ) P = ∞ (n+n)P=\infty (n+n)P=
( 2 n + 1 ) P = 1 P (2n+1)P=1P (2n+1)P=1P ( 2 n + 2 ) P = 2 P (2n+2)P=2P (2n+2)P=2P ( 2 n + 3 ) P = 3 P (2n+3)P=3P (2n+3)P=3P ( 2 n + 4 ) P = 4 P (2n+4)P=4P (2n+4)P=4P ( 2 n + n ) P = ∞ (2n+n)P=\infty (2n+n)P=

这样的集合称之为循环子群, n n n为该子群阶, P P P是子群的基点。

有限域 F p \mathbb{F}_{p} Fp群的阶是群中元素的个数,Schoof算法快速求解。子群的阶一定是父群阶的一个因子。假设父群的阶是N,子群的阶是n,那么h=N/n一定是一个整数,h被称为子群的余因子

因此,对于椭圆曲线加密算法, G , a , b , p , n , h \mathbb{G},a,b,p,n,h Gabpnh 参数是确定的

SM2

sm2p256v1
p  = 0xFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF
a  = 0xFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC
b  = 0x28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93
xG = 0x32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7
yG = 0xBC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0
n  = 0xFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123
h  = 1
secp256k1
p  = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
a  = 0
b  = 7
xG = 0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
yG = 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8
n  = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
h  = 1

参考

通俗易懂一些 https://www.jianshu.com/p/5b04b66a55a1
深入理解一些 https://www.cnblogs.com/math/p/discrete-log.html
详细一些 https://www.ruanx.net/elliptic-curve/
外文推荐阅读 https://andrea.corbellini.name/2015/05/17/elliptic-curve-cryptography-a-gentle-introduction/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cugriver

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值