密码学的总体内涵和特征(上)
撰文 | 康老师
上一回,我们聊了聊密码学的前世今生。这回想讲的是密码学到底是个啥,也就是从这门学科开端以来形成的很稳定不变的基本特征和总体内涵入手,而不希望从我们这个系列的开端就一头扎入到细节里,后面会利用多期对本期提到的技术内容做更具体的展开。
由于汉语的言简意赅,很多时候我们说到密码,是个简称或代称,也容易将密码和其它一些概念无意间形成混淆。本篇的开始就先聊两个与密码相关的易混淆、易说错的情况。先说说什么不是密码。
口令不是密码
口令(password)是个长度较短的用户易记信息,一般用于验证用户身份或设备归属;而密码的含义要宽泛得太多,密码可以解释为将原始信息按指定规则转换为使非授权者无法了解的特定信息(即隐蔽信息),这些转换而来的信息必须具有已授权者可以恢复出来的特性。细究起来,它既指密码处理过程,也指处理完毕的密文,因此两者完全不是一码事。从应用角度看,口令一般是显性的、用户直接接触的;而密码这个词的本意一般是指的一个隐性的用户不可见的处理过程,混为一谈完全不合适。从信息安全角度来看,只依靠口令的身份验证系统局限性较强、强度较低(即使设置了较长长度的口令),说一个系统使用口令和使用了密码完全是两回事(后者当然是非常不精确的说法),这都能混淆那只能说这文档的作者水平好Low。
如果说口令和密码有关联的话,那也只能说口令的处理过程一般会使用了密码技术如杂凑算法,以及有些低强度密码系统中密钥的生成与口令有关。当然如果口令的处理竟然没使用密码技术而是直接比对或使用口令明文,那都不能说开发者太Low,而是人为造成的安全事故,应该向开发者追责了。
说完区别和联系,最后说一个原因,为啥强调口令不是密码?因为不少信息安全科普文章乃至专著的作者/译者把破解口令写成了破解密码——破解口令和破解密码可完全是两码事!两者完全是不同层面的事,前者只要猜到你的口令就行了,往往只需用弱口令字典攻击,后者必须使用密码分析技术。即可简单的说,破解口令比破解密码可容易太多了。
编码不是密码
编码一般也称为信息编码(Information Coding),是为了方便信息的存储、检索和使用,将信息从一种形式或格式转换为另一种形式的过程,在进行信息处理时赋予信息元素以代码的过程。即用不同的代码与各种信息中的基本单位组成部分建立一一对应的关系。编码的目的非常广泛,不仅是为了保密,可能是为了压缩数据量、为了数据传输纠错、为了伪装某些数据的存在等等。
密码编码学只是编码的一种,每种编码的目的和方法都不同,都是各自独立的,实际传输的数据都是经过了多重编码,但必须经过加密才能保证保密性。千万不要以为经过一种或几种编码了就是密文了就安全了。
现在,说完了密码不是什么,我们就马上从几个维度对密码学进行拆解,让大家对它是个啥能看得更明白。欢迎一起走进密码学的大厦!
密码学大厦的四梁八柱
越是复杂的东西,越是需要先搞明白其体系架构,否则一头扎进细节里,容易出不来又没弄懂大概。所以我们先从密码学大厦里一些固定的架构说起。
对立的统一:密码学互相对抗的
两大阵营
密码学(Cryptology)分为密码编码学(Cryptography)和密码分析学(Cryptanalysis),前者寻求提供消息机密性、完整性、真实性和非否认性等的方法,后者研究加密消息的破译和伪造等破坏密码技术所提供安全性的方法。密码编码与密码分析相互斗法、相生相克又相辅相成的关系,真的很像阴阳太极图中的一阴一阳。
在密码这个领域中,密码编码可谓之阳,更为人所见;密码分析则可谓之阴,其作用和重要性不太为外人所见。虽然密码学已经是常人难以见其真容的“冷面小生”,但受其用途所限,密码分析显然比密码编码隐藏得更深。如果说前者决定一个密码的生,那么后者就决定了密码的死。由于密码分析成功就能获取对方敏感信息,具有巨大的潜在效益;而且,随着密码编码技术和密码系统变得愈来愈复杂,破解密码系统所需工作量也越来越大;因此,虽然密码分析更加“低调”,但世界各国在密码分析领域的投入都比密码编码领域更大。
下图是英国在二战期间由图灵设计的破解德国英格玛密码机的专用机械——“炸弹”(通常它也被认为是第一台电子计算机)。看出来了吧,其体积、结构、操作复杂度都比“英格玛”更胜一筹。如果有人统计一下破解“英格玛”密码机的总投入,一定也比德国研制“英格玛”要高得多。
二战时英国的密码破译机构获得了举世瞩目的成绩,背后是成千上万名数学家、语言学家等各行业专家日以继夜的努力,二战后该机构人员进行了大幅削减,下图是当今英国政府密码分析组织外景。可见,和平年代其规模仍然不小。
这是世界规模最大的密码分析组织——美国国家安全局(NSA)大楼外景。美国在和平年代依然维持着和其世界军事霸主地位相称的密码分析“常备军”规模。
外化的形态:颠扑不破的密码5元组
要应用密码,不管你要使用什么密码体制,都要和密码五元组打交道。五元组就是明文、密文、加密算法和解密算法、密钥五部分。
- 没有加密的原始信息称为明文(Plaintext)。
- 加密后的信息称为密文(Ciphertext)。
- 从明文到密文的变换称为加密算法(Encryption)。
- 从密文到明文的变换称为解密算法(Decryption)。
- 加密和解密都必须有密钥(Key)参与,在密钥的控制下进行的。
有了五元组,密码系统的统一模型、各类不同的密码体制、乃至对密码系统的不同攻击行为(例如惟密文攻击、已知明文攻击、选择明文攻击、选择密文攻击等),都可以区分、描述和进行分析了。
这个部分给大家想强调的就是为什么密钥是颠扑不破一直都在的五元组之一,这源自1883年由Kerckhoffs提出的Kerckhoffs原则:密码系统安全性应该基于密钥而不是基于算法的保密。该原则的提出,在密码发展史上具有重要的意义。研究者在当时就认识到有必要将加密过程中可变的部分抽象和独立出来,这就形成了密钥。否则要么所有加密过程都是固定不变的——这显然不够安全;要么要为每次加密都产生一个新的密码算法——代价不可接受。到了现代密码学,则要求密码算法是可以公开评估的,整个密码系统的安全性并不取决于对密码算法的保密或对密码设备的保护,而是密钥的保密性,即秘密都寓于密钥之中;如上所述,我还要加上半句,随机性也要寓于密钥之中。
从这个角度看,密钥是密码中最需要保密的元素,也是最需要“变化莫测”的元素,由此,密码学才需要研究真随机性,以及引入尽量达到真随机性的密码器件——随机数发生器。
应用的抓手:做密码应用必须弄懂的6套密码工具箱
对称密码、公钥密码、单向散列函数、消息认证码、数字签名和伪随机数生成器一般被密码学家称为“密码学工具箱”。密码应用开发者的主要工作就是针对不同的安全需求使用这六种技术工具进行搭配组合。我将这个说法稍微改进了一下,称其为做密码应用必须弄懂的密码工具箱。
- 对称密码:在加密和解密时使用同一密钥的加密技术。
- 公钥密码:在加密和解密时使用不同密钥的密码技术
- 单向散列函数:能够保证完整性的密码技术。
- 消息认证码:能够保证完整性和提供认证的密码技术。
- 数字签名:能够确保完整性、提供认证并防止否认的密码技术。
- 随机数生成器:能够产生伪或真随机数列的算法或是能够产生真随机数列的密码器件。——这里我不用“伪随机数生成器”说法的原因是因为密钥的随机性假设是密码安全的基本假设,研究者普遍认为基于物理特性的真随机性要优于使用伪随机数生成算法,因此重要密码系统都是采用的真随机数生成器,“伪随机数生成器”的说法是来源于密码应用系统开发者的惯用看法而且已经落伍了。
分门别类层台累榭的密码体制
密码体制,也称为密码系统(Cryptosystem)或密码方案(Scheme),它指一个密码算法、相关参数及其使用方法的总和。密码体制从原理上可分为单钥(即对称)密码体制和双钥(即非对称)密码体制。
单钥密码体制又可分为两种:一是明文消息按字符(如二元数字)逐位地加密,称为序列密码或流密码(Stream Cipher);二是将明文消息分组(每组含有多个字符),逐组进行加密,称为分组密码(Block Cipher)。
双钥密码体制主要是指目前应用广泛的公钥密码体制,公钥密码体制依据其内部实现原理的不同,又可分为RSA、ECC等不同的公钥密码体制。
依此类推,密码体制的类别可以用一个清晰明确的树状结构串起来,这在很多密码学专著都有论述,在此就不详谈。在此,我想表述的是各类密码体制基于不同的原理构建,它们之间的联系并不多,因此,密码学的大厦可以看做是由不同的密码体制层台累榭的堆积起来。你完全可以来个“穿堂入室”,按自己对特定密码机制的兴趣和积累对其进行较独立的学习和研究。
密码应用的幕后功臣:密码管理
谈到密码管理,我们涉及到的密码管理概念和场景可以粗略划分为两类:
第一是广义的、扩展到技术以外,例如法律法规等范畴的广义上的密码管理学,有时也可称为密码配用,此时我们讨论的不仅是对密钥的管理,也包含了对密码算法、密码协议等密码“全元素”的管理,不仅包含了对技术要素的管理,也包含对密码应用用户、密码管理部门、乃至密码管理法律法规的要求与规范。
第二是狭义的、可以对应到具体技术领域的密码管理技术和系统,通常也可以称为密钥管理,因为管理的主体就是密钥,负责密钥从初始产生到最终销毁的整个过程,包括密钥的生成、存储、分配与协商、使用、备份与恢复、更新、撤销和销毁等内容。此时我们讨论的东西不仅可以对应到具体密码管理技术,也都可以对应到具体的实体——密码管理系统。
有了这个划分,不同的沟通场景下,我们就知道具体谈的到底是涉及密码管理的哪一块,就不会泛泛而谈、无的放矢地谈管理,也不会随便地就把管理和技术对立起来讨论,我们可以看到密码管理这个概念的本身就是体现了技术和管理的结合。
无论是在哪个层面谈密码管理,都可以看到密码管理具有以下三个特点:
第一、密码管理对密码应用具有不可或缺的基础支撑作用,如果说现代的密码应用“无处不在”,则密码管理“无处不含”,缺少密码管理的背后支撑,任何密码应用都是无源之水、无本之木,密码管理依密码应用场景需求有不同程度的具体实现,但没有管理的密码应用绝对是无人敢用的。在密码这个领域可以这么说,外行谈应用,内行谈管理。
第二、密码管理具有相当的复杂性,既有技术问题,也有管理策略、管理体制、管理政策等层面问题。
第三、密码管理是影响系统安全的关键因素,若密码管理问题处理不好,就很难保证系统的安全性。
下一期,我将从空间维度再转移到时间维度接着阐述密码,从宏观角度转向微观角度,以更小的时间颗粒度,一起去看看一个密码系统的一生是个什么样子。
好了,让我们下期继续!