椭圆曲线密码算法ECC及secp256k1

2021年8月10日14:56:36
评论
53

更多区块链技术与应用分类:

区块链应用    区块链开发

以太坊 | Fabric | BCOS | 密码技术 | 共识算法 | 比特币其他链

通证经济传统金融场景 | 去中心化金融 | 防伪溯源 | 数据共享 | 可信存证

 

ECC是椭圆曲线加密(Elliptic Curve Cryptography)的缩写,在网络通信以及区块链系统中最常用的加密算法之一。

定义

一条椭圆曲线就是一组被椭圆曲线密码算法ECC及secp256k1定义的且满足 椭圆曲线密码算法ECC及secp256k1  的点集。

椭圆曲线密码算法ECC及secp256k1

不同的椭圆曲线对应不同的形状(b=1,a从2到-3)

随着a和b的不同,椭圆曲线也会在平面上呈现出不同的形状,且椭圆曲线始终是关于x轴对称的。需要注意的是,此处还需要一个无穷处的点作为曲线的一部分,用 0 这个符号表示无穷处的点。那么椭圆曲线的表达式为:

椭圆曲线密码算法ECC及secp256k1

群与椭圆曲线上的群论

椭圆曲线算法要用到数学中的群论,那什么是群?简单来说满足下面几个条件[G代表群,a,b是群元素]:

1.封闭性:如果a和b被包含于群G中,那么a+b 也一定是G的元素。

2.结合律:(a+b)+c=a+(b+c)。

3.交换律a+b = b+a.

4.存在一个单位元0,使得 a+0 = 0+a = a(单位元:与任意元素运算不改变其值的元素)

5.每个数都存在一个相反数。

依此在椭圆曲线上定义群

1.群中的元素就是椭圆曲线上的点。

2.单位元就是无穷处的点0.

3.相反数P,是关于X轴对称的另一边的点。

4.加法规则定义如下:取一条直线上的三点(这条直线和椭圆曲线相交的三点),P, Q, R(皆非零),他们的总和等于0,即P+Q+R=0。

椭圆曲线密码算法ECC及secp256k1

利用几何方法进行椭圆曲线加法加法

由于椭圆曲线的点集属于一个阿贝尔群,所以我们可以将P+Q+R=0写成 P+Q=−R。这个方程式让我们派生出了一个几何方法去计算两个点P和Q的和:当我们画一条直线通过P,Q,这条线将会和椭圆曲线相交于第三个点R(这就暗示着P,Q,R三点是在一条直线上的)。如果我们取它相反的点,-R, 我们就可以找到P+Q 的结果。

椭圆曲线密码算法ECC及secp256k1

这个几何方法非常有用但是还需要再精炼一下。让我们来回答一下以下几个问题:

  • 如果 P = 0或者 Q = 0 呢?很明显,这样我们是画不出线的,无穷远点0 不在xy平面上。但是我们已经定义了0作为单位元。 P + 0 = P 和 Q + 0 = Q,对于任意的P和Q都适用,单位元的作用就是与任意元素运算不改变其值的元素。
  • 如果P = -Q呢? 在这种情况下,穿过两点的直线是垂直的,没有相交的第三个点。但是呢,如果P是Q的相反数,然后我们将会从相反数的定义中得到 P+Q=P+(−P)=0。
  • 如果P = Q呢? 在这种情况下,有无数条线会经过这个点。我们假设一个点 椭圆曲线密码算法ECC及secp256k1 . 当Q’越来越接近P的时候会发生什么?如下图所示。

椭圆曲线密码算法ECC及secp256k1

当两点逐渐靠近,穿过两点的直线将会和曲线相切

从上文我们知道,P,Q,R三点在一条线上而且没有先后顺序,这是一般情况。当两个点越来越接近的时候,这条线会成为曲线的一条切线,这条切线与曲线相交的另一点就是R。

鉴于此,当出现切线这种情况时我们可以写成P+P=−R,R是曲线和切线的交点,P是切点。

如果当P!=Q,但是没有第三点R呢?这种情况与上一条非常相似。事实上,这种情况就是一条直线穿过P和Q与曲线相切。

椭圆曲线密码算法ECC及secp256k1如果直线和曲线仅相交于两点,这意味着直线是曲线的切线。P+Q的结果显而易见是其中一个点关于X轴的对称点

除上面的几何加法外,还有诸如代数加法、标量积以及对数等方法去求解椭圆曲线,由于不太直观,在此不展开了。

