【区块链与密码学】第6-4讲:椭圆曲线的数字签名算法1985年,Koblitz和Miller独立地提出了椭圆曲线公钥密码体制(ECC),安全性基于椭圆曲线群上go语言椭圆曲线点乘运算的离散对数问题的难解性,该问题目前最好的解法是指数级时间的算法 。
一般认为,RSA和DH密钥交换协议需用1024比特以上的模数才安全 , 但对ECC,只要160比特的模数就可达到同样级别的安全性 。
椭圆曲线指的是由Weierstrass方程
所确定的曲线
有限域Fp上的椭圆曲线是由满足Fp上的方程
的所有点和无穷远点 O 构成的集合
有时也记作 E 。
设 P,Q 是E上的任意两点 , 连接 P , Q 交 E 于 R’ ,则称 R’ 关于x轴的对称点 R 为 P 与 Q 的和 , 记为go语言椭圆曲线点乘运算:
PQ = R
当 P 与 Q 重合时
R = P Q = P P = 2P
此时称之为 点倍运算
当 P 与 Q 关于x轴对称时,
定义 P 与 Q 的和为 O ,即:
PQ = O
并称 O 为无穷远点
可以证明,有限域上的椭圆曲线在go语言椭圆曲线点乘运算我们定义的加法运算下构成群 。
既然构成群,就必然有零元和负元 , 这里的零元就为无穷远点 O , P 的负元就是它关于x轴的对称点,记为 –P。
显然有
P O =O P=P
若P=(x, y),则 –P=(x, –y) 且 P (–P)=O
已知 E(F) 上两点 P=(x1, y1), Q=(x2, y2) , 求 P Q。
解:设 P Q=R =(x3, y3) ,
解得
当 P≠Q 时,
当 P=Q 时 ,
k(k2) 个相同的点 P 相加为
此时称之为点乘运算
设
称n为点 P 的阶,记为 n=ord(P)。
由阶为n的点 P 在上述加法定义下生成的循环群 P 是椭圆曲线群 (E(F),) 的一个n阶子群 。
设E是有限域 F 上的椭圆曲线,G 是 E 的一个循环子群,点 P 是 G 的一个生成元,即 G={kP: k≥1},在已知 P , Q 的条件下,求解整数n , 使得 nP=Q 的问题,称为椭圆曲线 E 上的离散对数问题 。
今天的课程就到这里啦,下一堂课我们将学习基于椭圆曲线的数字签名算法中的SM2算法,带大家继续了解数字签名 , 敬请期待go语言椭圆曲线点乘运算!
-- 完 --
关注点宽学园,每周持续更新区块链系列课程,小宽带go语言椭圆曲线点乘运算你进入区块链世界 。我们下节课见啦 。
【区块链与密码学】课堂回顾:
区块链与密码学系列文章合集
椭圆曲线算法原理椭圆曲线的公式
Y^2 = x^3a xb
椭圆曲线的运算规则
1.加法:过曲线上的两点A、B画一条直线 , 找到直线与椭圆曲线的交点,交点关于x轴对称位置的点 , 定义为A B , 即为加法 。如下图所示:AB = C
2.二倍运算:上述方法无法解释AA,即两点重合的情况 。因此在这种情况下,将椭圆曲线在A点的切线 , 与椭圆曲线的交点,交点关于x轴对称位置的点 , 定义为AA,即2A,即为二倍运算 。如下图所示:AA = 2A = B
3.正负取反:将A关于x轴对称位置的点定义为-A,即椭圆曲线的正负取反运算 。
4.无穷远点:如果将A与-A相加 , 过A与-A的直线平行于y轴,可以认为直线与椭圆曲线相交于无穷远点 。
有限域内的椭圆曲线计算
椭圆曲线要形成一条光滑的曲线,要求x,y取值均为实数,即实数域上的椭圆曲线 。但椭圆曲线加密算法,并非使用实数域 , 而是使用有限域 。按数论定义,有限域GF(p)指给定某个质数p , 由0、1、2......p-1共p个元素组成的整数集合中定义的加减乘除运算 。
假设椭圆曲线为y2 = x3x1,其在有限域GF(23)上时,写作:
y2 ≡ x3x1 (mod 23)
此时 , 椭圆曲线不再是一条光滑曲线,而是一些不连续的点,如下图所示 。以点(1,7)为例,72 ≡ 1311 ≡ 3 (mod 23) 。
综述:
定义了A B、2A运算,因此给定椭圆曲线的某一点G,可以求出2G、3G(即G2G)、4G...... 。即:当给定G点时,已知x , 求xG点并不困难 。反之,已知xG点 , 求x则非常困难 。此即为椭圆曲线加密算法背后的数学原理 。
非对称加密之ECC椭圆曲线(go语言实践) 椭圆曲线密码学(英语:Elliptic curve cryptography,缩写为 ECC),一种建立公开密钥加密的算法,基于椭圆曲线数学 。椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的 。
ECC的主要优势是在某些情况下它比其他的方法使用更小的密钥——比如RSA加密算法——提供相当的或更高等级的安全 。
椭圆曲线密码学的许多形式有稍微的不同,所有的都依赖于被广泛承认的解决椭圆曲线离散对数问题的 困难性上 。与传统的基于大质数因子分解困难性的加密方法不同,ECC通过椭圆曲线方程式的性质产生密钥 。
ECC 164位的密钥产生的一个安全级相当于RSA 1024位密钥提供的保密强度,而且计算量较小,处理速度 更快,存储空间和传输带宽占用较少 。目前我国居民二代身份证正在使用 256 位的椭圆曲线密码,虚拟 货币比特币也选择ECC作为加密算法 。
具体算法详解参考:
【go语言椭圆曲线点乘运算 椭圆曲线计算公式】关于go语言椭圆曲线点乘运算和椭圆曲线计算公式的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。
推荐阅读
- 已删除的钉钉直播在哪找回,钉钉被误删的直播怎么找回
- go语言字符串型,go 字符串
- 益智游戏缺水教案,幼儿园益智游戏教案
- jquery新建div,jquery给div添加样式
- 装逼java代码 java 代码
- flutter谷歌市场,谷歌flutter20
- 不同的射击游戏如何换弹,换枪射击
- 微信视频号直播手机桌面,微信视频号直播手机桌面怎么设置
- Python通用序列函数 python序列数据有哪些