本篇文章本来是要延着我们拆解区块的思路,继续分析剩下的" scriptPubKey", "scriptSig"的 ,这其实就要涉及比特币的脚本系统,这套系统所蕴含的思想,也是独具创新,这个思想可以说是智能合约实现的基础,值得好好说一说。但是我发现,在讲这个之前,有几个基础概念 ,需要交代清楚。那就是非对称加密,私钥、公钥、地址等,以及它们之间的关系。因此,本文就先来说说加密,文中没有太多技术性的解释,相信你一定能看得懂。明白了本文,对数字货币中这些常见的概念就了然于胸了,因为它正是——比特币最坚硬的基石。
1. 古老又现代的学科
加密可以说是一门古老的学科,自古以来就有之。只要信息涉及到利益,足够有价值,就值得为它加密。往小里说,精妙的藏头诗就是一种加密方法,它把关键信息编码到整首诗里。往大里说,人类的各种经济、战争都需要有加密的存在。尤其在战争中,一条信息有没有被安全加密,很可能关系到最终的胜利与失败。而在现代,对普通人而言加密更多普遍地用在经济活动中。
在我国很早就发明了用于战争军事的加密方法——字验代码法。据《武经总要》记载,字验是宋朝传递情报的密码,将各种情报内容,比如将士叛变、被贼围困等内容归纳为40项,编成40条短语,分别编码。将领带兵出发前,指挥部门与其约定一首40字的五言律诗作为解码密钥,诗中的每一字都对应一条短语;在战斗中,前后方就用该密码本进行通讯。
在谍战片《潜伏》中, 孙红雷主演的余则成在接受上级指令时,总是一边听着广播里念出的四位一组的数字,一边查阅小说《梦蝴蝶》。他所使用的那本书就是“字验”。
而在国外,古代运用加密技术最著名例子是是凯撒密码。凯撒是古代一位军事将领,他率先将加密技术应用于军事通信。它的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。
通过上面的例子,不难发现加密技术包括两方面,一个是加密算法,一个是加密密钥。二者就像锁与钥匙的关系,锁是加密算法,钥匙就是密钥 。想要打开一个房间,必须有针对这把锁的钥匙才可以。只不过在上锁的过程中,也需要有钥匙参与才能实现上锁。在上面字验代码法中《武经总要》中的那首诗、《潜伏》中的《梦蝴蝶》 以及凯撒密码中的位数就是密钥。
对于一段密文,只知道了密钥,不知道算法无法解开;而知道了加密算法不知道密钥,也无济于事。因此加密算法与密钥二者共同保证了信息的安全。但是,如果加密算法非常薄弱,密钥再复杂也很容易破解。比如凯撒密码,只要稍加分析人脑都能破解。另外,利用统计学知识,通过分析加密的长文字母出现的概率也很容易破解。
所以加密算法从根本上决定了加密技术抵抗破解的能力,但加密算法的设计是一个复杂的工作,需要数学理论的保证。如果算法设计的有漏洞,可以分析出规律,那么加密也就形同虚设。一个好的加密技术,算法应该是公开的,强度经得起检验的,理论上经得起论证的,那么只需要保证好密钥足够长、足够安全即可。现在计算机界加密算法也都是公开的,只需要拿来使用即可。
2. 关键的问题
这里还有一个关键的问题,不知你有没有发现?
举一个例子,Alice 要给 Bob 发送信息,使用公开的算法和密钥加密后,发送给Bob。 Bob 要想得到信息,必须有密钥才能解开。但密钥怎么才能告知Bob呢?也许你会说,可以当面告知。在现实场景中,也许这是个办法。但在网络环境中,如何实现一次顺畅的通信呢?
好办,我们可以聪明地给出答案:把密钥加密再发送给Bob啊。
那加密密钥的密钥怎么传送呢?这仿佛看起来是个 “鸡生蛋,蛋生鸡” 无解的死循环难题!
的确是的,直到一个新技术的出现。
那就是非对称加密。简单来讲,非对称加密里的这把锁很特殊, 它有两把钥匙, 一把用来上锁,一把用来开锁。锁定的时候的钥匙叫公钥,开锁的钥匙叫私钥。
这样,Bob先生成自己的公钥和私钥,把公钥公布出去。Alice 拿Bob的公钥加密后传给Bob,Bob用自己的私钥解密解开即可。
这个过程,完全没有密钥的传递,可用于解密的私钥只有Bob本人才知道,只有他能解密,所以是安全的。
相应的,前面只有一个密钥的情况就叫对称加密,因为加密与解密都需要同一个密钥。
由于非对称的加密,运算量较大,一般不会直接用它来加密大量的数据加密。它的主要用途是,传送对称加密的密钥,密钥得到安全的传送之后,通信的时候用对称加密来加密,
既考虑到了速度,又考虑到了安全,是不是一举两得,可以非常安心且舒心了?~~
3. 另个用途
由于非对称加密的这种 “一方隐私、一方公开” 这种特性,还可以有什么用途呢?
加密的过程是Bob有公钥私钥,Alice给Bob发信息,Bob来验证,Alice作为主动方,假如这个关系调换过来会怎样?
Bob有一对公钥私钥,Bob作为主动方,Alice作为被动验证方。Bob用自己的私钥来加密一段信息发送出去,作为知道Bob公钥的大众中一员的Alice可以作什么?
她可以用公钥解密段信息对吧? 如果解密对了,那就说明这段信息确实是来自Bob!
这个过程是一个什么过程?先别往下看,思考一下。
其实是一个“签名与验证”的过程么,Bob相当于对自己发布的信息进行了签名。 现实中签名多见于合同协议中,只要你在上面签了名字,代表你是完全认同这份协议,对于这份协议就具有了责任与义务。
所以非对称的加密,反过来,可以实现电子签名的功能。
也许上面,你注意到还有一个关键问题——我上面标注了:解密怎么算对了?这个问题,其实相当于,怎么证明这个公钥就是Bob的?
这个技术上,没有什么好方法。在现实中,怎么解决的呢?证明一个东西就是某个人的,需要借助第三方公信机构,这个机构颁发证书来认证。
所以在电子签名这件事上,也是如此。需要有这么个机构——CA, Certificate Authority。它的作用是对Bob的公钥也进行一次电子签名,证明这个公钥就是Bob的,Bob的公钥加上CA的签名就构成了Bob的证书。
如此,Alice 发现这个证书确实是公开的CA签过名的,就证明了这个公钥就是Bob的,进而就可以证明这段信息是Bob签过名的。所以要Bob发送签名的时候,就不能只包括信息及它的签名,还得有++Bob的证书(公钥+CA对这个公钥的签名)++, 别人才可以进行验证。
我们上面提到,非对称加密是很耗时的,而数据是可能很大的,比如一篇文章,怎么办?再开脑动思考一下。
哈希(Hash)——我们之前文章里提到过的哈希,哈希是把一段任意长的数据映射成长度固定的短数据,它具有难伪造的特性。
我们只签名文章的Hash值,最后验证签名的Hash值与原始数据的Hash相同,就可以了!
具体流程可以参见下图。
当今计算机与互联网的发展当然是软硬件的飞速发展为前提的,但背后也少不了加密技术这个功臣,尤其是非对称加密,一切的信息的安全传递、身份认证几乎都是建立在它基础之上的。怪不得有人把加密称为互联网大陆的守夜人(The Night Watch)呢,确实正是它像Game of Thrones里面的守夜人一样,默默无闻又坚韧地保卫着互联网这片大陆不受“异鬼”的侵袭。
参考:
https://36kr.com/p/5040438.html
https://zh.wikipedia.org
本公众号是活动“每周一新”第11周的践行产物。主要分享成长感悟、旅游经历、通用技术、IT趣闻、编程知识等,真诚欢迎你关注公众号。