转载自:https://blog.csdn.net/itcastcpp/article/details/80093860
我们前面已经提到,当一笔交易发生以后,会传播给比特币网络上的所有节点,交易是否已经发生了。例如小明将5个比特币支付给小郑后,信息就传播给其他人。就像在朋友圈大声说我结婚了。
但是和微信的朋友圈不同的是,微信的朋友圈大家都是朋友,所以我相信这是你做的决定。比特币网络是完全匿名的。所以那么我怎么知道是清华尹成将要完成这笔支付呢?这就涉及到对数据进行数字签名。每一位所有者通过对前一次交易和下一位拥有者的公钥(Public key) 签署一个随机散列的数字签名,并将这个签名附加在这枚电子货币的末尾,电子货币就发送给了下一位所有者。而收款人通过对签名进行检验,就能够验证该链条的所有者。
数字签名是一种精巧的设计。对于一个账户来说,包含了两个密码。一个是私密,一个是公密。私密是只能只有持有的,也就是说,私密表示了对于这一账户的唯一所有权。公密是所有的人都可以有的,用于验证。
一个比特币钱包中包含一系列的密钥对,每个密钥对包括一个私钥和一个公钥。私钥(k)是一个数字,通常是随机选出的。有了私钥,我们就可以使用椭圆曲线乘法这个单向加密函数产生一个公钥(K)。有了公钥(K),我们就可以使用一个单向加密哈希函数生成比特币地址(A)。在本节中,我们将从生成私钥开始,讲述如何使用椭圆曲线运算将私钥生成公钥,并最终由公钥生成比特币地址。私钥、公钥和比特币地址之间的关系如下图所示私钥就是一个随机选出的数字而已。
一个比特币地址中的所有资金的控制取决于相应私钥的所有权和控制权。在比特币交易中,私钥用于生成支付比特币所必需的签名以证明资金的所有权。私钥必须始终保持机密,因为一旦被泄露给第三方,相当于该私钥保护之下的比特币也拱手相让了。私钥还必须进行备份,以防意外丢失,因为私钥一旦丢失就难以复原,其所保护的比特币也将永远丢失。比特币私钥只是一个数字。你可以用硬币、铅笔和纸来随机生成你的私钥:掷硬币 256 次,用纸和笔记录正反面并转换为 0 和 1,随机得到的 256 位二进制数字可作为比特币钱包的私钥。该私钥可进一步生成公钥。
在上面的交易中,尹成的交易信息在传播给网络时,会附带上尹成的数字签名。我们知道了尹成的数字签名几乎不能够得出尹成的私密。但是却能够通过尹成的公密来很容易的验证到这是尹成发出的信息,所以我认为这就是尹成本人无误。是不是感觉很不可思议呢?一定都玩过数独也就是9宫格游戏吧。有时候我们很费劲的去得到数独游戏的解,但是我们可以却很容易的去验证结果是正确的。考虑一下这是100宫格,1000宫格呢?是不是得到结果很费劲,但是验证结果却很容易呢?将任何一串数据输入到SHA256将得到一个256位的Hash值(散列值)。其特点:相同的数据输入将得到相同的结果。输入数据只要稍有变化(比如一个1变成了0)则将得到一个千差万别的结果,且结果无法事先预知。正向计算(由数据计算其对应的Hash值)十分容易。逆向计算(俗称“破解”,即由Hash值计算出其对应的数据)极其困难,在当前科技条件下被视作不可能。
个人博客:https://dreamerjonson.com/