什么是比特币私钥,公钥和地址

在比特币中,三个词经常出现,那么它们分别代表什么意思?它们之间是一种什么关系呢?
首先讲一下私钥,比如这样的字符串片段:
5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss,这是私有密钥。如果应用正确地支持比特币协议,那么可以将该字符串识别为私有密钥,将其转换为公共密钥,并将其转换为地址,如果相应地址上有比特币,则可以使用该私有密钥支付比特币。公共密钥和地址的生成都依赖于私钥,因此私钥是比特币世界中最重要的一环,有了公共密钥和地址,就可以花费比特币上对应的地址。用私人密钥支付比特币的方法就是签署此私人密钥所拥有的未支付交易(加密)。
《什么是比特币私钥,公钥和地址》
从本质上说,私钥是由32个byte组成的数组,1个byte等于8位二进制,一个二进制只有两种可能,0或1,因此私钥的总数是2^(8*32)=2^256个,这个数目已经超过了宇宙中原子的总数,如果想要遍历所有的私钥,耗尽整个太阳的能量也是不可能的。在密码学上,我们称之为比特币私钥的安全,并非不可能出现重复的私钥,而是不可能通过遍历所有的私钥途径,或其他途径,找到上面包含比特币的私钥,因此私钥在密码学上是安全的。
私有密钥的总数目很大,但私有密钥的生成却是依赖于随机的,不依赖于随机将大大减少私有密钥生成的概率空间,在密码学上,安全的随机指的是随机不可预测,随机的结果不可遍历。加密中安全的随机产生的私钥可以用来保存比特币,如果随机不安全,你得到的私钥有可能与其他人的一样,那么你的比特币就有可能丢失。
一个32byte数组由256个0或1组成,如果显示出来的话,不只是因为识别率太低,而是因为太长。所以私钥将被转换为上面所示的形式,上面的私钥是Base58对32个byte数组进行的转换,Bitcoin使用的Base58是一种独特的编码方式,主要用于生成Bitcoin的钱包地址和私钥。与Base64相比,Base58没有使用数字”0″、大小写”O”、字母大小写”I”、”l”和”+”/”符号。就是为了肉眼容易识别,在输入时不容易出错,虽然我比较喜欢用QR码扫描私钥,毕竟上面那段不规则的字符串输入还是很费劲的。
《什么是比特币私钥,公钥和地址》
除了以5开头的私钥之外,我们还看到以“L”和“K”开头的私钥,这是为什么?五,L,K的另一面代表什么?这个部分的内容就是指向公钥的。
公共密钥由私钥生成,私钥通过椭圆曲线(ECPoint)生成,私钥经过椭圆曲线变换后,将产生一个65byte的数组,一般我们会看到这样的公共密钥:04a34b99f22c790c4e36b2b3c2c2cba2d492eea75abea235,通常是在hex(16进制)处理后,公钥的Base58将会显示出来,而公钥的Ba75abea235则是在公钥签名交易后,通过hex(16进制),公钥签名交易后,公钥签名交易后,公钥签名交易后,公钥签名交易后,公钥签名交易后,公钥签名交易后,公钥签名交易后,公钥签名交易后,公钥签名交易后。
关于为何会出现5开头或L,K开头的私钥,问题在于公钥的大小,例如,例子中的私钥不仅包含来自32个byte数组的信息,还包括来自私钥version以及来自是否被压缩的公钥,早期的比特币开发者不知道所生成的公钥是可压缩的,被压缩的公钥只有33个byte,而非压缩的公钥只有65个byte。对于比特币来说,压缩公钥的意义要大得多,因为比特币是非中心化的p2p加密货币,每个节点都将拥有完整的交易记录,除了coinbase(挖矿获得的比特币)之外的所有交易都将发送公钥,支持压缩格式的公钥,交易数据将减少32字节,这对于整个比特币网络来说意义重大,整个比特币网络的数据将减少不少。
《什么是比特币私钥,公钥和地址》
当私钥用Base58编码时,支持未压缩公钥的私钥实际上是一个33位的byte数组,第一位存储版本信息,当前值为128。支持压缩公钥的私钥为34位,第一位为version信息,其值也为128,多位为最后一个byte,用于存储是否压缩信息,1为支持压缩格式的公钥,5开头的私钥不支持压缩格式,而L和K开头的私钥支持压缩格式。
公开密钥是否压缩除了影响私钥的显示外,还影响地址。该地址由公钥生成,看到的地址都是用Base58编码处理的,地址的生成比较复杂,说地址之前必须先说hash160这个名字,地址由公钥生成,但是在公钥生成地址时,会先说hash160。
产生的过程是,对公共密钥执行一次SHA256,然后对所得到的结果执行一次RIPEMD160,然后从结果中提取20个byte的数组,该数组代表所得到的hash160,例如:9a1c78a507689f6f54b847ad1cef1e614ee23f1e,在此20位的byte数组之前加上一个byte,即地址的version信息(当前为0)得到21位的byte数组,将其转换为Base58,也就是说,hash160和地址可以相互转换。
私有密钥既有压缩公钥,也有未压缩公钥,每一个公钥都产生一个地址,而私有密钥则有两个地址,分别是:1HZwkjkeaoZfTSaJxDw6aKkxp45agDiEzN(未压缩公钥)、1F3sAm6ZtwLAUnj7d38pGFxtP3RVEvtsbV(压缩公钥),这两个地址都是该私有密钥的地址,而且每个地址上面的钱都可以用该私有密钥支付。但现在大多数应用都是支持压缩格式的私有密钥。
这篇文章简单介绍了一个私钥、公钥和地址。

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注