「区块链通识课」:从《九阴真经》到区块链的加密算法 | 第12讲

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

你好,欢迎收听由刺猬财经推出的《区块链通识课50问》。

和许多新事物一样,区块链技术是经过了长久的技术积淀,才通过比特币来到了世人面前。在这些技术中,最为核心、同时也是历史最悠久的,就是密码学。

双十一销售额每年都刷新记录,最近一次超过了2000亿元。普通人每年要收几十甚至上百个包裹。更不要说这几年外卖的兴起,给人们提供了就餐的方便。这些包裹经过物流公司和快递员的手,最终到达了收货地址。对于地址,不知道大家有没有思考过其中的学问。所有的收件地址,都是按照一定规则来填写的,一般是省市、区县、街道、门牌号,再加上收件人的名字和联系电话,这一连串信息就能保证快递员逐级将范围缩小,然后将货物准确送到我们手中。现在,国内的网购一般不用填写邮编了,主要是我国的邮编指定的是一片地区,定位性不好。英国的邮编和我国有极大不同,英国的每个邮编都能准确定位每栋建筑,它的规则是城市的字母缩写、区号,最后加上街道的编号,有点像我国给汽车上牌照。

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

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

- 必须能快速计算出结果,但是倒推困难;

- 只要原始内容发生一点变化,哈希值的变化就很大;

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

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

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

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

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

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

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

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

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

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

今年夏天,我国将推出新版人民币,新币将使用最新的防伪技术。因为货币涉及到国家经济的方方面面,所以采用新防伪技术是非常重要的。对于普通人而言,因为笔迹是比较难于模仿的,所以常常会通过签名签署各样的文件。经过签名的文件,就具备了签名人的身份认证。

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

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

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

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

讲到现在,我们已经知道了区块是什么,区块链是什么,也知道了区块链的是如何通过加密提高安全性的。是什么东西将它们串起来的呢,我们下一讲再见。

本文来自,仅作分享,存在异议请联系平台删除。本文观点不代表刺猬财经 - 刺猬区块链资讯站立场。

(0)
上一篇 2019年11月4日 下午9:11
下一篇 2019年11月4日

相关推荐