《比特币一个虚幻而真实的金融世界全集.com》第12/37页


纸币的世界靠中央银行的领导和经济专家决定发行多少货币,靠不断提高制作工艺和更高级的验钞机进行货币防伪,靠国家力量来保证购买力。

而在比特币的世界,上面的规则通通失效。数字世界有自己的规则:通过数学,更确切地说是通过密码学保证比特币种种天方夜谭般不可思议的特性。

03 比特币技术解密

比特币数学基础

密码学和协议

说起密码学,大多数人想到的可能是摩斯电码、移位加密、字符替换之类的东西。在各种侦探小说里,“字母e在英文里的出现频率最高”这种基本的破解方法也被很多人熟知。但真正说到密码学的研究内容,大家其实都比较陌生。密码学关注的事情主要有两点:一是加密解密的数学算法本身,二是如何在现有算法基础上实现各种安全需求。

这两点有什么差别呢?以防止“消息泄露”举例,我们首先想到的是防止消息在传输过程中被第三方截获,比如说话被偷听、邮件被偷看、网络数据被窃取。而事实上,小偷是防不住的,但我们可以保证数据即使被偷了,窃取者也无法使用。只要双方事先约定一套加密解密的方法,以密文的方式传输信息,就可以有效地防止信息泄露。

但有时候消息泄露的内涵比这更复杂,加密算法的方案并不适用。设想一下,公司某小组有10个员工,他们都想知道组内平均月薪是多少,但都不愿意透露自己的月薪数额,公司制度也不允许讨论薪水。有什么办法可以既得到答案又不泄露各自薪水数额呢?其实办法很简单,甚至不需要用到密码学知识。第一个人随便想一个大数,比如12 345,接着在纸上写下自己月薪与这个数字之和并传给第二个人;第二个人再在这个数字上加上自己的月薪,然后将最新数字写到另一张纸上传给第三个人;直到最后一个人把纸条传回第一个人,第一个人用字条上的最终结果减去只有自己知道的12 345,就得到了所有人的月薪总和,而且每个人都没有泄露自己的薪水。

以上两类情况分别对应了密码学的两个研究方向:密码学不仅研究加密解密的数学算法,更多时候,它还研究保护信息安全的策略,我们称之为“协议”。

哈希算法

现在设想这样一个场景:爱丽丝和同学鲍伯商量明天早上谁先去教室打扫卫生。两个人都不想去,于是鲍伯想了一个办法:“我扔一枚硬币,你猜一下是正<¨。COM电子书 ZEi8。COm电子书 。COM电子书 。COM电子书¨>面朝上还是反面朝上。如果猜对了,我去打扫卫生。如果猜错了,嘿嘿……”如果爱丽丝和鲍伯此时是面对面地站在一起,那么这个策略当然没有问题,可以说相当公平,甚至可以用更简单的办法,比如石头剪子布。可是,如果他们是通过网络聊天的方式商量,那爱丽丝显然不会同意这个办法,因为她担心自己无论猜正面还是反面,鲍伯都会说她错了。

有什么办法可以保证通过网络聊天的方式也能做到公平扔硬币呢?有人会说,那我们给扔硬币的结果加个密吧。现在假设任意奇数都代表硬币的正面,任意偶数都代表硬币的反面。鲍伯随便想一个数,然后乘以另外一个数,把结果先告诉爱丽丝,比如1 234×531 = 622 254,鲍伯想的是1 234,然后把622 254这一结果告诉爱丽丝,并声称另一个秘密数字531是密钥,由他自己保管。但这样做显然也不行,因为验证结果的时候,鲍伯可以谎称1 234才是密钥,531是原始数字,这样鲍伯依然立于不败之地。但是如果鲍伯事先把密钥公布出来呢?这样也不行,因为爱丽丝知道密钥后就能直接计算出原始数字,便失去了保密作用。

传统加密方法不能公开的原因是知道了加密方法也就知道了解密方法,只需要反向计算就能解密。那么,有没有一种加密方法,使得即使知道了加密方法,也不能恢复出原文呢?有的,我们只需要在加密过程中加入一些不可逆运算就行了。这次鲍伯又设计了一种新加密方式:

1.鲍伯先设想一个数,并加上123 456。

2.把结果平方,取第3~10位,组成一个8位数。

3.再用这个数除以456 789求余数,然后把这个结果告诉爱丽丝。

4.爱丽丝猜测鲍伯设想的是奇数还是偶数。

5.鲍伯告诉爱丽丝原始数字,爱丽丝按照上面的过程再计算一遍,看结果是否和鲍伯给的结果一致。

假设鲍伯想的依然是1 234,按照上面的过程依次得到:

1 234+123 456 = 124 690

124 690×124 690 = 15 547 596 100

54 759 610 mod456 789=401 719

(Mod表示除法求余数)

爱丽丝拿到的结果是401 719,既可以验证鲍伯有没有撒谎,同时爱丽丝又很难根据401 719反向算出123 456。

这样也不能绝对保证鲍伯不作弊,但如果鲍伯想作弊,他就必须事先找到一奇一偶两个数,它们按照上面的运算能得到一样的结果。这个难度取决于上面算法的难度。

在密码学中,这种会丢掉一部分信息的加密方式被称为“单向加密”,也叫作哈希算法。

一个可靠的哈希算法至少需要满足下面几个条件:

1.对于给定的数据M,很容易算出哈希值X = F(M);

2.根据X很难算出M;

3.很难找到M和N令F(M)=F(N)。

真实世界的哈希算法比上面的过程要复杂得多,但原理是类似的。而且即使对于很长一段数据,仅仅改变一个字母,也会造成二次哈希结果的巨大差异。被认为安全且在互联网中被广泛使用的哈希算法包括MD5(消息摘要算法第五版)、SHA-256等。比如“1 234”使用MD5算法计算的结果是“81DC9BDB52D04DC20036DBD8313ED055”,而用SHA-256算法计算出的结果是“03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F97→←8D7C846F4”。哈希算法的结果长度都是固定的,从上面看,MD5的结果长度为32个字符,SHA-256则达到64个字符,所以SHA-256看起来更安全一些,更难找到能算出相同结果的M和N。

这种单向加密算法并不能用来进行普通的信息传输,更多是用来进行传输结果的准确性验证。很多。COM电子书站都提供了下载文件的原始MD5值供校验,以防止文件被病毒修改。常用的BT(比特流)下载也是通过特定的哈希算法来确认每一部分数据是否下载完成。

非对称加密

现在我们来看一下在真正要进行信息传输的情况下应该怎么办。

同样假设爱丽丝和鲍伯要通过互联网传输一份绝密情报,那么,如何阻止第三方在网络上截获信息呢?如果是一般情况,可能的步骤是使用文件压缩工具,比如WinRAR对文件进行加密压缩,然后通过电子邮件或者QQ把加密的文件发过去,为了更安全,或许还会发短信或者打电话把解压密码告诉对方。但是作为绝密情报传输的操作人,面对的可能是国家机器,所有的网络和通信工具都处于被监听状态,如果按照上面的过程,依然会造成信息泄露。如果想办法把密码加密后再发过去,但是给密码加密的方式又该如何确定呢?如果爱丽丝和鲍伯事先认识,或许可以见面并约定将出生日期加上手机号作为密码,但更多情形下,双方并没有可以利用的公共秘密。

当前:第12/37页

提示: 双击屏幕进入下一页