主页 > imtoken交易所下载 > 比特币密钥、地址和钱包

比特币密钥、地址和钱包

imtoken交易所下载 2023-03-29 06:19:33

简介

比特币所有权是通过数字密钥、比特币地址和数字签名建立的。数字密钥实际上并不存储在网络中,而是由用户生成并存储在称为钱包的文件或简单数据库中。存储在用户钱包中的数字密钥完全独立于比特币协议,可以由用户的钱包软件生成和管理,无需区块链或网络连接。密钥支持比特币的许多有趣功能,包括去中心化信任和控制、所有权身份验证以及基于加密证明的安全模型。

每笔比特币交易都需要一个有效的签名才能存储在区块链上。只有有效的数字密钥才能产生有效的数字签名,因此拥有比特币中的密钥副本可以让您控制该帐户的比特币。密钥成对出现,由私钥和公钥组成。公钥就像银行帐号,私钥就像控制账户或支票签名的 PIN。比特币用户很少直接看到数字密钥。通常,它们存储在钱包文件中并由比特币钱包软件管理。

在比特币交易的支付过程中,收款人的公钥由其数字指纹表示,称为比特币地址,就像支票上的支付对象名称(即“收款人”)一样。 ”)。通常,比特币地址由公钥生成并对应于公钥。然而,并不是所有的比特币地址都是公钥;它们还可以表示其他支付对象,例如我们将在本章后面介绍的脚本。通过这种方式,比特币地址抽象了收款人,使得交易的目的地更加灵活,就像一张支票:这种支付工具可以支付到个人账户、企业账户,用于账单支付或现金支付。比特币地址是用户经常看到的密钥的唯一表示,他们只需要将比特币地址告诉其他人。

公钥密码学和加密货币

公钥密码术是在 1970 年代发明的。它是计算机和信息安全的数学基础。自公钥密码学发明以来,已经提出了一些合适的数学函数,例如素数幂和椭圆曲线乘法。这些数学函数是不可逆的,这意味着在一个方向上很容易计算,但反过来就不行。基于这些数学函数的密码学使得生成数字密钥和不可伪造的数字签名成为可能。比特币使用椭圆曲线乘法作为其公钥加密的底层算法。

在比特币系统中,我们使用公钥加密来创建控制比特币获取的密钥对。密钥对由私钥和从它派生的唯一公钥组成。公钥用于接收比特币,而私钥用于在比特币支付时签署交易。

公钥和私钥之间的数学关系,这样私钥可用于为特定消息生成签名。此签名在不泄露私钥的情况下验证公钥。在支付比特币时,比特币的当前所有者需要在交易中提交他们的公钥和签名(每笔交易的签名不同比特币加密算法,但由相同的私钥生成)。比特币网络中的每个人都可以通过提交的公钥和签名进行验证,并确认交易是有效的,即确认付款人拥有当时正在交易的比特币的所有权。

比特币加密算法

私钥和公钥

比特币钱包包含一系列密钥对,每个密钥对包括一个私钥和一个公钥。私钥 (k) 是一个数字,通常是随机选择的。有了私钥,我们可以使用单向加密函数椭圆曲线乘法生成公钥(K)。有了公钥 (K),我们可以使用单向加密哈希函数生成比特币地址 (A)。

私钥

私钥只是一个随机选择的数字。对比特币地址中所有资金的控制取决于相应私钥的所有权和控制权。在比特币交易中,私钥用于生成支付比特币所需的签名,以证明资金的所有权。私钥必须时刻保密,因为一旦泄露给第三方,相当于保护私钥的比特币也被交出。私钥也必须备份,以防不慎丢失,因为私钥一旦丢失,就很难找回,它所保护的比特币将永远丢失。

公钥

可以通过椭圆曲线算法从私钥计算出公钥,这是一个不可逆的过程:K = k * G。其中 k 是私钥,G 是称为生成点的常数点,K 是生成的公钥。反向操作,称为“求离散对数”——知道公钥 K 的情况下求私钥 k——非常困难,就像尝试 k 的所有可能值一样,蛮力搜索。

比特币加密算法

生成公钥

从一个随机生成的私钥k开始,我们将它乘以曲线上定义的生成点G,得到曲线上的另一个点,即对应的公钥K。生成点是secp256k1标准的一部分,比特币密钥的生成点都是一样的:{K = k * G}

其中k为私钥,G为生成点,得到的曲线点K为公钥。因为所有比特币用户的生成点都是相同的,所以一个私钥k乘以G会得到相同的公钥K。k和K的关系是固定的,但只能在一个方向上操作,即K 是从 k 中获得的。这就是为什么比特币地址(K 的派生)可以与任何人共享而不泄露私钥(k)的原因。因为其中的数学是单向的,所以私钥可以转换为公钥,但公钥不能转换回私钥。为了实现椭圆曲线乘法,我们将之前生成的私钥k和生成点G相乘,得到公钥K:K = 1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD * G

公钥K定义为一个点K = (x , y):

比特币地址

比特币地址是一串数字和字母,任何想要给你比特币的人都可以使用它来分享。从公钥(也由数字和字母组成的字符串)生成的比特币地址以数字“1”开头。下面是一个比特币地址的例子:

比特币加密算法

1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy

在一笔交易中,比特币地址通常作为收款人出现。如果将比特币交易比作支票,那么比特币地址就是收款人,也就是我们要在收款人栏中写的。支票的收款人可以是银行账户、公司、机构,甚至是现金支票。支票不需要指定特定账户,而是使用通用名称作为收款人,这使其成为一种相当灵活的支付工具。同样,比特币地址的使用使比特币交易变得灵活。比特币地址可以代表一对公钥和私钥的所有者,或者其他东西,例如第 132 页“P2SH(支付到脚本哈希)”部分中描述的支付脚本。现在,让我们看一下一个从公钥生成比特币地址的简单示例。

比特币地址可以通过单向加密哈希算法从公钥中获取。哈希算法是一种单向函数,它接受任意长度的输入以生成指纹摘要。加密哈希函数在比特币中被广泛使用:比特币地址、脚本地址和挖矿中的工作量证明算法。用于从公钥生成比特币地址的算法是安全散列算法 (SHA) 和 RACE Integrity Primitives Evaluation Message Digest (RIPEMD),特别是 SHA256 和 RIPEMD160。

以公钥K为输入比特币加密算法,计算其SHA256哈希值,并用结果计算RIPEMD160哈希值,得到一个长度为160位(20字节)的数:A = RIPEMD160(SHA256 (K) ) 在公式中,K 是公钥,A 是生成的比特币地址。比特币地址与公钥不同。比特币地址是通过单向哈希函数从公钥生成的。

通常用户看到的比特币地址是用“Base58Check”编码的,它使用58个字符(一种Base58数字系统)和一个校验码来提高可读性,避免二义性,有效防止地址转录和输入错误。 Base58Check 编码也用于比特币的其他地方,例如比特币地址、私钥、加密密钥和脚本哈希,以提高可读性和正确输入。

比特币钱包

钱包是私钥的容器,通常实现为有序文件或简单数据库。制作私钥的另一种方法是确定性密钥生成。这里可以使用原始私钥通过单向哈希函数生成每个新的私钥,并将新生成的密钥按顺序串联起来。只要可以重新创建序列,只需要第一个私钥(称为种子,主私钥)即可生成它们。在本节中,我们将研究不同的私钥生成方法及其钱包结构。

比特币加密算法

比特币钱包只包含私钥,不包含比特币。每个用户都有一个包含多个私钥的钱包。钱包包含一对私钥和公钥。用户使用这些私钥签署交易,证明他们拥有交易的输出(即其中的比特币)。比特币以交易输出的形式存储在区块链上(通常表示为 vout 或 txout)。

钱包地址生成

1. 首先使用随机数生成器生成“私钥”。一般来说,这是一个 256 位的数字。有了这串数字,就可以操作对应“钱包地址”中的比特币,所以一定要安全存放。

2.“私钥”经过SECP256K1算法处理,生成“公钥”。 SECP256K1 是一种椭圆曲线算法。当“私钥”已知时,“公钥”可以计算出来,但“公钥”已知时,“私钥”无法逆向计算。这是保护比特币的算法基础。

3. 和 SHA256 一样,RIPEMD160 也是一种 Hash 算法。可以从“公钥”计算出“公钥哈希”,但反过来是不可行的。

4. 将一个字节的地址版本号连接到“公钥哈希”头(对于比特币网络上的公钥地址,该字节为“0”),然后对其进行两次SHA256操作,并连接结果的前4个字节作为“公钥哈希”的校验值,并连接到末尾。

比特币加密算法

5. 使用BASE58对上一步的结果(比特币定制版)进行编码,得到“钱包地址”。

例如,1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa

“私钥”、“公钥”和“钱包地址”的关系

以上五个步骤中,只有“BASE58编码”有对应的可逆算法(“BASE58解码”),其他算法都是不可逆的,所以这些数据之间的关系可以表示为:

可以看出,上述计算过程中的所有值都可以通过“私钥”得到。 “公钥哈希”和“钱包地址”可以通过倒数运算转换,所以它们是等价的。

哈尔滨工程大学计算机学院2021年区块链技术课程

袁江浩、邵兴元、崔文龙