主页 > 下载imtoken钱包20app > 私钥、公钥和地址——精通比特币(第二版)第4章花絮

私钥、公钥和地址——精通比特币(第二版)第4章花絮

下载imtoken钱包20app 2023-02-05 07:30:04

# 介绍

*比特币所有权是通过数字密钥、比特币地址和数字签名建立的。 *

就像银行里的钱的所有权一样,要确认这笔钱是你的,一般需要知道银行账户(公钥),自己的密码(私钥),还有一个签名来确认。 付款时,卖家还给你一个账号,而不是你自己的密码。 所不同的是,在程序世界中,帐号和密码是一一对应的,数字签名只能用有效的密钥生成。 *所以只要知道私钥,就可以拥有一个比特币*。 同样比特币地址是私钥还是公钥,知道你私钥的其他人也可以轻松持有这个比特币。

# 私钥和公钥

比特币钱包导出私钥_一个比特币私钥有多少个地址_比特币地址是私钥还是公钥

* 从私钥到公钥,从公钥到地址。 这个推导过程是单向的*。 逆向推导是困难的。 这是由于非对称加密的方式。 什么是非对称加密? 朝一个方向计算很容易,但要反方向计算就非常困难了。 比如做幂积比较容易,求对数就难了。

## 私钥是怎么生成的?

*比特币私钥是一个256位的二进制数*

可以通过产生是或否的各种算法计算 256 次。 例如,抛 256 次硬币。 只要过程*不可预测或不可重复*,选择数字的确切方法并不重要。

比特币软件使用操作系统底层的随机数生成器来生成 256 位的熵(随机性)。 通常,操作系统随机数生成器由人工随机源初始化,这就是为什么可能还需要摇动鼠标几秒钟的原因。

## 公钥

* K=k\*G

其中k为私钥比特币地址是私钥还是公钥,G为生成点,曲线上的生成点K为公钥。 因为所有比特币用户的生成点都是相同的,私钥 k 乘以 G 将产生相同的公钥 K。

# 椭圆曲线加密

给定椭圆曲线上的一点 P,如果 k 是整数,则 kP = P + P + P + ... + P(k 次)

给定椭圆曲线上的两个点 P1 和 P2,椭圆曲线上必须有第三个点 P3 = P1 + P2。 在几何图形中,第三点 P3 可以通过在 P1 和 P2 之间画一条线来确定。 这条线恰好在另一个地方与椭圆曲线相交。 该点表示为 P3'=(x,y)。 然后,翻转 x 轴得到 P3=(x,-y)。 为了处理一些特殊的点,比如A(x,y),B(x,-y)组成的直线与曲线相交(曲线垂直于x轴)的情况,radio Aoo需要待介绍。 这个点加到其他点上,得到的结构还是其他点。 A(x,y)+B(x,-y)=Aoo,

比特币地址是私钥还是公钥_一个比特币私钥有多少个地址_比特币钱包导出私钥

由于实数范围较大,难以应用于实际加密。 为了应用方便,在实际应用中,使用范围也仅限于P个素数。 这样构成的集合可以满足一定的数学要求。 比如swap,division等。*限定在一个质数范围内之后,曲线就不再是连续的曲线了,而是一些离散的点*。 如素数阶17有限域中的椭圆曲线。

比特币钱包导出私钥_一个比特币私钥有多少个地址_比特币地址是私钥还是公钥

## 为什么椭圆曲线加密可以单向加密?

公钥加密使用椭圆曲线密码术。 *它的特点导致乘法容易,除法难*。 这种曲线加密的特点是:你拿球从A点射到B点,当它碰到曲线时,球向上或向下弹跳到X轴的另一边。 根据这个规则,如果有人知道要加的次数和起点,就很容易知道终点在哪里。 但是反过来就很复杂了。 你只知道初始阶段结束的那两个点,所以很难知道推导经过了多少步,难度极大。

此外,与其他加密方法相比,椭圆曲线加密可以要求更短的数据长度,这对存储要求更低。

## 如何简单理解椭圆曲线加密?

金驰中在知乎上有一段很形象的描述:(链接:)

有一天张三挑出两个数,123、456。由于张三会乘法,所以张三计算:

123\*456 = 56088 所以张三告诉你:123\*??? = 56088

你是个极有天赋的人,但是没办法,老天爷不允许你会除法(乘法大家都会,但除法大家都不会),张三说什么你就无从知晓???

