密码学是一门年轻的科学。

虽然数千年来一直用于隐藏机密信息,但作为一门科学(或许也是一门艺术),对于密码学的系统研究大约在一百年前才开始。

使用密码学(以某种形式)的第一个已知证据是公元前 1900 年左右在埃及贵族 Khnumhotep II 墓穴主厅的雕刻铭文中。抄写员随意使用一些不寻常的象形文字符号来代替比较普通的象形文字。其目的不是隐藏信息,而是改变其形式,使其看起来更庄严高贵。虽然铭文不算是一种隐秘文字,但对原文进行了某种形式的改造,而且是已知最古老的文字。在大多数主要的早期文明中,都有一些使用密码学的证据。“Arthshashtra”是 Kautalya 所著的关于治国之道的经典著作,描述了印度的间谍机构,并提到通过“隐秘写作”给间谍分配任务,听起来是不是像古代版的詹姆斯·邦德?

直到公元前 100 年左右,众所周知,凯撒大帝使用某种加密方式将秘密信息传达给驻守在前线的军队将领。这种置换密码称为凯撒密码,可能是学术文献中被提及最多的历史密码。(密码是用于加密或解密的算法。)在置换密码中,明文(明文是必须加密的消息)的每个字符会置换为另一个字符以形成密文(密文是加密后的消息)。凯撒使用的变化形式是 shift by 3 cipher(移 3 位密码)。每个字符偏移 3 个位置,所以字符“A”替换为“D”,“B”替换为“E”,以此类推。到达末尾后,字符将绕回到句首,因此“X”将替换为“A”。

Figure 1.

很显然,此类密码取决于系统的保密性,而不是加密密钥。一旦知道了系统,就可以轻松地解密这些加密的消息。实际上,可以通过利用语言中字母的频率来破解置换密码。

在 16 世纪,Vigenere 设计了一种密码,据说这是第一个使用加密密钥的密码。在他的一个密码中,加密密钥在整个消息中重复多次,然后通过将消息字符与密钥字符模数 26 相加来生成密文。(模数或简称模,是一种数学表达式,用于计算一个数字除以另一个数字所得到的余数。)与凯撒密码一样,Vigenere 密码也很容易破解。然而,Vigenere 的密码让人们萌生了引入加密密钥的想法,尽管它执行得不好。与凯撒密码相比,消息的保密性取决于加密密钥的保密性,而不是系统的保密性。

Figure 2.

19 世纪初进入电气时代,Hebern 设计了一种机电装置,称为 Hebern 转子机。它使用单个转子,其中的机密密钥嵌入在旋转的圆盘中。密钥对置换表进行了编码,在键盘上按的每一个键都会输出密文,同时,圆盘会转动一档,这样一来,下一个明文字符就有了不同的表。同样,这种加密方法也可以通过字母频率破解。

Engima 机器是由德国工程师 Arthur Scherbius 在第一次世界大战结束时发明的,在第二次世界大战期间被德军大量使用。Enigma 机器使用了 3、4 个甚至更多的转子。当您在键盘上键入时,转子以不同的速度旋转并输出相应的密文字母。在这种情况下,关键在于转子的初始设置。

Enigma 机器的密码最终被波兰破解,这一技术后来转让给英国密码学家,他们设计了一种获取日常密钥的方法。

Figure 3.

在第二次世界大战以及之前,大部分密码学成果都用于军事目的,通常用于隐藏机密的军事信息。然而,密码学在战后引起了商业上的关注,很多企业都在努力保护自己的数据免受竞争对手的侵害。

70 年代初期,IBM 意识到客户需要某种形式的加密,因此他们成立了一个由 Horst-Feistel 领导的“密码研究组”。他们设计了一种名为 Lucifer 的密码。1973 年,美国国家标准局(现称为 NIST)发布了关于分组密码的提案,分组密码后来成为了国家标准。他们显然已经意识到,自己购买的很多商品没有任何可靠的加密支持。Lucifer 最终被接受,并被称为数据加密标准(DES)。在 1997 年及随后的几年中,DES 被穷举搜索攻击破解。DES 的主要问题在于加密密钥过小。随着计算能力的提高,暴力破解密钥的所有不同组合来获取可能的明文消息变得很容易。

1997 年,NIST 再次发布关于新分组密码的请求提案,随后收到了 50 份提交草案。2000 年,NIST 接受了 Rijndael,并将它命名为高级加密标准(AES)。如今,AES 已成为广泛接受的对称加密标准。

近些年,随着量子计算机的进步,我们开始思考后量子密码学。2016 年,NIST 宣布了提案征集寻求公众帮助,以设计抗量子算法,帮助我们抵御未来量子计算机的攻击。在 2020 年,NIST 公布了同一提案请求的最终四个候选者

总而言之,历史告诉我们:

  1. 消息的保密性应当始终取决于密钥的保密性,而不是加密系统的保密性。(这称为 Kerckhoffs 原理。)
  2. 基于上文,应始终使用经过公开审查并已成为标准的密码。不建议使用“机密加密”,因为就像凯撒密码一样,一旦得知系统,就可以解密所有消息。例如,如果您的密钥泄露,攻击者可能会访问您的消息;但是,如果攻击者能够破坏加密系统本身,他们就可以获得由该系统加密的每条消息(不仅仅是针对单个人)的明文。

About the author

Huzaifa Sidhpurwala is a principal Product Security Engineer, working for Red Hat Product Security Team.

Read full bio