购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第12讲
从《九阴真经》到区块链的加密算法

和许多新事物一样,区块链技术是经过了长久的技术积淀,才首先通过比特币来到了世人面前。构成区块链技术最为核心、也是历史最悠久的学科,可能就是密码学了。

现如今,收快递成为一件稀松平常的事情,很多人每年要收几十甚至上百个包裹。双十一销售额每年都刷新纪录,2019年超过了4000亿元,更不用说这几年外卖的兴起,给人们提供了就餐的方便。这些包裹和外卖单都是通过物流公司和快递员,最终到达收货地址。

对于地址,不知道大家有没有思考过其中的学问。所有的收件地址,都是按照一定规则来填写的,一般是省市、区县、街道、门牌号,再加上收件人的名字和联系电话,这一连串信息就能保证快递员将范围逐级缩小,然后将货物准确送到我们手中。现在,国内的网购一般不用填写邮编了,主要是我国的邮编指定的是一片地区,定位精度不够高。英国的邮编和我国有极大不同,英国的每个邮编都能准确定位到每栋建筑,它的规则是城市的字母缩写、区号,最后加上街道的编号,有点像我国给汽车上牌照。

无论是填写收货地址的规则,还是邮编的规则,最终生成的都是一个具有唯一指向的地址。在比特币网络中,每个账户也有一个唯一地址,因此也需要一套对应的规则,这个规则在计算机领域被称为哈希算法,同时也被称为散列算法。哈希算法的目的就是通过一套规则,生成一个具有固定长度的结果。这个结果被称为哈希值。

就像从公司去机场可以开车、坐出租车、坐地铁,对于一个生成哈希值的任务,也存在多种可行的哈希算法。那么应该选择哪种哈希算法呢?好的哈希算法要具备如下三个特点:

(1)必须能快速计算出结果,但是倒推困难。

(2)只要原始内容发生一点变化,哈希值的变化就很大。

(3)不同的原始内容很难得到相同的哈希值。

要满足这三点要求,可用的哈希算法其实就不多了。尤其是第一条,随着计算能力的不断提高,破解哈希算法变得相对容易了,破解时间也缩短了。

比特币在生成账户地址时,使用的哈希算法是SHA-256,SHA是安全哈希算法的英文字母缩写,是由美国国家安全局研发的(没错,就是在“棱镜门”事件中斯诺登工作的部门),256是其在该系列算法中的代号。

具备了这三个特点的哈希算法,算出来的哈希值在一定程度上具备了原始内容的特征,因此也可以被称为“指纹”。就像人的指纹可以用来解锁手机一样,哈希值也可以用来对原始内容进行识别。

但是,这仅仅是针对一块数据的哈希计算,对于比特币这种超级区块链,它的区块总数马上就要超过60万了。对于如此大量的数据,如果直接对原始数据做哈希运算,再进行比较,会耗费很长时间。

在《红楼梦》中,曹雪芹通过贾、史、王、薛四大家族的故事,展现了人生百态。《红楼梦》中出场人物近千,读者很容易就被错综复杂的人物关系搞糊涂了,但是却不难记住这四大家族的姓氏是贾、史、王、薛。因为在大家庭中长大,除了有父母,还有许多亲戚,贾宝玉和贾琏是堂兄弟,贾宝玉和薛蟠是表兄弟,所有的亲人关系构成了一个大族谱。假如在一个家族中,每一对夫妻只生一个孩子,再将这张族谱倒过来,也就是将子女放在上边,父母放在下边,所得到的“金字塔”就具有了默克尔树(见图2-5)的形状。

图2-5 默克尔树结构

就像在族谱中的距离可以表示血缘关系的远近,默克尔树最大的优点是可以大大减少数据的传输量以及计算的复杂程度:只要有一个区块的内容发生了变化,最顶部的哈希值就会发生变化,就可以判断两棵默克尔树是相同还是不同,从而判断这两棵树所对应的数据相同或不同。使用默克尔树,可以快速对数据做完整性验证。比特币在支付过程中就使用了默克尔树的原理。

