主页 > imtoken冷钱包官方下载 > 比特币背后的算法和数学

比特币背后的算法和数学

imtoken冷钱包官方下载 2023-06-13 06:47:52

以比特币为代表的各种区块链货币被称为加密数字货币,因为密码学是比特币设计的重要安全基石,以确保货币流通各环节的安全。比特币使用的加密算法称为椭圆曲线算法(ECC),这是一种众所周知的非对称算法。与另一种著名的非对称算法RSA相比,ECC算法的数学理论非常深刻和复杂,在工程应用中难以实现,但其单位安全强度较高。

哈希算法

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

值得一提的是,为什么这两个函数都进行了两次散列? hash160 比较认同的答案是,ripemd160 可以使生成的地址更短,但是成熟的 160 只有一个 hash 可能有安全漏洞,所以同时使用 sha256 进行安全加固;至于hash256,hash256之所以使用两次sha256哈希算法,是源于sha1算法,因为一次sha1哈希有被生日攻击(生日攻击)的风险,所以在使用sha1操作时,一个有效的方法是做两次sha1哈希,sha256本身没有生日攻击漏洞,但是防御性使用两个sha256哈希是借用sha1.

默克树

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

比特币背后的算法与数学_非对称

椭圆曲线 (ECC)

Elliptic Encryption (ECC) 是一种公钥加密系统,最初由 Koblitz 和 Miller 于 1985 年提出,其数学基础是利用椭圆曲线上的有理点在Abel 添加剂组。公钥密码系统根据其所基于的问题一般分为三类:大素数分解问题、离散对数问题和椭圆曲线问题。椭圆曲线类有时也归类为离散对数类。

椭圆曲线的数学表达式为y2=x3+ax+b。椭圆曲线有两个重要特征。 1.任何不垂直的直线与曲线相交于两点,则A直线必定与曲线相交于第三点; 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

比特币背后的算法与数学_非对称_02

ECC的主要优点如下:

首先,更高的安全性。 160 位椭圆密钥与 1024 位 RSA 密钥一样安全。

第二,处理速度更快。在私钥的加解密速度方面,ECC算法比RSA和DSA要快。

第三,存储空间小,带宽要求低。

ECC 的这些特性使其有可能取代 RSA,成为一种通用的公钥加密算法。例如,SET协议的制定者已将其作为下一代SET协议中默认的公钥密码算法。

RSA 算法

1977 年,Ron Rivest、Adi Shamir 和 Leonard Adleman )共同设计了一种非对称加密算法比特币的加密算法,称为 RSA 算法。 RSA 实际上是三位发明者的首字母缩写。 RSA算法的加密过程如下:

首先,乙方生成两个密钥(公钥和私钥)。公钥是公开的,私钥是保密的,只有乙方知道。

其次,甲方获得乙方的公钥,然后用它对信息进行加密。

第三,乙方使用私钥对加密信息进行解密。

RAS 算法的安全性依赖于大数的因式分解。大数的分解是一个数学公认的问题,例如对于数字 4, 000, 000, 000, 000, 000, 000, 000, 000, 000, 001=1, 199, 481, 995, 446, 957x3, 334 , 772、856、269、093,很难找到2个素数来计算前一个数。对于一些大数的分解,即使借助计算机运算,仍然需要很长的时间。例如:对于 200 位非特殊数 RSA200,计算机在 2005 年用了 18 个月将其分解为两个质数。可见,RSA算法的强度很高,破解难度比较大。