2.6 地址

比特币地址

这里有一份比特币地址的例子1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa。这是第一个比特币的地址,传言就是中本聪本人的比特币。比特币地址是公开的。如果要发送比特币给其他人,就得知道他的地址。但是地址(尽管都是唯一的)不是区分你是钱包的拥有者的东西。事实上,这些地址都是人眼可读的公钥文本。在比特币中,你的标识是一组(存放在你电脑或者其它你指定的地方)上的私钥和公钥对。比特币依赖加密算法的组合创建的密钥,用以保证世界上没有任何一个人可以绕开你物理机上的实体私钥就可以操控你的比特币。现在探讨一下这个算法机制。

公钥加密

公钥加密算法使用密钥对–公钥和私钥。公钥不敏感,可以公开给任何人。与此相反,私钥则不应该暴露出来,除了私钥持有者其它人都不能访问私钥,因为这是持有者身份标识。可以这么说,在加密了的世界里,你就是你的私钥。 
比特币的钱包本质上就是上面那些密钥对。当你安装钱包应用或者比特币客户端生成新的地址时,一对密钥就生成了。谁控制了私钥就控制了所有的发送到这个密钥(公钥地址文本)的所有币。 
私钥与公钥是随机的byte序列,因此打印出来也不是人可读的。所以比特币使用了另一个算法来把公钥转成字符串,让人类可读。 
If you’ve ever used a Bitcoin wallet application, it’s likely that a mnemonic pass phrase was generated for you. Such phrases are used instead of private keys and can be used to generate them. This mechanism is implemented in BIP-039. 
如果你有使用过比特币钱包应用,那么就好比给你生成了一个助记密文短语。这些短语可以用到代替私钥,也可以生成私钥?。这一机制基于BIP-039实现。 
现在知道比特币中是什么区分人员的。但是比特币中是怎么检测交易中output(及存在output中的币)所有权的?

数字签名

数学和密码学里,有一个概念叫数字加密。该算法保证: 
1. 数据在从发送者传输到接收者过程中不会被更改 
2. 数据由确定的发送者创建 
3. 发送者不能否认发送过这笔数据 
通过一个给数据的签名算法,获得签名,过后可以用来验证。数字签名和私钥一起使用,然后用公钥来验证。(公钥好比锁,大家可以都有,私钥就是钥匙,只有这个锁能证明是这个私钥能打开它,同样反过来,只有这个私钥能打开这个锁证明它是数据拥有者)。 
要签名数据得有两个东西: 
1. 需要签名的数据 
2. 签名的私钥 
签名操作产生签名,这个签名就存放在交易的input中。为了验证签名,还需要: 
1. 刚被签名的数据 
2. 签名 
3. 公钥 
简单来说,验证过程可以这么描述:检测签名是从这笔数据与私钥一起计算得来的,而这个公钥也是由该私钥生成的。 
Digital signatures are not encryption, you cannot reconstruct the data from a signature. This is similar to hashing: you run data through a hashing algorithm and get a unique representation of the data. The difference between signatures and hashes is key pairs: they make signature verification possible. But key pairs can also be used to encrypt data: a private key is used to encrypt, and a public key is used to decrypt the data. Bitcoin doesn’t use encryption algorithms though. 
数字签名不是加密,你不能在签名中重构出数据。这和hash有点像,你通过hash算法计算数据然后返回一个唯一的数据描述。区别签名和hash的不同是密钥对,密钥对使得验证签名成为可能。但是密钥对也可用于加密数据,私钥用于加密,公钥则用于解密数据。不过,比特币没有用加密算法。 
在比特币中,每一笔交易的input都是由创建了这笔交易的人签名。交易在被塞到区块前必须通过验证。验证意味着(除去了一些步骤): 
1. 检测input拥有权限使用前一交易中其关联的output 
2. 检测交易签名是正确的 
如图,签名和验证的过程: 

现在我们重新过一下整个交易的生命周期 
1. 首先,有包含coinbase交易的创世区块,此时并没有真正的input在coinbase交易里,所以签名在这一步是不需要的。而coinbase交易的output含有一个使用(RIPEMD16(SHA256(PubKey))算法的hash公钥。 
2. 当有人发送币时,会创建一笔交易。交易的input会关联前面交易(可能会关联多个交易)中的output。每回input都会存储一个公钥(没有经过hash处理)和一个用整个交易算出的签名。 
3. 比特币网络中其它的节点会收到这个交易然后验证它。它们会检测:input里公钥的hash值是否匹配引用的output的hash值(这一步用于确认发送者只发送了归属他的币);签名是否正确(证明交易是由币的持有者发起的)。 
4. 当矿工节点准备去挖新的区块时,它会把交易塞到区块中,然后开始挖矿。 
5. 当区块被挖出来时,网络中每一个其它的节点都会收到该区块被挖出来并被加到区块链中的消息 
6. 在区块加入区块链中后,交易就完成了,它的output就可以被新的交易引用(消费)。

椭圆曲线加密

前面说到公钥和私钥是两个随机的byte数组序列。因为私钥用于区分持币者,所以就需要满足条件:随机算法必须产生真正的随机bytes。不能让生成其他人已经撑有的私钥。 
比特币使用椭圆曲线来生成私钥。椭圆曲线是一个复杂的数学概念,这里就不详细解说了,有兴趣可以查看这篇文章(警告:很多数学公式)。我们只需要记住这个算法可以生成足够大和随机的数字。比特币中用的椭圆能随机挑出一个介于0到2²⁵⁶(近似于10⁷⁷,要知道,宇宙中有10⁷⁸到10⁸²个原子)。这么大的数字意味着几乎任意两次计算都是不可能产生相同的数字的。 
另外,比特币使用(我们也将用)ECDS(Elliptic Curve Digital Signature Algorithm)算法来签名交易。

Base58

现在我们把注意力回到比特币地址上来: 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尹成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值