有一天,你打算告诉张三一个秘密,67。但是你不想让别人知道。 所以你很聪明,随机选择了一个数字 222。 计算:

123\*222 = 27306 56088\*222 + 67 = 12451603

然后你对张三说:

123\*??? = 27306

56088\*??? + x = 12451603

当然,你很聪明,而张三又聪明又秃头,所以张三想:

这样上下相减,x = 12451603 - 27306\*456 = 67

天哪,这个x刚刚传过去了。

如果我们将上述过程写成一个数学公式,就是

G\*k = K(G,K是公开的,k是保密的)

c1 = G\*M

c2 = K\*M + x(M是随机选择的,x是要加密的数,M和x都保密)

x = c2 - c1\*k

= K\*M + x - G\*M\*k

= G\*M\*k + x - G\*M\*k(去掉左右两边的G\*M\*k)

= x

# 公钥和私钥格式 ## 公钥格式

公钥是椭圆曲线上的一个点,由一对坐标(x,y)组成。 公钥通常表示为前缀 04 后跟两个 256 位数字(130 个十六进制数字)。 其中一个 256 位数字是公钥的 x 坐标,另一个 256 位数字是 y 坐标。

如K=04F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE

52DDFE2E505BDB

压缩公钥:由于Y其实是X的函数,知道X后可以很容易推导出Y。所以为了节省存储量,可以只记录X的数据。这样就节省了256位。 但是,由于Y在曲线函数中以正方形的形式出现,所以会有正解和负解两种。 为了区分这一点,在前导字符中使用不同的数字来表示正负形式。

*未压缩格式的公钥使用 04 作为前缀。 当我们生成压缩格式公钥时,如果y是偶数,则使用02作为前缀; 如果 y 是奇数,则使用 03 作为前缀*

## 私钥的格式

*A compressed private key”实际上只是指“用于生成压缩格式公钥的私钥”*。压缩私钥比非压缩私钥多一个字节(十六进制为01)。这是为了告诉钱包这个私钥已经被用来生成压缩公钥以及地址了。虽然WIF和WIF压缩格式的Base58编码版本前缀是一样的(0x80),但是最后加了一个字节数字的结果在 Base58 编码中第一个字符从 5 变为 K 或 L

比特币钱包导出私钥_一个比特币私钥有多少个地址_比特币地址是私钥还是公钥

# 比特币地址

比特币钱包导出私钥_一个比特币私钥有多少个地址_比特币地址是私钥还是公钥

## 为什么比特币地址有不同的长度?

由于6位二进制码可能大于58,所以在Base58编译时,可能按照*6位二进制分段编译,也可能按照5位二进制分段*编译。 因此可能存在不同长度的“Base58Check”编码地址。

## 为什么比特币地址以不同的字母开头?

比特币钱包导出私钥_一个比特币私钥有多少个地址_比特币地址是私钥还是公钥

# 其他一些应用:

1:加密私钥。

BIP0038加密方案是(BIP:Bitcoin Optimization Proposal):输入一个比特币私钥,通常使用WIF编码,带有base58chek字符串的前缀“5”。 此外,BIP0038加密方案需要一个长密码作为密码,通常由多个单词或复杂的字母数字字符串组成。 BIP0038 加密方案的结果是一个前缀为 6P 的 base58check-encoded 加密私钥。

使用时,需要先用密码解密加密密钥,才能看到真正的密钥。 相当于多了一层保障。

2:P2SH(Pay-to-Script Hash)和多重签名地址

以数字 3 开头的比特币地址是 P2SH 地址,有时被错误地称为多重签名或多重签名地址。 他们将比特币交易中的受益人指定为散列脚本,而不是公钥的所有者。 当资金被发送到以 3 开头的地址时,不仅需要公钥哈希和私钥签名作为所有权证明。 这些要求在创建地址时在脚本中指定。 这为多重签名创造了条件。 比如取款需要三个人同时签字。

3:比特币数量

比特币地址前面的一些字符可以有一定的含义,比如“1kidsXXXXXXXX”。 这使它更加独特。 但是每增加一个字符,难度就会增加 58 倍。

4:纸钱包

将密钥存储在纸质或其他介质上的钱包。

***内容参考或来自:***

精通比特币中文第二版,作者:Andreas M. Antonopoulos,乔艳红译,

椭圆曲线密码学入门(非常容易理解)

知道谁能最简单的解释一下椭圆曲线算法,secp256k1是怎么生成公钥和私钥的?

让我们谈谈有限域

为什么比特币地址以1开头