主页 > imtoken转账需要验证码 > 比特币是什么算法?

比特币是什么算法?

imtoken转账需要验证码 2023-09-05 05:07:20

我们肯定对比特币有一定的了解,所以我们对比特币的算法是真的不了解。 我想就让我们这里的小编给大家介绍一下比特币是个什么样的算法吧。 ?希望小编在这里介绍的内容能够对大家有所帮助。 我希望你能找到你喜欢的东西。

可以说,比特币的整个实现都是基于计算机科学领域已经存在多年的现有技术或概念的整合。 哈希算法在比特币中的应用几乎是方方面面的,主要包括SHA256和RIPEMD160比特币样子图片,比特币将这两种哈希算法的应用结合成两个函数:hash256(d)=sha256(sha256(d))和hash160(d)=ripemd160 (sha256(d)),其中d是待哈希的字节数组,两者分别生成256位(32字节)和160位(20字节)的十六进制值。 Hash256主要用于生成标识符,如区块ID、交易ID等,而Hash160主要用于生成比特币地址。

值得一提的是,为什么两个函数都做两次哈希? hash160比较赞的答案是ripemd160可以让生成的地址更短,但是只做一个ripemd160的hash可能会有安全漏洞,所以同时使用sha256起到了安全加固的作用; 至于hash256,两次使用sha256哈希算法的原因来自于sha1算法。 由于一个sha1 hash有被birthday attack攻击的风险,所以在使用sha1操作时一个有效的方法是做两个sha1 hashes,sha256本身不存在birthday attack漏洞,但是防御使用两个sha256 hashes是借用的沙1。

默克尔树

比如SPV这样只保存区块头信息,没有交易信息的比特币轻节点,如何验证一笔交易存在于哪个区块? 默克尔树。 (图片来自精通比特币)

Merkle树的基本原理是将叶子节点成对配对进行哈希运算(如果叶子节点的个数为奇数,则复制最后一个叶子)生成一个父节点,并不断迭代这个过程,最终生成唯一的根节点默克尔根。 如果要验证Merkle树中是否存在叶子节点,只需要传入一条从该节点到根节点的merkle路径,SPV比特币节点只需要保存根节点即可。 例如,根据上图,如果我们要验证第k笔交易是否在区块中,只需要传递路径HL、HIJ、HMNOP和HABCDEFGH即可。

椭圆曲线函数EC(Elliptic Curve)

比特币是什么样子_比特币样子图片_比特币分叉对比特币的影响

比特币使用公钥加密来保护个人隐私,并选择了椭圆曲线函数来实现。 选择EC的综合原因不太清楚,但至少我觉得够安全,够高效。 在比特币的实现中,EC起着三个方面的作用,密钥对生成、私钥签名和签名验证。

椭圆曲线的数学表达式为y2=x3+ax+b。 椭圆曲线有两个重要特征。 1.任何不垂直的直线与曲线相交于两点,则该直线必须与曲线相交于第三点; 2. 任何非垂直曲线的切线必须与曲线相交于另一点。 根据这两个特性,设点Q和P为曲线上的点,得到如下定义,加运算:通过Q和P的直线与曲线相交于第三点R',则Q+P= R比特币样子图片,其中R为点R',关于x坐标轴对称; 同理,移动直线使Q点和P点不断逼近并重合一点D,则此时直线与曲线相切。 根据特征 2,它与曲线相交于点 R'。 很难得到D+D=R,其中R是点R'相对于x坐标轴的对称点。 乘法运算:设Q=aP,假设a=3,会有:

Q = 3P Q = P + 2P

这样,乘法运算就分解为两个加法运算,即交加和切加。 椭圆曲线图(图片来自Mastering bitcoin):

现在让我们看一下比特币协议中的椭圆曲线特性。 在比特币使用的曲线版本中,a=0,b=7,即y2=x3+7。 同时,为了保证函数的取值在一个限定的范围内,所以在EC的实际应用中,会对结果进行取模运算,以获得限定范围内的结果。 比如模数为7, 8 mod 7 = 1,那么x mod 7的取值就限制在0到6之间。比特币协议中的EC有如下参数设置:

模数p = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F 基点G= 04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8 序数n = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141

这些参数的设置经过了大量的研究,既复杂又微妙。 这些都是巨大的价值,使得反向操作不可能。 简单的说,p是曲线的取值范围,n是我们可以得到的最大私钥值,也就是私钥必须小于n值。 根据上图,计算公钥的过程就是私钥和G点的乘法运算。 G点和n的取值是基于当私钥的值无限接近n时,与椭圆曲线相交的直线的斜率无限接近垂直。

比特币是什么样子_比特币分叉对比特币的影响_比特币样子图片

是时候看看椭圆曲线在比特币的三种应用中是如何工作的了。

1.密钥对生成

上面说了公钥=私钥x G,也就是G点加到私钥值上的次数。 这里有个小问题。 上图展示了点在一个连续区间内的分布,但是在取模的时候,以后就需要使用特定的公式来达到目的了。 设Q和P为曲线上的两点,则曲线上两点相加相交的R点为:

d = (Qy - Py) / (Qx - Px)

Rx = d2 - Px - Qx

Ry = d (Px - Rx) - Py

两点重合在一点Q的切线上时,交点R的计算公式为:

比特币样子图片_比特币是什么样子_比特币分叉对比特币的影响

d = (3Qx2 + a) / 2Qy

Rx = d2 - 2Qx

Ry = d (Qx - Rx) - Qy

就像上面说的曲线乘法运算一样,乘法过程就是把运算拆成无数个切线和交线运算,也就是分别用上面两个公式的计算过程。

2.使用私钥对数据进行签名

为了隐私保护,在交易中使用私钥签名代替私钥来验证未花费的归属。 不管比特币的使用环境如何,签名操作都是使用私钥dA加密一段数据z,如下:

(1). 在大于0小于n的​​范围内选择一个数k(上面的序数,即私钥的上限)

比特币样子图片_比特币分叉对比特币的影响_比特币是什么样子

(2). 计算点p(x,y)=k*G

(3). 计算r=x mod n,如果r部分为0,则返回第一步,重新选择

(4). 计算s=(z+r*dA)/k mod n,如果段s为0,则返回第一步重新计算

(5). 生成的数字签名signature(r, s)

3.数字签名验证

比特币交易的链上运行就是私钥签名和公钥签名验证不断进行的过程。 有了上面的签名,签名验证过程如下(假设公钥为dP):

(1). 验证 r 和 s 段在 0 和 n 之前

比特币是什么样子_比特币分叉对比特币的影响_比特币样子图片

(2). 计算 w=s-1 mod n

(3). 计算 u1=z*w mod n

(4). 计算u2=r*w mod n

(5). 计算p(x,y)=u1*G+u2*dP

(6). 验证r==x mod n,如果不等式则验证失败

至于为什么验证过程有效,可以参考这里。 简单的说就是将公钥dP展开为dA*G,然后将u1和u2的定义带入计算。

通过上面小编在这里给大家介绍了很多关于比特币是个什么样的算法? 我想大家对于比特币应该基本都了解很多,所以如果大家还有其他问题的话,欢迎在这里关注我们哦! 我们将为您提供更好更全面的内容。