匿名账本
比特币的账户是用地址来表示,账本上不显示个人信息,转账是把比特币从一个地址转移到另一个地址。
地址与私钥
谁拥有某个地址的私钥,谁就能用这个地址进行支付(所以私钥一定保管好,如果私钥泄漏,比特币就可能丢失)。
比特币地址和私钥是一个非对称的关系,私钥经过一序列运算(其中有两次Hash)之后,可以得到地址, 但是无法从地址反推得到私钥。
非对称加密技术
如何证明你拥有某个地址的私钥(在不泄漏私钥的情况下)。
对交易信息进行签名
实际在签名之前,会先对交易信息进行Hash运算的到摘要信息,然后对摘要信息进行签名。过程大概是这样:
1.对交易进行hash, 得到一个摘要信息(Hash值)
2.用私钥对交易摘要进行签名(付款方在安全的环境下进行,以避免私钥泄密), 用代码表示大概是这样。
广播
在签名运算之后,付款节点就开始在全网进行广播:我支付了0.2btc到AAC9CBa239aFcc,签名信息是3cdferdadgadg,你们来确认一下吧。
广播过程实际上是发信息到相连的其它节点,其它节点在验证通过后再转发到与之相连的节点,这样的扩散过程。
广播的信息包含了交易原始信息和签名信息。
验证
其它节点在收到广播信息之后,会验证签名信息是不是付款方用私钥对交易原始信息签名产生的,如果验证通过说明确实是付款方本人发出的交易,说明交易有效,才会记录到账本中去。
(实际还会验证付款账号有没有足够的余额,我们暂时忽略这点)
验证过程实际是签名过程的逆运算,用代码表示大概过程是这样的:
如果验证输出的信息和原始交易信息的hash一致,则验证通过,记录账本,用代码表示大概是这样:
大家可以理解为付款地址为公钥,签名过程即为用私钥对交易摘要的加密过程,验证过程为用公钥解密的过程(为方便大家理解,严格来讲是不准确的)。
补充说明
上面为了更好的理解,我对一些信息进行了简化。
比特币系统使用了椭圆曲线签名算法,算法的私钥由32个字节随机数组成,通过私钥可以计算出公钥,公钥经过一序列哈希算法和编码算法得到比特币地址,地址也可以理解为公钥的摘要。
学习体会
所谓的匿名性,是指比特币的交易信息是经过哈希计算后得到的一串代码,从这串代码中你看不到付款帐户的详细。进行验证进,能够验证某个地址向另一个地址转帐的数量,也就是哈希运算的结果进行逆运算,得到和交易信息哈希运算的结果一致,即通过验证。
总感觉这里不太对劲,在《精通比特币》书中读到的信息似乎是这样的,为了获得交易的记帐权,挖矿的计算机通过算力碰撞求解交易中包含的某个随机数,谁先找到随机数,谁就得到记帐权,并获得比特币奖励。另外的用户只需要去验证这个随机数是不是经过签名后的交易信息哈希计算后的数值。与求解那个随机数来说,验证随机数要简单的多。(在这里我有个疑问,获得记帐权的矿工有比特币奖励,而另外的矿工是什么驱动他们去做验证工作的呢?)
网友评论