七、比特币转账——签名认证:hash算法
关于比特币的转账的问题,我们先前已经说过,但很粗略,尤其是在签名认证这个点上,几乎是一嘴带过,现在好好说一说。
比特币是如何转账的呢?我们还是以Alice向Bob转账5个btc为例,Alice需要声明一下她要转账的这笔钱是哪来的,比特币其实没有余额的概念、只是一堆交易记录,首要需要声明要转账的五个btc是哪里来的、是谁转给你的。那里Alice可以胡乱声明吗?不行,因为她所声明的这些交易记录都会被检验,系统会自动对之进行核对,一旦发现有冲突就会拒绝这个声明。假设这5个btc分别来自两笔交易,张三转账2btc给Alice,李四转账3btc给Alice。然后Alice要写明,我将这5个btc转账给Bob。交易其实就算完成了。但是其它节点要对这个交易做两点验证:其一、这条信息是否Alice是所发,其二、Alice所声明的交易记录是否为真。后者比较容易,就是系统的自动核对。但前者如何进行?
现在就是要好好讲讲:如何验证信息是否为Alice本人所发的。不妨想想生活中我们使用信用卡也需要签名来确认是否为本人所使用一样,这里需要的是数字签名。具体流程是结合了第一集提到的的非对称加密和hash算法的。
这个hash算法是只能验证不能求解,什么意思?我们举个简单的例子,体会一下hash算法的精神;比如根号17202这个数的后几位小数是9291430,系统只发送9291430这个数,有没有可能猜到是哪个数的开平方后的后几位小数呢?这就太难了。但也有办法,那就是穷举法,一个数一个数去尝试,说个最笨的方式,你就从1开始尝试,最后终于尝试到了17202,惊喜地发现,这位仁兄、的开根号、的后几位、就是9291430,然后你就很激动地告诉大家:这个数就是17202。大家一算果然是,你好牛啊,你是花魁啊!
咋样,这就是hash算法,它的加密规则是公开的,就是将原本的数字开根号取后几位小数,但你很难靠这几位小数推测出来原本的数字,唯一的方案就是暴力破解、穷举法,最终可以将原本的数字验证出来,这就叫hash算法。注意,刚才只是说的一个简单的例子,真正的hash肯定是很harsh的,是很复杂的,但都是这个气质。
现在我们把hash算法这个过程抽象为h,我们要加密的信息记为M1,则hash值为h(M1)。我们知道hash值是不能反推出来的,而且也不存在说另外一条信息M2,使得h(M2)=h(M1)。
Alice向Bob转账这个过程中,Alice要需要发送两部分内容:一是援引的之前的交易记录,二是此番Alice要向Bob转账的交易记录,此两者构成了Alice要向Bob发送的整体信息,我们将之记做M1,可以想象这些信息都已经数字化了,即便Alice和Bob这两个人也是以公钥或者说是地址来代替的,双方都是匿名的嘛;我们只是为了表达方便,才直接说成Alice和Bob,其实是Alice用她这个地址给Bob的那个地址转账。
如果Alice只发送这个整体信息M1,别人怎么确定就是Alice发送的呢?这一切必须要获得比特币世界所有人的认可啊。所以Alice在发送M1之前,还要对之签名。怎么签?签什么?那就是Alice要对整体信息M1 hash一下,你就可以简单地认为、对M1进行了开根号,然后得到最后三位是369,也就是h(M1)=369。然后我们以第一集所讲的91×11为例,Alice私钥为11,公钥为91。那么Alice就会把这个h(M1),也就是369乘上11的后三位059,连同信息本身发送出去。这就是Alice完成了数字签名。
Alice周围各个节点收到信息以后呢?首先使用Alice的公钥也就是91对这个059进行解密,也就是059×91=5369,取后三位还原出信息为369。然后再对Alice发送的原文信息M1进行hash,发现结果也为369,这不就验证成功了吗?这信息的确是Alice所发送的。
再略微展开一下,这里使用了跟Alice私钥配对的公钥,因为只有配对的公钥私钥才能解密,所以这个解密成功表明了确实是Alice发送的信息;其次,对Alice发送的原文进行了hash计算,发现也是369,也说明了Alice发送的信息没有被别人篡改。所以这些从哪里转来的又转到哪里去的信息确确实实是Alice发送的,然后大家再核对这些交易记录跟已有的账本是否冲突;如果不冲突,我们就确认了这条交易记录。即Alice的地址向Bob地址转账5btc这个记录有效。等到Bob想要花掉这5个btc时候,他就需要援引这条交易记录,同时对内容进行hash,再用这个公钥地址配对的私钥进行签名,同时发送信息,周而复始,妙不可言。中本聪,你是大葱中最聪明的那根葱。
现在我要把刚才的验证过程再简单地梳理一下:ALICE在发送整体信息M1之前,先对M1进行了hash,发现结果是369,于是用私钥处理了369,也就是乘以11,将后三位059连同信息本身发送出去。这就是Alice完成了数字签名。Alice周围各个节点收到信息以后,先用Alice的公钥也就是91对这个059进行解密,即就是059×91=5369. 又发现将Alice原文信息M1进行hash,发现结果也是369,从而确认这天信息的确是ALICE发送的。你们说妙不妙,众妙之门,此门最妙。
版权申明:本内容来自于互联网,属第三方汇集推荐平台。本文的版权归原作者所有,文章言论不代表链门户的观点,链门户不承担任何法律责任。如有侵权请联系QQ:3341927519进行反馈。