主页 > imtoken冷钱包app > 比特币的私钥、公钥和地址是什么?
比特币的私钥、公钥和地址是什么?
在比特币中比特币地址多少位数,经常出现三个词:私钥、公钥和地址。他们的意思是什么?他们之间是什么关系?了解它们之间的关系和区别,是了解比特币的基础。
私钥
让我们先谈谈私钥。一般我们看到的私钥是如下字符串:
5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss
支持比特币协议的应用程序可以正确地将这个字符串转换成比特币的私钥,然后再转换成公钥来获取地址。如果地址对应比特币,你可以使用这个私钥花费上面的比特币。
我们所说的比特币私钥是密码学安全的,并不是说重复的私钥是不可能的,而是说不可能通过遍历找到特定的私钥,或者通过其他方式,比特币上的该地址可以在没有私钥的情况下使用,并且在数学上保证了私钥的安全性。
私钥的总数很大,但是私钥的生成依赖于随机数。很难实现真正的随机性。大多数私钥是通过伪随机算法(PRNG)生成的。
伪随机是使用函数来生成随机数。这不是真的随机。只是一个近似于 z 真实随机性的随机数。
私钥生成的随机性非常重要。密码学中的安全随机性是指:
随机性是不可预测的,随机的结果是无法遍历的。如果不是安全的随机数生成器,生成的私钥会被其他人碰撞。不依赖随机生成的私钥会大大降低生成的概率空间。
公钥和地址的生成依赖于私钥,所以我们只需要保存私钥即可。有了私钥,就可以生成公钥和地址,然后就可以消费对应地址上的比特币了。
因此,私钥字符串是将原始随机数转换为识别率高的形式。上面的私钥是将32字节数组转换为Base58。
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(版本+32位随机数)
新版本私钥格式=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(压缩公钥)
这两个地址是由私钥随机数生成的地址,每个地址上的比特币都可以用对应的私钥进行消费。目前大多数应用程序默认使用压缩私钥。
公钥是私钥和地址之间的中间桥梁,是交易验证中最关键的:
对于交易的验证,公钥的作用:
公钥生成地址,验证发送交易的地址是否与公钥生成的地址相同
公钥验证私钥的签名以验证交易是用正确的私钥签名的
公钥生成 公钥成对出现,公钥可以生成对应的唯一地址,从而可以确认该地址发送的交易是否使用了对应的私钥。