前几天 Peter 发布了一门密码学入门课程《区块链背后的密码学》https://learning.nervos.org/crypto-block 。不过相信大家首先要问的一个问题是,普通程序员真的要学密码学吗?这个领域不是应该交给那些专家去搞的吗?所以,今天写本文,就是是为了激发一下大家对密码学的兴趣。密码学是区块链的根本,有大牛甚至不愿意把区块链叫区块链,而干脆叫 Applied Cryptography ,也就是应用密码学。而区块链似乎是个要影响全社会的新技术了,所以看来咱们大家也到了都要懂一些密码学知识的历史节点了。想想我自己以前见到密码学知识就绕着走,原因就是因为我曾经对密码学有三个误解,所以今天的主体内容就围绕这三个误解展开。

误解一:以为只是专家的事,其实是民权运动

先来聊第一个误解:以为密码学是专家才应该关心的事,其实它是一场事关你我的民权运动。

密码学最早就是军火,的确只是国家支持的一些科研专家才会去研究。但是到了上个世纪八九十年代,情况就发生了变化,密码学开始走向民用,同时美国兴起了一个运动,叫密码朋克运动。密码朋克运动的宗旨是:以密码学为工具,保护个体隐私。Peter 自己读到密码朋克的故事之后,突然茅塞顿开,因为原来我以为密码学主要是为了维护政府和银行等重要部门的安全的,但是没想到密码学其实也是可以用来保护弱者不受强者欺负的。

关于密码学作为一个人文思潮,一场民权运动,我这里就不展开了,密码朋克们都有什么具体的主张,课程中有一节专门讲《密码朋克运动》https://learning.nervos.org/crypto-block/1-punk 。大家自己去看一下,或者也可以听一下,因为有文字稿也视频。

关于为啥是对弱者隐私的保护,咱们聊完了第二个误解之后,理解就会更深入了。第一个误解:”以为只是专家的事,其实是民权运动“,就聊到这里了。

误解二:以为是关于密码的学问,其实是关于加密的学问

下面进入我的第二个误解:以前我以为密码学是关于密码的学问,其实它是关于加密的学问。

密码学这个词是从英文 Cryptograhpy 翻译过来的,其实这个翻译我觉得容易让人误解,稍微好一点的翻译应该是”加密学“。因为 Cryptography 是两个词组成的,Crypto 意思是”隐藏“,graphy 这个词是”书写“。所以 Cryptograhpy 直接翻译过来就是“隐写”。那么为啥要隐写呢?为啥不明文来写呢?这是因为,当代密码学要解决的是在互联网上两个人之间安全通信的问题。互联网是个公开场合,也就是说任何人都可以轻松窃听到你我通信的内容,所以要达成安全通信,信息就不能明文来写,而要”隐写“。其实”隐写“这个词实际中并不常用,大家应该早就听出来了,所谓的”隐写“,其实就是加密的意思。信息加密之后的内容就是密文,密文在网上传播,被截获了别人也看不懂,所以安全通信就达成了。而这样的加密通信过程,就是当代密码学要解决的核心问题。所以说 Cryptograhpy 这个词,翻译成”密码学“其实不太好,翻译成”加密学“,或者”加密技术“更准确。

密码学也当然会涉及设置安全的密码方面的问题,但是这不是核心,当代密码学的核心技术是公钥加密技术。或者叫”公开密码加密技术“,也可以叫”无秘密加密“技术。不是没有密码,而是有两个密码,一个叫公钥一个叫私钥。怎么样?开脑洞吧,要想知道两个人直接如何借助一对密码,来进行加密通信,请看《区块链背后的密码学》课程的《公开密钥加密》那一小节:https://learning.nervos.org/crypto-block/4-pub ,这个机制不是一两句话能说清楚的,所以这里就不展开了。

当代密码学要实现的功能有两个:一个是加密通信,另一个是数字签名。加密通信研究的问题是:我给你发信息之前,如何先把信息加密成密文,你那边收到密文,如何进行解密。而数字签名,是用来识别签署人身份的,没有数字签名,你怎么知道信息是我给你发的呢?万一是攻击者发给你的呢?所以数字签名也是在网上进行安全通信的必要一环了。关于数字签名,课程中也专门有一个小节做了详细的介绍:https://learning.nervos.org/crypto-block/6-sign 。

这就是我想聊的第二个误解了:原以为密码学是关于密码的学问,其实它是关于加密的学问。而实现了加密通信,意味着我和你直接说任何话,不会被第三个人知道,所以说密码学是对个人隐私最有力的保证,意义重大,密码朋克们就对此非常的狂热,认为密码学能彻底扫除社会的欺凌和不公。

误解三:以为背后的数学根本学不会,其实很简单

最后,来进入第三个误解:以前我以为密码学背后的数学原理我根本学不会,其实很简单。

当代密码学诞生的标志性事件是 RSA 算法的发明。RSA 算法至今仍然是最为广泛使用的加密算法之一,理解了 RSA 算法其实也就理解了其他算法,例如椭圆曲线算法的基本原理了。《区块链背后的密码学》课程中,我给大家奉献了两小节的内容,分别是《 RSA 算法–基本原理篇》,以及《 RSA 算法–粗略数学推导篇》,带各位拆解一下 RSA ,但是目的不是让大家学数学,而是理解密码学背后的大思路。

所以细节大家去看课程,这里不展开。总之 RSA 算法就是基于两个非常简单的单向运算,一个叫取模运算,一个叫整数分解运算。这两个运算通过欧拉函数,欧拉定理等一些中间技巧拼到一块儿,就达成了一套公开密钥加密算法。如果要深究整个数学推导过程可能算不上太简单,但是通过 Peter 的粗略推导过程,理解基本原理是非常简单的。当然类似比特币这样的区块链项目大都基于另外一套算法,叫做椭圆曲线算法,这个课程中也有专门的小节做介绍,椭圆曲线跟 RSA 的大思路是完全一致的。

这就是咱们要聊的误解之三了:以为背后的数学根本学不会,其实很简单。

总结

本文的主体内容就是这些了。最后回顾一下这三个误解:第一个,以为密码学只是专家的事,其实是事关你我的民权运动。第二个,以为是关于密码的学问,其实是关于加密的学问。第三个,以为背后的数学根本学不会,其实很简单。《区块链背后的密码学》这套视频课程分享给大家,希望能带给大家一个轻松愉悦的学习旅程。