区块链的 “六防” | 互联网信息传递的安全法则 , 还不懂你真out了?
现在的社会中众所周知互联网传递的是信息,区块链作为一个解决方案传递的是价值。既然传递价值,安全性就显得尤为重要了。
这里的“安全”的意思是,你的财富,你的交易记录,不会被别人,包括交易对手或者第三方,比如中介或者黑客恶意篡改,使你蒙受损失,同时,你也不能通过某种作弊行为达到伤害别人,为自己牟利的目的。
在区块链的世界里,并没有一个大家都信服的用来仲裁、调停和实施奖惩的中心机构,否则就会和去中心化的理念相冲突。于是,比特币的创始人中本聪及其他一些共同开发者,利用现代电子加密技术想出了一个办法。
这就涉及到哈希函数、数字签名技术、和“公钥”、“私钥”的概念。这些看似高大上的概念,除了技术上的确高大上之外,其实并不是特别难以理解。
这篇文章就是要用通俗易懂的例子,给大家完全解释明白这些让人头疼的名字。同时,分析区块链技术改变互联网信息传递安全的重要性。既然我们谈到交易安全,意思就是这种制度设计必须能够有效地防止一些风险。
区块链的六防
1.防止食言
假设我向人们发放纸条,上面写着“拿到此条的人可以来我这里领取1元钱”。再假设人们信任我不会食言而且我的签名不可伪造,他们就可以拿着我这张纸条,当成银行汇票一样去流通。
在数字货币的世界里,就把我发放纸条的行为叫做一个“承诺”:承诺拿到纸条的人都可以到我这里领1元钱。但这还不够,为了保证我不会等你拿到纸条时反悔说我没做过这个承诺,或者,我硬是说拿到这张纸条的人要给我1元钱而不是从我这里拿1元钱,我就得保证自己不会食言。
所以,现实世界里,我可以把这张纸条写好,放在一个信封里,摆到桌子上,此时,除非我会魔法,否则我是不可能更改纸条内容的。
在数字货币的世界里没有信封,但是它有密码学提供的哈希函数,一个哈希函数就相当于一个承诺。
哈希函数是什么呢?简单讲,哈希函数就是一个把现实信息变换成指定长度的数值的函数,这个指定长度的数值,就是“哈希值”,这个现实的信息,一般是一条交易记录。比如“张三向李四转了10个比特币”就是一个现实信息,与这个信息相对应的一长串象密码一样的数值就是“哈希值”。
哈希函数的作用不只是用来转换信息,更重要的是因为哈希函数具有隐秘性和约束性。
隐秘性,就是说任何人如果只看到哈希值,他是无法还原成真正可读的信息的,当“张三向李四转了10个比特币”这个信息经过一次哈希转换后,就等于把纸条装进了信封,任何不会特异功能的人都只能看到信封,而不能直接读取纸条的内容。
约束性呢?就是说一个哈希值对应一条信息,绝不可能同一个哈希值对应不同的信息,上面的例子里,就是说,我做了哈希转换,给出了哈希值,我就不能再更改纸条的内容、或者否认纸条的存在。
2.防止伪造
仅仅不食言还不够。一方面,假如有别人伪造我的签名,那么我就要承受很多损失;另一方面,假如我在签名之后,转而声称签名是伪造的,而不去兑现纸条上的承诺,那么拿到纸条的人就要承受损失。
在现实生活中,这种情况可以通过笔迹鉴定,由司法程序维护自己的利益。但是在数字世界,这一套就不管用了,解决的办法是密码学中的“数字签名”技术。首先,我们通过“数字签名”算法生成两组密码,在区块链的世界中,它们一组被叫做私钥,另一组叫做公钥。
“私钥”就是你用来签名的工具,需要严格保密,不能告诉别人,打死也不能说。“公钥”其实就代表了你的身份,需要公布出去,让全世界的人都知道。形象点说,公钥约等于你公司的银行帐号,私钥约等于你的帐号密码。
说约等于是因为,在区块链中,你的签名是通过你的私钥和你的信息(公钥)两个参数生成的,所以,你这次的签名只能用于这张纸条,把你这个签名换在另一张纸条上,是无法通过验证的,也就是说,签名不可伪造。
3.防止赖账
有了上面这些准备,我们似乎可以进行一次完美的数字货币交易了。但其实不然。假设一个交易的内容是张三给了李四1个比特币,尽管我们把这个交易记录利用哈希转换成为了哈希值,张三用自己的私钥为这个记录签了名,李四也通过公钥验证了张三的签名,现在这个比特币,貌似已经属于李四了。
但没料到双方有了纠纷,李四不承认已经收到了张三的比特币,这又怎么办呢?大家应该想到了,这时我们需要一个账本,只要账本上记录了这笔交易,李四就拥有这个比特币,不能说张三还欠他的钱。
可从村长的例子来看,这个账本放在谁手里都不保险,于是,干脆就大家人手一册吧,只要大家的记录都一致承认张三给了李四钱,那么李四也就无法赖账了。这是数字货币的另一个重要的概念——“共识”,只要交易获得所有人的“共识”,它就是真实的。
4.防止篡改
比特币与现实货币的另一个区别是,每条交易记录从最开始的账本,也就是所谓“创世区块”开始,只要获得共识,就会被永远记载,永远不会被篡改。
我们可以把这个特点理解为,这个帐本只能在下面增加记录新内容,不能返回去插入或修改旧的内容,也因为这个特点,区块链上的每一次信息改变或财富转移都是完全可以追溯的,这也是近年来很多机构试图利用区块链技术实现产品溯源的原因。
既然有了账本,也就是区块,就得有人去记账,就是添加和确认交易记录。这个记账的工作,就是我们常常听人说的所谓“挖矿”工作,从事这个工作的人就叫做“矿工”。
也许有人会问,挖矿是有收益的啊,记账看起来像是义务,怎么会把记账叫做挖矿呢?这里就是比特币的一个创造——奖励机制。每个矿工每次如果成功记一笔账,也就是在区块里添加一个交易记录,就会获得一笔比特币收入。
于是,大家就会抢着去记账了。但是,谁有资格去记账,却不是由系统指定的。矿工们要去完成的工作有点象是一个超高难度的、没有规律的“猜谜”游戏,当然,这个工作是依靠计算机去完成,谁最先猜出这个迷题,谁就有资格去记账,并且获得收入。
所以一般来说,谁的计算能力,也就是所谓的“算力”高的话,谁就更可能获得收入。当然,由于解谜靠的是随机猜测,所以算力高也只是让你获得收入的概率比较高而已,并不是绝对的。
5.防止分叉
一旦某个矿工挖到了矿,其他矿工的工作可以说是白费了,这个幸运的矿工会在区块上记下这笔交易,并向全网广播这条消息,其他区块会同步信息,并去寻找下一个记账的机会,这个同步过程,也是一次确认过程。
然而,如果两个人同时向全网广播,而其他矿工有的听到了张三的呐喊,有的听到了李四的呼吁,又该怎么办呢?这可能不是一个恶意的行为,但却是一个技术上可能产生的问题。
为什么呢?因为同一条交易记录只能在区块链上出现一次,如果两部分人分别记录了两个编号不一致的同一记录,比特币的区块链就出现了“分叉”,后来的人就好像发现同一个办事窗口排列着两条队伍,于是有的跟随甲队,有的跟随乙队,整个区块链的结构就被打破了,再调取交易记录时,这两条链就不知道哪一个才是正确的。
比特币的解决办法是哪条链子最长,就跟随那条,这个原则看起来简单粗暴,但是从比特币的8年多的运行来看,这种方法还是行之有效的。
6.防止“双花”
“双花”不是两朵花的意思。在比特币的世界里,双花,就是同一笔钱花两次的意思,学名叫做“双重支付”。
它是指张三明明给了李四1个比特币,后来张三想到,反正我又不是给了实际的货币,只是广播了一条记录,我不如再写一条记录,把同一个比特币支付给王五,这样我岂不是获得了两份交换收益呢?
而事实上,张三最有可能的是把这笔钱写一个交易记录支付给自己,那么,李四受骗上当,张三不劳而获。好在比特币对付“双花”也有独到的办法。首先,原则上以先听到并被记录下来的交易广播为准,后一笔交易如果使用了同一个比特币将被丢弃,然而,实际操作中,先后却不是那么容易分清楚的。
于是一个收款人聪明的做法是等待一笔交易被第一个幸运的矿工记录在案之后,再经过5次确认,也就是总共有6个人将这笔交易确认记录在区块上,才算作这笔交易的最终确认。现在他可以认为自己确实会收到这笔款项,从而开始发货。这是因为每次确认都需要时间,等待的时间越长两个交易被同时确认的概率就越小,6次确认之后,这个概率可以忽略不计了。
以上,我们以比特币为例,讲了区块链的“六防”,但这“六防”还不是区块链防止不正当交易的全部功能,基本上,有了这“六防”,一笔交易就可以安全地完成了,除非交易方不进入区块链的世界,否则就必须遵守这套规则。
虽然区块链还不能说是完美无瑕,但区块链通过制度设计而保障的交易安全,与目前现实世界的交易规则相比,已经解决了很大的问题。