主页 > 官网imtoken安卓版 > 比特币的私钥、公钥和地址是什么?

比特币的私钥、公钥和地址是什么?

官网imtoken安卓版 2023-04-17 06:14:38

在比特币中,经常出现三个词:私钥、公钥和地址。他们的意思是什么?他们之间是什么关系?了解它们之间的关系和区别,是了解比特币的基础。

私钥

让我们先谈谈私钥。一般我们看到的私钥是如下字符串:

5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss

支持比特币协议的应用程序可以正确地将这个字符串转换成比特币的私钥,然后转换公钥,然后得到一个地址。如果地址上有对应的比特币,就可以用这个私钥花费上面的比特币。

我们所说的比特币私钥是密码学安全的,并不是说重复的私钥是不可能的,而是说不可能通过遍历找到特定的私钥,或者通过其他方式可以将比特币花在不使用私钥的地址。私钥的安全性在数学上得到保证。

私钥的总数很大,但是私钥的生成依赖于随机数。很难实现真正的随机性。大多数私钥是通过伪随机算法(PRNG)生成的。

伪随机是使用函数来生成随机数。这不是真的随机。它只是一个更接近真实随机的随机数。

私钥生成的随机性非常重要。加密安全的随机性意味着:

随机性是不可预测的什么是纳米比特币,随机的结果是无法遍历的。如果不是安全的随机数生成器,生成的私钥可能会被其他人碰撞。不依赖随机生成的私钥会大大降低其生成的概率空间。

公钥和地址的生成依赖于私钥,所以我们只需要保存私钥即可。有了私钥,就可以生成公钥和地址,然后就可以消费对应地址上的比特币了。

Base58是比特币使用的一种独特的编码方式,主要用于生成比特币的钱包地址和私钥。与Base64相比,Base58不使用数字“0”、大写“O”、大写“I”、小写“l”以及“+”和“/”符号。主要原因是肉眼容易识别,打字时不易出错,

但是,上面的不规则字符串输入起来相当费劲。当然,你也可以将私钥转换成其他形式,比如字的形式(12或24字),大脑钱包的形式什么是纳米比特币,或者自己。记住某句话来生成私钥。注意,大脑钱包生成的私钥随机安全性不高。

除了以5开头的私钥外,还有以L和K开头的私钥,为什么会这样? 5. L 和 K 波段代表什么?这是关于公钥的。

公钥

比特币的基础是椭圆曲线数字签名算法:

椭圆曲线数字签名算法 (ECDSA) 是使用椭圆曲线加密 (ECC) 的数字签名算法 (DSA) 的模拟

椭圆曲线密码术 (ECC) 是一种公钥和私钥加密技术:

ECC 是基于椭圆曲线理论,利用椭圆曲线方程的性质来生成密钥,而不是使用传统方法通过大素数的乘积来生成密钥。其特点是:密钥长度小、安全性能高、整个数字签名时间短。

DSA(DigitalSignature Standard)数字签名技术:

在DSA数字签名和认证中,发送者使用自己的私钥对文件或消息进行签名,接收者在收到消息后使用发送者的公钥验证签名的真实性。

这里很清楚,私钥是用来签名的,公钥是用来验证签名的。

公钥由私钥生成。它由椭圆曲线(ECPoint)生成。私钥可以通过椭圆曲线变换得到公钥。公钥是一个 65 字节的数组。一般我们会看到这样一个公钥:

04a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd5b8dec5235a0fa8722476c7709c02559e3aa73aa03918ba2d492eea75abea235

显示的公钥一般显示经过hex(十六进制)处理后的字节数组。不经过Base58的原因是:公钥用于验证私钥的签名。一般来说,我们很少看到它。用私钥签署交易后,公钥会随交易一起发送,这样对于一笔完整的交易,他会使用交易中包含的公钥来验证私钥的签名是否正确。

私钥和公钥成对出现。用私钥签名的数据只能通过对应的公钥来验证,地址也是由公钥生成的,这样就可以验证交易是否被花费。属于这个地址!

私钥开头的第一个数字的区别用来区分私钥使用的公钥是否支持压缩格式

压缩后的公钥对比特币来说意义重大。比特币是一种去中心化的 p2p 加密货币。每个节点都会有完整的交易记录。除coinbase(挖出的比特币)外,每笔交易都需要发送公钥,并且支持压缩格式的公钥。每笔交易的数据可以减少 32 字节,这对于整个比特币网络来说是非常有意义的。整个比特币网络的数据都在传输和保存。可以大大提高效率。

当私钥为Base58编码时,旧版未压缩公钥的私钥为33位字节数组,第一部分存放私钥的版本信息,当前值为128,生成的 Base58 是 5 开头的。

旧版未压缩私钥=Base58(版本+32位随机数)

支持压缩公钥的私钥是34位,第一个是版本信息,它的值也是128,额外的位是最后一个字节,用来存放是否压缩的信息信息,1表示是支持压缩格式的公钥。经过Base58处理后,恰好是L或K开头

新版本私钥格式=Base58(版本+32位随机数+是否支持压缩)

示例中的私钥不仅包含32字节数组的信息,还包含私钥版本信息和公钥是否被压缩(根据位数和值判断)

公钥是否压缩不仅影响私钥的显示,还影响地址。

地址

公钥太长,所以有一个较短地址的概念。另一方面,没有发送交易的地址,我不想公开我的公钥。地址由摘要算法生成,不会暴露。公钥的实际内容:

地址由公钥生成。地址的长度为 25 个字节。经过base58处理后,在地址末尾添加一个4字节的校验位。

我们看到的地址一般都是经过Base58编码处理的。地址的生成比较复杂。从公钥到地址生成的过程是先对公钥进行SHA256(哈希算法)。

sha-256-hash=SHA-256(公钥)

经过hash160处理后,hash160:RIPEMD(PACE integrity Primitives Evaluation Message Digest)是一种原始的完整性校验消息摘要,160标准对应20个字节:

hash160=hash160(sha-256-hash)

经过hash160处理后,可以得到一个20字节的数组。在 20 位字节数组的前面添加一个字节。这个字节是地址的版本信息。地址的版本当前值为0,版本信息在不同的值将用于比特币的测试网络,比特币地址的表示为:

地址=Base58(版本+hash160(SHA-256(公钥))+校验和)

校验和用于校验比特币地址,然后将地址的版本信息加到得到的hash160中,然后对信息做两次SHA-256,取前4位作为校验和:

校验和=get_front_four(SHA-256(SHA-256(version+hash160)))

Hash160 是这个过程中最重要的信息。从这个值可以得到地址的前21位(第一位是版本)和下面的校验和,然后就可以生成Base58格式的地址了。而且hash160也可以从base58格式的地址中得到,也就是说hash160格式可以和base58格式的地址互换。

私钥的不同对地址有何影响?

已经说过了:

一个随机数可以有一个压缩的公钥和一个未压缩的公钥

而且每个公钥都会生成一个地址,而上面的私钥其实可以有两个地址:

1HZwkjkeaoZfTSaJxDw6aKkxp45agDiEzN(未压缩的公钥)

1F3sAm6ZtwLAUnj7d38pGFxtP3RVEvtsbV(压缩公钥)

这两个地址就是这个随机数生成的地址,每个地址上的比特币都可以用这个随机数对应的私钥来消费。目前大多数应用程序默认使用压缩私钥。