比特币是建立在区块链基础上的,区块链的基本技术支撑有三个:
- 非对称加密
- 点对点网络技术
- HASH现金
其中非对称加密和HASH现金技术的历史发展颇有渊源,最近仔细学习了一下密码学科普知识,总结一下。
历史回溯
虽然加密和解秘是人类诞生以来一直上演的剧目,方法也是形形色色,但到现在为止,可以简单归纳为两个历史阶段:
1976年之前
1976年以前,所有的加密算法,模式是一样的:
- 甲方选择某一种加密规则,对信息进行加密
- 乙方使用同一种规则,对信息进行解密
这时候所有的加解密都是在规则上下文章,主要有两大流派,隐写术和密码术。
隐写术就是利用隐形墨水之类的秘密传递手段,缺点显而易见,比如在很多小说里描述的火烤显形的段子。
密码术相对比较主流,最基本的是”替换”和”移位”两种方法,
替换法
即用一个字母表来替换明码字母的方法,举例:
明码表: a b c d e f g h i j k l m n o p q r s t u v w x y z
密码表: D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
明文: v e n i, v i d i, v i c i
密文: Y H Q L, Y L G L, Y L F L
上面这个简单的加密就来自于鼎鼎大名的凯撒加密。当然实际没这么简单,但原理就是这么回事。
移位法
即制定一系列规则,对明文进行移位交换获得密文, 举例:
相邻两个字符互换形成密文:
明文: v e n i, v i d i, v i c i
密文: e v i n, i v i d, i v i c
在1976年之前,大家用的最多的就是这两种方法交替多次加密,比如有多个密码表多次映射,多个移位变换规则进行多次变换等等
大家熟知的DES加密算法就是此类古典加密算法的顶峰,当然,现在已经由于安全问题不被推荐了。
上千年间,大家围绕这些基础手段斗智斗力,但始终有个缺陷无法解决:
如何把加密规则和密码表安全的通知对方?
用现代密码学里面的一个经典譬喻来描述一下:
- Alice和Bob是朋友,他们的住处离得比较远,Alice想要发送一则隐私消息给Bob
- Eve想要窃听Alice和Bob的通信,Alice和Bob无法防止Eve的偷看
- Alice把信放在一个盒子里,她上了锁,让邮差发给Bob,Eve没有钥匙,无法打开盒子,但是Bob也无法打开
那么问题来了,Alice如何把钥匙发给Bob呢?
古典密码术的所有问题,在于密钥分发的问题,而且看起来这个问题和“先有蛋还是先有鸡”的问题一样,是无解的:
Alice要安全的给Bob钥匙,就得放在加锁的盒子里,但是要打开盒子,就需要钥匙。
1976年之后
当然,世上的无奈,除了马云不能灌篮这类事情外,大部分都是能解决的。
在我们想出解决办法之前,先放一张拽拽的图片镇楼:
左边的Whtfield Diffie是早期的Geek典范,看看他迷离的眼神,拽拽的发型,不羁的络腮胡….等等等等,最让人生气的是他还有个善解人意的爱人~ ~
好,让我们再回到Alice和bob的情书问题上来,咳咳,不知道为什么变成Alice给Bob情书了~ ~ ~
现在设想这样一种解决手段:
- Alice把情书放到铁盒子里,上锁,发给Bob
- Bob收到盒子,没有去想办法打开它,而是又加上了自己的一把锁,发回给Alice
- Alice打开自己加的锁,发回给Bob
- Bob打开自己的锁
- 可恶的Eve只能干生气了,好可怜啊
哈,这证明了在我们的小譬喻里,分发密钥这个事情是可以安全解决的。1976年之前的人好笨啊,为什么不能这么搞呢?
少年,图样图僧破,在密码世界里,有一个重要的屏障:先进先出原则,就是先上锁的那个人,必须先打开锁。
???
你问我为什么会有这个屏障呢,我也说不明白啊,这是数学家们呕心沥血好多年也没解决的问题,嗯,少年,我看好你哦。