比特币交易如何防伪?私钥公钥地址啥意思?李永乐老师讲比特币(2)

一、身份认证

在上一讲咱们讲了比特币和区块链的基本原理,知道了比特币是一种电子记账系统,但是他的所有记录都是公开而且匿名的,这样比他必须面临几个问题,他如何去解决伪造记录、篡改记录或者是双重支付的问题。今天我们就来研究一下这几个问题。我们首先来说一下如何保证比特币的交易记录是真实的,也就是如何进行身份认证?我们必须保证每一条记录都是由比特币持有者所发出的,而不是由其他人伪造的。那么传统的传统的记录这种方式有哪些传统的方式?比如说可以刷脸是吧?人脸识别,我们去银行办业务,银行要求我们必须本人去,为什么?因为他要刷脸,对吧?第二个就是签名,我们可以在某个文件上签字,表示我们认可这份文件了,或者再狠一点我们搞指纹,每个人的指纹不一样,你按了手印就表示这个是你认可的,对吧?但是这些方式在电子支付系统上都不能实现,为什么?因为无论是人脸签名还是指纹,我用计算机系统我都可以进行拷贝,对吧?我可以拷贝下来你的签名,然后添加到我伪造的记录上,这不就行了吗?所以我们必须对这种传统的身份认证方式进行更改,就叫电子签名。
我们现在具体的针对比特币再来讲一下这个事儿。首先一个比特币的用户,他在注册的时候,系统会生成一个随机数,生成一个随机数,然后通过这个随机数,它会产生一个叫做私钥的字符串。私钥字符串,私钥又可以产生一个叫做公钥的字符串。私钥和公钥是对应的,同时又可以产生一个地址。那么这些东西它的重要性是不一样的,首先私钥你必须保存好了,它是你私有的保密的,如果你的私钥丢了,那你的所有比特币就都不见了,那私钥你必须存好,也不能让别人知道,所以有些人把私钥放在一个互联网的电脑里面,也有一些人把它背下来记到脑子里,但是私钥不能丢,而公钥和地址都是公开的。
如果你想让别人给你钱的话,你就把你的地址告诉他就可以了。如果你想给别人钱的话,你要把你的公钥和地址一起发送过去,但是这两个都是公开的,没有关系,而且通过公钥也反算不出来私钥,咱们上次说过SHA256算法,你只能挣这算反正算不出来,同样的思要到公钥可以算,但是反过来公钥,钥私钥是算不出来的,这也是一种加密手段。好的,那么私钥和公钥有什么作用?私钥可以对一串字符进行加密,可以对一串字符进行加密,而公钥可以把私钥加密之后的数据进行解密,进行解密。
那么加密和解密它这个钥匙不一样,这种加密方法我们称之为什么?称之为非对称加密。比如最典型的非对称加密就是SHA256加密,对吧?比特币也是使用了非对称加密,它加密的时候使用私钥,而解密的时候使用公钥,只有你能够加密,而任何人都可以解密你加密之后的信息。好了,现在我们就想问,假如有一个人A他想付给B10个比特币,它该怎么办?那么A他要做这么一件事,首先他写一条记录,就是A付给B10个比特币写这么一条记录,写完了这条记录之后,他把这条记录进行数字摘要,也就是哈希运算,他进行哈希算出一个摘要来,这个摘要就出来了,其实就是通过上SHA256算法算出来的摘要,这个摘要算完了之后,他在通过自己的私钥进行干嘛?进行加密,加密完了之后它就会产生一个密码,对吧?产生一个密码,好,这是A要干的事,然后他进行广播,他对前往进行广播,他广播什么?他首先把A给B10个比特币这件事儿,他要进行广播,告诉别人说我给了第10个比特币了是吧?然后他同时还要把自己的公钥广播出去,他要告诉别人我的公钥是什么?
同时他还要把这个密码,就刚才他经过加密之后的密码也广播出去,也广播出去,然后别人拿到了他的广播之后,就去琢磨说这一条信息说A给B10个比特币对不对?是不是真的是A给的人怎么去验证这么验证?首先其它接收到这条消息的人会对这条信息做哈希运算,得出一个摘要来。得出摘要来。得出一个摘要,这个摘要其实和A自己算出来,这要是完全一样的,对吧?同时利用公钥和密码进行解密,我们知道用公钥就可以解密一条信息,对吧?利用公钥和密码进行解密,它解密出一个解密出来一个密码,对应的是什么?是摘要,所以他也解密出一个摘要,来,我们不妨称1,这个是摘要2,然后他会把这两个摘要进行对比,进行对比,如果摘要一盒胶12相等,就说明你这个密码是符合要求的,密码符合要求是因为你有你唯一的私钥,对吧?所以你可以进行加密,我就认为确实是你的广播确实是A的广播,但如果你发现这个针要一盒胶二是不一样,那就说明什么?这就说明这条消息是伪造的,于是所有的用户都会拒绝这条消息,这样一来就保证了所有A发给B的消息都是由A签发的,对吧?这种方式我们就称之为电子签名是利用了哈希运算的这种办法来进行电子签名的,其实我们的银行卡很多的时候也是用这种方法进行签名的原理差不多。好,那么这是第1个问题,就是如何证明A发给B10个比特币,这条消息是A发出,而不是伪造的,就是防伪。但是还有另外一个问题,如果A要给B10个比特币A根本自己就没有10个比特币该怎么办?或者说本来就只有10个比特币,但他同时发了两条消息,一一条给B10个比特币,一条给C使得比特币这个时候别人又如何去鉴别?这就是第2个问题。
比特币交易如何防伪?私钥公钥地址啥意思?李永乐老师讲比特币(2)

二、双重支付

我们如何对付双重支付的如何对付双重支付的问题?好,我们来研究一下这个事,要解决这个问题,我们首先先来说一下如何进行余额的检查,如何进行余额的检查?什么叫余额检查呢?就是说你本来只有10个比特币,你非要付给别人20个,那我就要拒绝,对吧?我怎么去拒绝这件事?我们知道区块链是把很多的交易信息一个块一块打包,再把它串一个链起来的。而且每一个人在使用区块链比特币的时候,他都会下载所有的信息,就从第1个创世纪的块开始,一直到后面所有的信息他都知道。

比特币交易如何防伪?私钥公钥地址啥意思?李永乐老师讲比特币(2)
2.1余额检查
所以如果有一天A说了,我要付给B10个比特币,并且把这件事儿给广播出去,那么别人接触到这个信息之后,就去检查,怎么检查就会去找,说你的比特币从哪来的,比如在这个矿里面A已经获得了通过挖矿,他获得了50个比特币,然后在这个块里面A已经支付了支付了20个比特币,这样一来人们一算获得50比特币,支付了20比特币,你现在还剩30比特币,所以你付给B20比特币,于是这条消息就会被网络所接受,但是如果A说了说我要付给B60个比特币,那么别人就算一算,发现你只剩30了,你付给B60个比特币,那么别人会拒绝这条消息,所以它不会被确认,你发出去也没有用,因为别人不能被确认。
什么时候被确认知道你这条消息被别人接受了,并且打包到一个新的块里边了,是吧?新的块里边含有这个消息,就是A付给B10个比特币了,那么就算你这个信息被确认了,所以这样就可以解决你的余额的问题,方法就是通过追溯,通过追溯,这是第1个问题。
2.2双重支付
那么第2个问题就是如果A进行了双重支付怎么办?什么叫双重支付?比如生活中有这样一种人,他卖房子,结果卖房子的时候同时跟两个买家签约,他把这一个房子卖了两次,这就叫双重支付。
同样在比特币上也存在这样一个问题,假如有一个人A他本来就有10个比特币,是吧?他本来就有10个比特币,但是他几乎同时发了两条消息。第1条消息叫A付了10个比特币给B通过这么个消息,第2条消息叫A付了10个比特币给C他几乎同时发出这两条消息了,那么这会有什么结果?每一个网络上的接收者他接触到A的消息之后,都会去算说A的余额还够不够?结果如果有人接触到第1条消息的话,它在进入第2条线它就会拒绝,因为网络上的每一个用户接收到A的消息之后,都会去追溯,看一看A的余额够不够,所以有些人可能会先接收到上面这条消息,他接触到上面一条消息的时候,他就会自然而然拒绝后面这条消息,因为他的余额已经不够了,当然也有一些人可能先接触到底下这条消息,这样一来他自然会拒绝上面这条消息,对吧?
此时越接触到了也没有用,因为他们会把这个消息打包在自己块里边,此时还没有确认什么时候确认,直到有一个幸运儿找到了那道数学题的解,然后打了一个新的块,比如说这个人这个人他突然之间找到了一个数学题的解,找到学习的解释,相当于挖到了一个矿,于是他就到了一个新的块,对吧?到了一个新的区块,这个区块里边就包含这条消息,I付了10个比特币给B这个消息,然后他又把这个块给链接到刚才的这个上面了,那链接到上面去了,这样一来这条消息就会被确认,而这条消息被确认之后,刚才打包了底下这条记录的这些人一看上面有个新块乐,于是怎么样?所有人都会放弃自己的块,所有人都会放弃自己,块,转而所有人都会站队站到顶上去,也就是说上一条像就被确认而顶一条消息就被抛弃。同样道理,如果很幸运,底下这个人接受算出这道数学题了,那么这条消息就会被确认,上午这条消息就会被放弃。
所以当我们接收到别人给我们付款的时候,不能当时就认为钱已经到账了,我们必须等着等到什么时候,等到这个块已经形成了,我们这条消息已经被记录到这条主链上了,我们才能认为这个钱真的打给我们了,这就是我们如何去防止双重支付的问题。那么比特币还有一个问题,就是他如何如何防止篡改,防止篡改。防止篡改,比如说有一个想篡改记录的人,他不可能伪造别人的签名,因为签名就是不可伪造的,对吧?电子签名,但是他可以删掉某一条记录,比如说他本来付给了别人10个比特币,现在他要把记录删掉对吧?伪造一下,篡改一下纪录,我怎么缓解这件事?

