提到密码学,我们并不感到陌生,比如许多战争电影中,很多人戴着耳机围绕着机器根据“嘀嘀嘀”的声音截获密文,再进行解密获得军事情报,这就是密码学的早期应用。在1970年之前,密码学还基本是由国家权力机构垄断,而后随着技术不断进步,才渐渐进入公众领域。
目前密码学作为区块链的核心内容之一,在区块链网络的安全交易、隐私保护还有安全访问中起到不可忽视的作用,是支撑区块链不可缺少的核心技术。所以今天,我们就用通俗易懂的语言跟大家介绍一下“区块链中的密码学”。
区块链密码学发展史
首先,要从它的发展史说起,这就不得不提到凯撒大帝(Caesar)——第一个把“替换密码”用于军事用途、并且记录下来的人。他用替换字母的方法创造了最早的“密文”:将每个字母,用字母表中这个字母之后三位的字母替代。这是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。
在这个过程中,人人都认识的文本是“明文”,加密的规则是“密钥”,通过密钥,原本大家都认识的明文就变成了看不懂的“密文”。这种加密方法用我们现在的眼光看会稍显幼稚,但在当时,用这种方法形成的“密文”非常难以被破译,而这种用明文加密的思路也被沿用了上千年。
随着科学进步,这种代换方法慢慢被人找到了破解方法,比如:学习过英语的我们知道,e是最常见的字母,其次是字母t和a,如果按照凯撒密码加密,一个密码字母对应明码字母,那么密码字母中出现次数最多的很有可能就应该对应明码字母E,以此类推,很容易就可以排除掉大量的密钥,从而快速地找到正确的破译方法。
于是在1467年左右,佛罗伦萨的建筑师Alberti发明了多表代换密码,也就是在一个多表替换密码的密文中,会使用多个字母作为密码。多字母替换密码比单字母更难破解,因为其替换可能性多。以此为开端,衍生出了非常多设计精良的多表代换密码。而直到二十世纪二十年代,人们才终于可以开始使用各种机械加密设备进行自动加密处理。
计算机的诞生帮助密码学跃升至新高度。1984年10月香农(信息论之父)的信息论出现,标志着现代密码学的形成,这时出现了极具代表性的“对称加密算法”,即:当传递信息时,信息先要通过密钥进行加密,加密后的明文以二进制的方式转播,再通过相同的密钥解密获得信息。
“对称加密”,密钥只有一把,如果你想让一个人看到你用密钥加密的信息,就必须把密钥传递给对方,对方才能进行解密。但这种加密的方式有一个问题,一旦密钥在传输过程被黑客截取,那么自己加密的信息则会面临被破译的风险,所以密钥的保存与安全传输就成了关键问题。
直到1876年,“非对称加密”现世后,人们才攻克这一难关,同时也标志着公钥密码学的成型。它相较之前的“对称加密”,最大的区别就是:“非对称加密”的加密和解密过程分别使用了“公钥”和“私钥”,密钥不再只有一个,而是以一对的方式出现。
1976年,Whitfield Diffie和Martin Hellman提出“公钥密码”这一概念,希望能实现在不直接传递密钥的情况下就能完成密文的解密,1978年,随着RSA公钥密码机制的完善,开启了“非对称加密算法”的时代。
由简单到复杂,由实体到数字化,密码学成为了信息安全的保卫者,在以不可篡改、不可伪造著称的区块链世界中,它发挥着巨大的作用。
区块链中的密码学
介绍完区块链密码学的“前世今生”,我们具体看看,在区块链的整个体系中密码学原理所起到的作用,在这里我们主要介绍哈希算法和非对称加密技术。
1、哈希算法
哈希算法又称为哈希函数,是一个密码学工具,可以用在数字签名中,还可以用于证明密码安全体制、作为安全组件设计多种密码体制和安全通信协议。作为比特币和区块链的核心技术。简单来说啊,它跟我们中学时期学到的函数是相同性质的东西,只要代入一个x,就能得出一个y,只不过它的计算特别复杂而已。代入一个数据后生成的加密结果被称为这一数据的哈希值,它可以被看作是这个消息的指纹,是世上独一无二的表示。
相比较一般的函数而言,哈希函数有两个特别厉害的地方:
1)对于普通的函数,我们平时代入的x只限于数字,得出的y数据也长短不一。而对于哈希函数,不管你代入什么,比如:数字、英文字母、汉字或者几者组合等等,并且不管这个数据长度如何,都只能被生成一个固定长度的加密结果(常见为256位);
2)在我们课本中学到的函数往往既可以通过x解答出y的值,也可以通过y解答出x的值,可是对于哈希函数,代入x后能够生成数据为y的加密结果,却不能够由y再计算回到x,并且每一个x都只会对应一个y,在到目前为止能力范围内无法找到与之重复的结果。也就是说,哈希函数具有绝对的单向性。
举例:我们在网上找了一个哈希(Hash)算法工具给“OKBS”加密,形成哈希值如下所示:
如图中,初始信息“OKBS”,经过哈希算法计算器的加密,就变成了256位的加密结果了。注意,哈希算法具有绝对的单向性和敏感性,任何输入数据发生改变(哪怕只有极细微的差别)都会输出一个不一样的输出结果,这就是它的厉害之处了!
2、非对称加密算法
非对称加密算法的完成需要公钥、私钥和加/解密算法三个结构。
首先,密码学中的“安全伪随机数生成器”能够产生一对密钥(即:公钥和私钥),这两者是成对的,公钥是可以公开的,而私钥则由用户自己保留。
用私钥加密的数据只有用公钥才可以解密,反过来,用公钥加密的数据也只有用私钥才可以解密。公钥和私钥之间的这种数学关系,使得私钥可以用于生成特定消息的签名。而这个签名可以在不暴露私钥的前提下通过公钥进行验证。
也就是说我把一段信息用私钥进行签名(加密过程),然后把这个数据连同签名和我的公钥发送给对方,对方就可以通过公钥对签名进行验证(解密过程)对比数据从而验证数据的有效性。
对应到比特币的交易系统中,就是:公钥生成的钱包地址用于接收比特币,而私钥则用于比特币支付时的交易签名。
在支付比特币时,比特币的所有者需要在交易中提交自己的公钥和该交易的签名。而比特币网络中所有节点可以通过所提交的公钥和签名进行验证,从而确认支付者对交易的比特币的所有权。这样就实现了既不暴露自己的私钥又能让所有的节点有效地验证交易。
了解哈希算法和非对称加密技术后,我们来具体看一看交易过程中如何进行签名和验证:
发送者想要在区块链网络中发起一个交易(在此理解为打包传送一条名为x的原文)时,先要通过哈希函数将原文x形成一个信息摘要x,再用自己的私钥对其进行加密形成数字签名x,即加密过程:
接着,发送者会把原文x和数字签名x合在一起发送给接受者:
接收者接收完毕后,会将原文x用相同的哈希算法提取信息摘要y,再对发送者发送来的数字签名x用对应的公钥进行解密得到信息摘要z,通过比较y与z是否一致来确认接受到的信息是否有效(完整且在传输过程中未被修改)。
以上简单介绍了密码学在区块链体系中起到的作用,密码学可以为一切虚拟网络的安全性提供保证,安全性是一切交易的基础,区块链网络离不开加密算法这块基石。
随着科技发展日新月异,我们的加密算法也还会不断改进,让我们拭目以待吧。