美文网首页区块链技术区块链程序员
比特币私钥,公钥和地址的关系

比特币私钥,公钥和地址的关系

作者: 糙米薏仁汤 | 来源:发表于2018-03-22 18:09 被阅读0次

哈希函数

哈希函数(Hash Function),也称为散列函数,给定一个输入x,它会算出相应的输出H(x)。哈希函数的主要特征是:

  1. 输入x可以是任意长度的字符串
  2. 输出结果即H(x)的长度是固定的
  3. 计算H(x)的过程是高效的(对于长度为n的字符串x,计算出H(x)的时间复杂度应为O(n))

椭圆曲线加密算法

椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。它的主要优势是在某些情况下它比其他的算法(比如RSA)使用更小的密钥但提供相当的或更高等级的安全性。

比特币使用了基于secp256k1椭圆曲线数学的公钥密码学算法。它包含私钥与公钥,私钥用于对交易进行签名,将签名与原始数据发送给整个比特币网络,公钥则用于整个网络中的节点对交易有效性进行验证。签名算法保证了交易是由拥有对应私钥的人所发出的。

BASE58编码

Base58是用于Bitcoin中使用的一种独特的编码方式,主要用于产生Bitcoin的钱包地址
相比Base64,Base58不使用数字"0",字母大写"O",字母大写"I",和字母小写"l",以及"+"和"/"符号

  1. 比特币所用字母表:
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
  1. Monero所用字母表:
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
  1. Ripple所用字母表:
rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz

私钥

实际上是长度为256bit的二进制数,256 bit = 1.15e+77
宇宙中所有原子的总数大概是10的80次方。如果我们进行2^256+1次随机生成私钥,那么必然会生成一个此前出现过的私钥;甚至从概率的角度看,进行2^130次私钥生成就会有99%的可能得到已有私钥,但是这个情况目前极难出现。

公钥

使用椭圆曲线加密算法(ECDSA-secp256k1)计算私钥所对应的非压缩公钥,该过程不可逆。

公钥的长度为65bytes:

  • 头部标识:1byte(0x04)
  • X-integer:32bytes(BE)
  • Y-integer:32bytes(BE)

地址

将公钥经过多次哈希散列及处理生成btc地址。

非压缩公钥生成地址的过程:

  1. 将完整公钥(头部标识 + X-integer + Y-integer)进行一次sha256()运算, 在对结果进行一次ripemd160()运算,结果a的长度为20bytes

  2. 步骤1得到的结果前加上Network ID Byte:

    • Main Network: 0x00
    • Test Network: 0x6f
    • Namecoin Net: 0x34

    得到的b长度为21bytes

  3. 步骤2得到的结果进行连续两次的sha256()运算,然后只取运算结果的前4bytes作为Checksum

  4. 步骤2b末尾添加上步骤3得到的Checksum, 得到c, 长度为25bytes

  5. 步骤4生成的c进行Base58编码, 即得到地址

步骤图示:

对于压缩公钥生成地址时,在步骤一中只取公钥的标识头+X-integer部分即可。

私钥,公钥和地址在比特币转账中的作用

在发起比特币的转账时,把私钥看作账户的密码,账单填写完毕后,需要用私钥对账单的内容签名,得到签名信息SIG ,然后将SIG附加在账单上:

SIG = SIGN(TX_DETAIL, PRIVATE_KEY)

已知SIG和账单内容,是无法反推出私钥的。那么,别人在拿到账单信息和SIG后,如何验证该SIG确实是由发送方地址对应的私钥签署的呢?
这就是公钥的作用,账单上还要附加上公钥,别人在拿到账单时,可以验证SIG是否合法

true = VALIDATE(TX_DETAIL, SIG, PUBLIC_KEY)

私钥->公钥->地址是单向不可逆的过程, 在签署交易信息时只会暴露公钥, 私钥是安全的:

关于btc交易及签名验证的原理和细则,可以搜索相关文献了解

相关文章

  • 优一区块链知识学习笔记5

    公钥和私钥 公钥加密,私钥解密 私钥→椭圆曲线乘法→公钥→单向加密哈希函数→比特币地址(过程不可逆) 私钥:随机选...

  • 比特币(6):挖矿

    比特币(1):从一个简单支付场景说起 比特币(2):私钥、公钥和地址 比特币(3):交易详解 比特币(4):网络架...

  • 比特币源码研读(2)--钱包标准BIP32

    之前了解了比特币的私钥、公钥和地址。简单地说,私钥是256位的随机数,公钥是私钥通过椭圆曲线算法计算出来,而地址是...

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

    比特币私钥和地址 每一个比特币账户实际上有三个部分,分别是私钥、公钥和地址。 私钥是一个256位的二进制数,用编码...

  • 比特币私钥,公钥和地址的关系

    哈希函数 哈希函数(Hash Function),也称为散列函数,给定一个输入x,它会算出相应的输出H(x)。哈希...

  • 区块链科普:区块链系统里公钥、私钥、地址是什么?

    在谈到比特币的时候,常常会谈到私钥、公钥、和地址, 理解这三者的关系,我们才能理解比特币。 作为一个现金系统,涉及...

  • 基础概念之钱包

    1. 私钥、公钥和地址 在比特币体系中,私钥、公钥和地址是三个非常重要的基础概念,那这三者分别代表着什么呢?类比我...

  • 比特币之密钥与地址

    公钥与私钥 比特币的所有权是通过数字密钥、比特币地址和数字签名来确定的。密钥是成对出现的,由一个私钥和一个公钥所组...

  • 比特币源码研读(5)—— 私钥、公钥和地址

    比特币中的私钥、公钥和地址,类比我们现实生活中银行卡,私钥是密码,地址是卡号,公钥还没有恰当的类比。在转账过程中,...

  • 比特币钱包教程

    简介 钱包程序用来创建接受比特币的公钥和使用公钥对应的私钥来花费接收到的比特币。钱包文件用来保存私钥和交易相关的信...

网友评论

    本文标题:比特币私钥,公钥和地址的关系

    本文链接:https://www.haomeiwen.com/subject/bwfzqftx.html