三、防止篡改

3.1最长链原则
首先我们要说比特币有个原则,叫最长链原则。什么叫最长链原则?就是说这是一个区块链,这是一个区块链,比如说目前已经算到这个地方了,那么下面有很多的矿工在那拼命的找方法去打包一个心块结果,很有意思的是几乎同时有两个矿工分别找到了一个新的块,分别找到了一个新的块,然后把新的信息向周围人广播,广播了之后,有些人一看上面这个已经有人找到新块了,是吧!底下人一看,也有人找到新块乐,而且找到新矿是底下!
好,现在这两拨人每一个人都会以自己接收到的第1个新块为准,他接收到这个块,当然他也知道好像还有个分支怎么办?他们先不管,先按照自己的接触到的块继续往下算,直到某一个时候,比如说有个幸运儿,比如这个人,他算出来了一个下一个块,于是就在自己战队的排列上又加了一个块,大家看此时这条链就比这条链要长了。当他把这条消息广播出去之后,全网都会知道这条链更长一些,这样一来这些人会怎么样?这些人会重新站队跑到上面去,然后大家再继续往下去算量,那么继续往下算,继续往下算,刚才挖矿这个人他就失败了,矿本来被挖出来的,结果又被废弃。
有人说我就不上去,我就在我底下这条链往下走,行不行?那也可以,但问题是全网的基本原则都是找最长链,如果你认为你自己一个人可以对抗其余所有的人,你可以最后造的这条块链比刚才那个还要长很多,那行你这个也继续挖,但是大家都认为最长链是最有希望成为公认原则的,所以大家都会往最长链去跑。好了,有了最长链原则之后,我们就可以说一下怎么样去防止篡改了?
3.2防改
怎么样去防止篡改?我们看一下,刚才我们说过有一个人他希望抹掉自己的一条记录,什么记录?就是这个人A他本来是支付给了B10个比特币的,但是现在他不想要记录了,他要想把它给抹掉怎么办?他可以通过这样的一个方法,后面本来已经有一个块了,对吧?已经有一个块儿,现在他在这重新计算,重新打包重新计算,算出一道数学题来,大家注意这个工作量是很大的,全世界一起算,每10分钟出一个,但是你作为一个个人,你想改掉这个东西,你就要自己算出来,对吧?算出来之后你重新打包,于是造出一个资料来,资料里是不含A给B的信息的。好,你伪造了之后别人不承认,为什么?因为这条链不够长,对吧?于是怎么办?于是你在上面继续往下算,继续往下算,什么时候你算的比别人全世界算的还要长了,那么全世界的人都会跟到你,于是你伪造就成功了。也就是说理论上来讲你是可以进行改动的,但问题是改动了之后别人不承认,除非你的计算能力超过了世界上其余所有的人。有人说万一就有这样的一个坏人,它控制了全世界50%以上的电脑,然后就为了改掉一个区块链的记录,大家要注意,如果一个人他有很多钱的话,他就不会去干当一个小偷。同样道理,如果有一个个人他能够控制全世界50%以上的电脑的话,那么他不会去通过这种办法就为了抹掉自己一条记录,他为什么不在这努力地挖矿,让自己有更多的钱。
所以从这个角度上来讲,比特币通过这样的方法来防止篡改,你一旦想篡改,你是跟全世界的人进行对抗的,你需要链接很长的量,然后还能战胜全世界其他所有的人,所以这件事其实可能性是非常低的。而且随着后续的量的增加,你改动的难度就越来越大,所以一般大额的交易都要多等几个块儿,比如说等6块之后,我们就认为基本上没有可能再进行篡改了,我们就确认这个消息,比特币作为一种技术手段是非常新颖而且漂亮的,比特币也没有一个中心,发行机构不用担心主权危机,比特币总量固定,不会存在滥发的风险,比如说B天生具有防卫属性,而且可以追溯,比特币交易的时候手续费非常低,由于有这么多的优点,有人甚至提名了中本聪应该获得诺贝尔经济学奖。
但是又因为比特币是有匿名的货币,它在进行交易的时候只需要一个公钥和一个地址,你又不知道这公钥和地址到底是谁,所以就跟很多犯罪分子提供了可乘之机。比如有人利用比特币进行敲诈、进行贩毒、进行洗钱等等,这样的活动也受到了一些*部门的打击,还有一些人把比特币当作一种投机手段,以特币的暴涨暴跌造成了许多人一夜暴富,也有许多人得倾家荡产,我想大家应该把比特币看作是一种技术手段,如果要购买比特币,也应该从投资而不是投机的角度。
因为从长期来看,任何一种投机行为都会使你输得倾家荡产,而只有投资才能使你稳定的获利。