椭圆曲线加密算法

比特币选择的椭圆曲线是名为secp256k1的曲线,secp256k1是一条用于密码学的特定椭圆曲线,它总共包含以下6个参数:

椭圆曲线密码算法ECC及secp256k1

首先是参数 椭圆曲线密码算法ECC及secp256k1 ,这里的a和b就是椭圆曲线方程 椭圆曲线密码算法ECC及secp256k1 中的a和b。也就是这两个参数决定了secp256k1所使用的椭圆曲线方程。secp256k1中它们的值分别是:

a = 0

b = 7

所以方程是 椭圆曲线密码算法ECC及secp256k1 ,在实数域上画出来是这样的:

椭圆曲线密码算法ECC及secp256k1

然后是参数 椭圆曲线密码算法ECC及secp256k1 。因为密码学上使用的椭圆曲线都是在有限域上定义的,对于secp256k1来说,它使用的有限域是 椭圆曲线密码算法ECC及secp256k1 ,也就是它的曲线方程实际上是 椭圆曲线密码算法ECC及secp256k1 。椭圆曲线密码算法ECC及secp256k1 的具体值是:

椭圆曲线密码算法ECC及secp256k1

然后是参数 椭圆曲线密码算法ECC及secp256k1 。 椭圆曲线密码算法ECC及secp256k1 是椭圆曲线上的一个点,称为基点。对于secp256k1,它的具体值是:

椭圆曲线密码算法ECC及secp256k1

然后是参数 椭圆曲线密码算法ECC及secp256k1 。它是使得 椭圆曲线密码算法ECC及secp256k1 的最小正整数。

注意这里的乘法是指定义在曲线 椭圆曲线密码算法ECC及secp256k1 上点的乘法,0是指曲线上的零点(无穷远点)。

具体值是:

椭圆曲线密码算法ECC及secp256k1

最后是参数 椭圆曲线密码算法ECC及secp256k1 。一般取 椭圆曲线密码算法ECC及secp256k1 。它是椭圆曲线群的阶跟由 椭圆曲线密码算法ECC及secp256k1 生成的子群的阶的比值。是设计secp256k1时使用的参数,在具体实现中使用这个参数主要是出于安全性考虑,忽略它不影响理解。

上面这些就是secp256k1曲线包含的参数及其意义。

下面介绍公钥和私钥是如何生成的。因为这里已经事先选定了secp256k1,所以步骤只有两步:

  1. 用户随机生成一个小于 椭圆曲线密码算法ECC及secp256k1 的大整数 椭圆曲线密码算法ECC及secp256k1 ,这就是私钥。
  2. 然后计算 椭圆曲线密码算法ECC及secp256k1 ,Q即是公钥(公钥是椭圆曲线上的一个点)。

举例:

先生成私钥k

k=1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD

K=k * G=(x, y)=

(F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A,

07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB)

K = (x, y)则为椭圆曲线上一个点。

在给定k(私钥)后,如何找到kG(公钥)? 也就是将G相加k次后的点。在椭圆曲线中,点的相加等同于从该点画切线找到与曲线相交的另一 点,然后翻折到x轴。下图显示了在曲线上得到 G、2G、4G 的几何操作,同理可找到kG。

椭圆曲线密码算法ECC及secp256k1

 

参考文章:

https://andrea.corbellini.name/2015/05/17/elliptic-curve-cryptography-a-gentle-introduction/

https://www.zhihu.com/question/22399196/answer/330577147

 

 

 

 


原文链接:椭圆曲线密码算法ECC及secp256k1

  • 本文由 发表于 2021年8月10日14:56:36
  • 转载请注明:https://www.wanghaoyi.com/crypto-ecc-secp256k1.html
RSA公私钥特性及加解密过程 密码技术

RSA公私钥特性及加解密过程

RSA是一种使用不同的加密密钥与解密密钥的公钥密码体制,其命名是由提出该理论的的三人姓氏开头字母拼在一起组成。 公钥与私钥 RSA成对生成私钥与公钥,一把私钥对应一把公钥。而我们经常听到一个私钥对于多...
群签名环签名 密码技术

群签名环签名

群签名 群签名概念 群签名(Group Signature)是一种能保护签名者身份的具有相对匿名性的数字签名方案,用户可以代替自己所在的群对消息进行签名,而验证者可以验证该签名是否有效,但是并不知道签...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: