主页 > imtoken国内怎么下 > Blockchain Wallet-1 公私钥生成原理及私钥管理

Blockchain Wallet-1 公私钥生成原理及私钥管理

imtoken国内怎么下 2023-04-25 05:57:24

大纲:

公钥和私钥的原理

公钥和私钥基于密码学的概念,可以用来证明数据(数字指纹)的真实性。在比特币世界中,比特币的所有权是通过数字密钥、比特币地址和数字签名确定的。

在计算机信息安全的发展过程中,公钥加密发明后,发现了素数幂、椭圆曲线乘法等函数。这些函数的特点是:不可逆,即可以很容易地从一个方向计算,但不能逆推。基于此特性,可以生成数字密钥和不可伪造的数字签名。

公钥和私钥之间的数学关系使私钥能够为特定的消息生成签名,并且签名可以同时验证公钥而不泄露私钥。

私钥

私钥本质上是一个随机数,用 256 位表示。关键问题是如何安全地生成这个随机数。比特币软件使用操作系统底层的随机数生成器来生成 256 位的熵(随机性)。

不要编写自己的代码或使用编程语言提供的简单随机数生成器来获取随机数。使用加密安全的伪随机数生成器 (CSPRNG),并且需要从具有足够熵的源获得种子。将库用于随机数生成器时,请仔细研究其文档以确保其在密码学上是安全的。正确实施 CSPRNG 是密钥安全的关键。

区块链钱包地址是如何生成的

其实这个随机数是一个非常大的数字,十进制是10^77,整个宇宙估计只有10^80个原子。所以,如果真想生成一对相同的私钥,比上天还难。

公钥

公钥是通过椭圆曲线乘法从私钥计算出来的。如前所述,椭圆曲线函数是一个不可逆过程:K = k * G,其中k为私钥,G为常数,K为公钥。他的逆运算是“求离散对数”。

ECC

在椭圆曲线的数学中有几点需要注意:

曲线功能

y^2 = x^3 + ax + b

区块链钱包地址是如何生成的

比特币使用的曲线函数

y^2 = x^3 + 7

生成公钥

K = k * G,G是生成点,是固定的,是ECC上的一个点;k是一个随机生成的私钥,是一个随机数区块链钱包地址是如何生成的,一个非常大的随机数;那么,对于G区块链钱包地址是如何生成的,经过k次椭圆曲线加法运算,得到最终点,即公钥K。

因此,例如,K = (x, y)

1
2

K = 1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD * G
K = (x, y) = (F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A, 07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB)

区块链钱包地址是如何生成的

数学原理是利用椭圆曲线函数将G k 次相加。在椭圆曲线中,点的相加相当于从该点画一条切线,找到另一个与曲线相交的点,然后翻转到x轴。

比特币地址

地址的生成使用哈希算法;散列算法是一种单向函数,它接收任意长度的输入以生成固定长度的指纹或散列。具体算法有:SHA256和RIPEMD160。

以公钥 K 为输入,计算其 SHA256 哈希值,并用此结果计算 RIPEMD160 哈希值,得到一个长度为 160 位(20 字节)的数字:

A = RIPEMD160(SHA256(K))

地址生成过程

小插图-Base58Check

区块链钱包地址是如何生成的

Base58 Check

电子签名

比特币中使用的数字签名算法是椭圆曲线数字签名算法 ECDSA。ECDSA 是一种基于椭圆曲线私钥/公钥对的数字签名算法。

数字签名是一个由两部分组成的数学方案:第一部分是使用私钥(签名密钥)从消息(交易)创建签名的算法;第二部分是一种算法,允许任何人验证签名,给定消息和公钥。

ECDSA算法签名流程

((Sig = F{sig}(F{hash}(m), dA)))

区块链钱包地址是如何生成的

ECDSA 算法验证签名

要验证签名,必须有签名(R 和 S)、序列化交易和公钥(对应于用于创建签名的私钥)。本质上,签名验证意味着“只有生成此公钥的私钥所有者才能在此交易中生成此签名。”

签名验证算法获取消息(交易或其部分的哈希)、签名者的公钥和签名(R 和 S 值),如果签名对该消息和公钥有效,则返回 TRUE 值

钱包

从广义上讲,钱包是一种向用户提供交互界面的应用程序。钱包控制用户访问、管理密钥和地址、跟踪余额以及创建和签署交易。狭义上,从程序员的角度来看,“钱包”是指用于存储和管理用户密钥的数据结构。

钱包有两种主要类型,区别在于它们包含的多个密钥是否相互关联。

参考