区块链作为一种复杂技术,为了防止从账户地址倒推原始内容,除了要使用哈希算法,还要使用加密手段。

在小说《射雕英雄传》中,九阴真经就是被加密过的,加密的方法是先将梵语翻译成汉语,再用汉语将读音标注出来。因此只有懂得这两种语言的人才能破解经文。虽然经过华山论剑一番争斗,全真派得到了九阴真经,但是没人能破解。最后是郭靖将古怪绕口的经文强行背了下来,机缘巧合之下,通过一灯大师将它破解的。

给九阴真经加密的方法,在密码学中被称为加密算法。仅仅有加密算法,对原文的保护力度还不够。如果使用特定的工具才能操作加密算法,就像必须用钥匙才能打开锁一样,加密的等级又可以得到提高。类似地,密码学中使用的“工具”就是秘钥。在钥匙和锁的例子中,上锁和开锁使用的钥匙相同,这就是典型的对称加密。除此之外,旅行箱上使用的一种锁叫海关锁,我们可以使用自己的钥匙锁上箱子,海关人员却可以利用海关钥匙打开和锁上所有人的旅行箱。自己的钥匙在密码学中称为私钥,海关人员的钥匙被称为公钥,开箱和锁箱的过程称为非对称加密。比特币密码学中的私钥和公钥要远比这个例子复杂,最重要的区别是,公钥是通过私钥生成的。

正如海关锁的例子,私钥和公钥都可以对消息进行加密,也可以彼此解密。也就是说,一对私钥和公钥,用私钥加密之后可以用公钥解密,用公钥加密之后也可以用私钥解密。

按照字面意思也很好理解,私钥肯定就是只能让自己一个人知道,而公钥是可以告诉别人的。

此时,假如我们想要对一段消息加密,如果是用私钥加密的,那么理论上所有拿到和私钥对应的公钥的人,都可以将消息解密。所以,用私钥进行加密是没有实际意义的。要对消息进行加密,就一定要使用公钥进行加密,当加密内容传到了正确的人手中,自然就可以用私钥解密了。

那么,私钥加密的意义是什么呢?因为私钥是只有真正的主人才知道,假如我用自己的私钥对一个文件进行了加密,只要有人能用公钥将这个文件解密成功,他就能判断对文件加密的人一定是我。这种情况下,用来加密的私钥就可以作为签名来使用,可以用来判断某个用户的身份。就像家里的大门钥匙,家庭成员每人都有一把,只要能用钥匙将门打开(当然不包括特工使用的特殊钥匙),肯定就是一家人。

讲到现在,我们已经知道了区块是什么,区块链是什么,也知道了区块链是如何通过加密手段去提高安全性的。那么,究竟是什么将它们串联起来,并保持正常运转的呢?下一讲将详细讲解。

延伸阅读:

如何使用公钥和私钥传输信息

如图2-6所示,甲乙之间使用非对称加密的方式,完成了重要信息的安全传输,工作原理如下:

图2-6 非对称加密工作原理

(1)乙方生成一对密钥(公钥和私钥)并将公钥向其他方公开。

(2)得到该公钥的甲方使用该密钥对机密信息进行加密后再发送给乙方。

(3)乙方再用自己保存的另一把专用密钥(私钥)对加密后的信息进行解密。乙方只能用其专用密钥(私钥)解密由对应的公钥加密后的信息。

在传输过程中,即使攻击者截获了传输的密文,并得到了乙的公钥,也无法破解密文,因为只有乙的私钥才能解密。同样,如果乙要回复加密信息给甲,那么需要甲先公布甲的公钥给乙用于加密,甲自己保存甲的私钥用于解密。 noPZFx0kFXhUBuqvFYQj3EYWKPzANm2Bxoz6VaCL9E2Z/1rNJwWnwfE9K/S/hfz5

点击中间区域
呼出菜单
上一章
目录
下一章
×