比特币系统采用的公钥密码学方案和ECDSA签名算法介绍—第一部分:原理

当前位置:首页 > 币圈百科 > 比特币系统采用的公钥密码学方案和ECDSA签名算法介绍—第一部分:原理

比特币系统采用的公钥密码学方案和ECDSA签名算法介绍—第一部分:原理

2023-01-22币圈百科361

ECC算法是一种基于有限域上椭圆曲线的数学算法。ECC算法基本原理介绍请参考《ECC加密算法入门介绍》(http://www . 8 BTC . com/ECC math)。本文重点介绍了比特币系统中采用的公钥密码方案和签名算法的实现细节。

一、什么是公钥和私钥

公钥密码(又称非对称(密钥)加密)是指有一对与数学算法相关的密钥,一个密钥加密的信息只能被另一个密钥解密。如果其中一个不会危及另一个的秘密性质,则公钥称为公钥,私钥不称为私钥。

公钥的主要作用:加密;验证签名。私钥的主要作用:签名;解密。

特点:

公钥可以从私钥计算出来,反之则不行。公钥加密:用公钥加密的内容可以用私钥解密。只有私钥持有者才能解密它。私钥签名:私钥签名的内容可以用公钥来验证。任何其公钥可以被验证的签名都可以被认为是由私钥持有者签署的。

以上特性由数学算法保证。实现公钥密码的方案有很多,如RSA、ElGamal、Diffie-Herman密钥交换协议、椭圆曲线加密算法(ECC)。

RSA方案主要用于网上银行系统。比特币系统使用ECC方案,在核心实现中不使用加密,仅使用签名算法来保证交易的真实性和所有权的认证。

二。椭圆曲线加密算法(ECC)

ECC方案通常包括三个方面:数字签名方案、加密和密钥传输方案、密钥协商方案。本文只涉及比特币系统中使用的数字签名方案。

(1)有限域:

(最近一些关于量子攻击的讨论中已经涉及到这个概念,如果有一定的数学基础或者没有数学基础可以跳过这一节)

域的特征是定义后集合F中所有元素的加法和乘法,得到的结果仍然包含在F中,一个无限域中元素的个数是无限的,比如有理数域和实数域。有限域中元素的个数是有限的,这就产生了一个问题。假设F是一个从0到9的整数集合,那么5和6都属于F,但是常规的加法定义是5 ^ 6=11,11不属于F,所以有限域需要定义加法和乘法才能使它们闭合。

目前已经发现当且仅当元素个数q为素数或n的幂时,一定存在一个元素个数为q的有限域,另外,对于每一个满足这个条件的q值,恰好存在一个有限域。有q个元素的有限域称为Fq。ECC方案中只使用了两种有限域:一种叫做素数有限域Fp,这里q=p,p,p是素数;另一种叫做基于特征值2的有限域F2^m,其中q=2^m,m ^ 1。比特币系统用的是第一种。Fp是{0,1…,p-1}的整数集合,有限域Fp定义加法:a b r (mod p)乘法:ab s(mod p)。

(2)椭圆曲线域E (Fp):

基于有限域Fp。0 (mod p)。x,y Fp,这条曲线P=(x,y)上的点集构成一个基于有限域Fp的椭圆曲线域e (Fp),元素个数记为# E(Fp)。

问:这和比特币系统有关系吗?答:公钥是Q=(x,y)曲线上一点的二进制输出格式。公钥可以压缩是因为Y可以根据X用曲线函数计算出来

(3)椭圆曲线域的描述性参数E(Fp):[X][X]E:Y ^ 2X ^ 3 AXB(mod P)[X][X]为了描述一个特定的椭圆曲线域,需要定义6个参数:t=(P,a,b,X. H:余因子,它控制着所选点的密度。h=#E(Fp)/n . 为比特币系统选择的secp256k1中的

,参数为p=fffffffffffffffffffffffffffff?FFFFFC2F=2^256?2^32 ?2^9 ?2^8 ?2^7 ?2^6 ?2^4 ?1

a=0,b=7

G=04 79 be 667 e f 9 dcbbac 55a 06295 ce 870 b 07 029 BF CDB 2 DCE 28d 959 f 2815 b 16 f 81798 483 ada 77 26 a3 c 465 5 5 da 4 fbfc 0 e 1108 a 8 FD 17 b 448 a 6855419 9 9 c 47d 08 f FB 10d 4 b 8

N答:比特币系统规定私钥的最大取值范围不能超过n.

(4)公钥和私钥:

从[1,n-1]中随机选取一个数d,计算Q=dG。其中d是私钥,q是公钥。

这个公式看起来很简单,但是怎么保证D不能从Q算出来呢?有限域中的加法和乘法有特殊的规则。在基于Fp的椭圆曲线点的集合域中,加法运算蓑衣网小编2022为:

不同点相加:(x1,y1) E(Fp),(x2,y2) E(Fp),x1 x2 (x1,y1) (x2,y2)=x1?x2 (mod p),y3 (x1?x3)?Y1 (mod p),和(y2?y1)/(x2?X1)(mod p)。

相同点的叠加:(x1,y1) E(Fp),Y1 0。(x1,y1) (x1,y1)=(x3,y3),其中x3 ^2?21 (mod p),y3 (x1?x3)?Y1 (mod p),和(31 2a)/2 y1(mod p)。

DG是标量乘法,可以转化为加法运算。如果发烧友想从公钥推导出私钥,可以根据这些公式试一试(作者本人已经放弃了这个努力)。

三、椭圆曲线数字签名算法(ECDSA): 蓑衣网小编2022

用户的密钥对:(d,q);(d是私钥,q是公钥)要签名的信息:m;签名:签名(M)=(r,s)

签名过程:

1。根据ECC算法随机生成一个密钥对(k,r),其中r=(xr,yr) 2。设r=xr mod n,如果r=0,返回步骤13。h转换成大端整数e5,s=k-1 (erd) mod n,如果s=0,返回步骤16。输出S=(r,S)是签名。

验证过程:

1。计算H=Hash(M)2。根据数据类型转换规则,将h转换为大端整数e3,计算u1=es^-1 mod n,u2=rs^-1 mod n4,计算R=(xr,yr)=U1。请验证签名是否无效。5.设v=xR mod n6。如果v==r,则签名有效。如果v r,签名无效。

2014 . 6 . 8

chehw

BTC地址:1 chep 8 qzftfvwxrroea 6 wmkc 7 cud wd 3kv

比特币系统采用的公钥密码学方案和ECDSA签名算法介绍—第一部分:原理

比特币系统采用的公钥密码学方案和ECDSA签名算法介绍—第一部分:原理 | 分享给朋友: