什么是密码学

本节聊聊什么是密码学。密码学底层的算法研究属于数学领域,总给人神秘兮兮的感觉,但是其实,密码学也涉及到加密经济和密码朋克的一些思想理念,算是一场民权运动,关系到互联网的自由,是非常让人激动的一个存在。但是如果不理解密码学的基本工作原理,是根本激动不起来的,这就是本节要填的坑。

定义

先说定义。维基百科上是这样说的:

密码学是对安全通信技术的研究

说白了,就是研究怎么让两个人在互联网上说话,还不让第三个人知道。密码学是数学和计算机科学的一个交叉,主要要实现两个功能:一个就是对数据加密,这个方向的主要任务是保证信息在传送过程中不会被窃听,所以密码学的第一个作用就是把一段人们可以读懂的信息,变成谁也读不懂的一串乱糟糟的密文,这个过程就叫做加密。加密这个功能是外行人直观上能想到的密码学的功能。但是,密码学的另一个功能其实也同样重要,因为互联网上的通信安全,还必须保证另外一点,那就是如果我认为是小明在跟我通信,那么我必须有一种方法,确认这个信息的确是小明发送过来的,而不是别人冒充小明发送的。换句话说,就是密码学的要能够去识别通信双方的身份,而这一点主要是通过密码学的另外一个功能来实现的,那就是数字签名。数字签名跟现实世界中的纸笔签名类似,可以用来认证签署人身份。

密码学早期比较常见于军事领域,民用方面涉及电子商务,银行支付,数字版权等等社会关键领域,说密码学是当代社会的一个支柱并不为过。最近几年,区块链和加密货币兴起,是密码学的发展又进入了一个新的阶段,区块链的底层是密码学技术。

密码学最基础的几个概念是加密,解密,密文和密钥。比如 Alice 有一段信息要传递给 Bob ,就要首先运行加密算法把信息转换成密文,密文就是一些看起来不知所云的内容。密文到了 Bob 机器上,Bob 运行对应的解密算法,就可以把密文再转换成信息。那么什么是密钥呢?其实在加密和解密运算过程中有两个要素,一个是算法,另外一个是密钥。密钥就是参与加密解密运算过程的一小段数据。目前流行的加密解密算法一般都是公开的,因为不公开一般也没人敢用,怕有后门。所以信息的安全完全在于加密人和解密人手里是握有密钥的。如果我们把加密算法封装到一个加密函数中,函数的输入就是两个,一个是信息本身,一个是密钥,而函数的输出结果就是密文。而解密过程也类似,就是把密文和密钥传递给解密函数,返回结果就是信息。我们以凯撒密码为例,凯撒要给他的将军发一封密信,这里凯撒使用的加密算法是把字母按照字母表顺序往后移动一定的位数,密钥为3,也就是移动的位数。比如信息本来是 A ,现在往后移动3个位数,就变成了 D ,这样生成的密文就谁也看不懂了。那这个过程中算法是“字母偏移”,而密钥就是3。将军收到密文后,解密算法就是把密文向前移动一定的位数,密钥还是3,所以实际就是向前移动了三位,这样就会解密得到原始信息了。

上面这个过程主要是介绍了加密,对于数字签名我们稍后再展开介绍。

好,关于密码学的定义,基本就聊这些,我们再来重复一次:密码学是对安全通信技术的研究,主要实现两个功能,加密通信和数字签名。

对称加密和非对称加密

关于密码学的加密这个功能,其实还分成两种主要的方式,一种是对称加密,另外一种是非对称加密。对称加密是相对古典也相对好理解的一种加密方式,指的是加密和解密采用同一个密钥。非对称加密是是互联网时代的产物,是当代密码学的标志性技术,特点是加密和解密的时候采用的是不同的密钥。对称加密是计算机诞生之前就使用的一种加密方式,而非对称加密在没有互联网的条件下基本没有卵用。

刚刚咱们介绍的凯撒密码就是最简单的一种对称加密形式。不过,在计算机时代,凯撒密码这种加密方式就太容易破解了。互联网上用的对称加密算法是非常复杂的,目前的最常用的对称加密算法就是美国政府推出的 AES 算法

非对称加密乍一听上去就非常奇怪了。加密的时候使用一个密钥,但是解密的时候是使用另外一个密钥的。具体做法是首先生成一对密钥,其中一个是公钥,公钥是可以公开给任何人的,另外一个是私钥,要严格保密。

咱们看一个实际的通信流程。Alice 想要给 Bob 安全的发送一句话。第一步,需要 Bob ,注意,是作为接收方的 Bob ,在自己的机器上生成自己的公钥和私钥。然后把公钥发送给 Alice 。这样,Alice 拿到 Bob 的公钥,用公钥把信息加密,然后把密文发送给 Bob 。Bob 收到密文后,在用自己的私钥解密密文获得信息。之所以公钥和私钥能够这样配合工作,是因为它们两个天生就是一对儿,有着天然的数学联系。非对称加密中最著名的算法有两种,一个是 RSA , 另外一个是 ECC ,也就是椭圆曲线算法。RSA 是非对称加密技术的最经典的算法,目前也依然是使用最频繁的算法之一。ECC 是更高效的一种密码学算法,比特币就是使用了这种算法。

已经有了对称加密了,为何还要发明非对称加密算法呢?原因主要由两个,第一个是互联网上没有办法安全的互通信息的,对称加密需要双方先沟通密钥,这个是做不到的,而非对称加密可以解决这个问题,因为通信之前,通信双方只需要给对方传递自己的公钥过去即可,而公钥是不怕暴露的。第二个是非对称加密是可以实现数字签名的功能的,对称加密则没有这个功能。

数字签名

接下来咱们聊聊数字签名。刚刚提过了,这是非对称加密算法才有的功能,作用跟纸上签名类似,是用来证明签署人身份的。

数字签名的详细介绍,Peter 会在专门的小节中去展开。但是简单来说,数字签名就是用私钥去生成的一串数字。数字签名是可以公布出去的,其他人没有办法根据数字签名去获得私钥。但是,其他人手里都是有签名人的公钥的,所以大家可以用公钥去验证签名是否有效,如果验证通过,大家就可以确认,这个签名的确是这个公钥对应私钥的私钥签署的。于是也就间接证明了签署人的身份了。

总结

好,本节我们对密码学做了一个简要的介绍,大体上要点有这么两点:第一,密码学是对安全通信技术的研究,要实现加密通信和数字签名两个功能。第二,密码学分对称加密和非对称加密两种思路,而非对称加密才能实现数字签名功能,是当代密码学的标志性技术。

参考: