2.3 现代密码系统概述
根据密钥数量和工作原理的不同,现代密码系统通常可以划分为对称密钥密码系统和公开密钥密码系统两类。对于对称密钥密码系统,加密密钥和解密密钥完全相同,这种密码系统也被称为单钥密码系统或者秘密密钥密码系统。而在公开密钥密码系统中,加密密钥和解密密钥形成一个密钥对,两个密钥互不相同,从其中一个密钥难以推导出另外一个密钥。公开密钥密码系统也被称为非对称密钥密码系统或者双钥密码系统。
2.3.1 对称密钥密码系统
凯撒密码、维吉尼亚密码等古典密码算法具有相同的加密密钥和解密密钥,属于典型的对称密钥密码系统。各类现代的对称密钥密码系统都是以古典密码系统为基础发展而来的,大多以代替和置换这两种基本运算为基础。
对称密钥密码系统的安全性主要涉及两点。首先是密码算法必须足够完善。要确保在算法公开的条件下,攻击者仅根据密文无法破译出明文。其次是密钥必须足够安全。密钥的安全由两方面因素决定,一是密码系统使用的密钥严格保密,防止他人获知;二是要保证密码系统的密钥空间足够大,防止攻击者通过穷举密钥的方法破译。
对称密钥密码系统具有很高的安全性,而且,无论密码系统是以硬件实现的还是以软件实现的,加、解密的速度都很快。
与此同时,对称密钥密码系统也存在一些难以解决的缺陷。最为突出的一个问题是双方如何约定密钥。通信中进行加密是为了确保信息的保密,采用对称密钥密码系统,此目标的达成取决于密钥的保密。信息的发送方必须安全、稳妥地把密钥传递到信息的接收方,不能泄露其内容。通信双方为了约定密钥往往需要付出高昂代价。
对称密钥密码系统的另外一个问题是在加解密涉及到多人时需要的密钥量大,管理困难。如果N个用户需要相互通信,则这些用户两两之间必须共享一个密钥,一共需要N(N-1)/2个密钥。当用户数量很多时,密钥数量会出现爆炸性的膨胀,给密钥的分发和保存带来巨大困难。
对称密钥密码系统对明文信息加密主要采用序列密码(Stream Cipher)和分组密码(Block Cipher)两种形式,以下分别介绍。
1.序列密码
序列密码常常被称为流密码,其工作原理是将明文消息以比特为单位逐位加密。与明文对应,密钥也是以比特为单位参与加密运算。为了保证安全,序列密码需要使用长密钥,密钥还必须具有较强的灵活性,保证其能够加密任意长度的明文。但是长密钥的保存和管理非常困难。研究人员针对此问题,提出了密钥序列产生算法,只需要输入一个非常短的种子密钥,通过设定的算法即可以产生长的密钥序列,在加密和解密过程中使用。序列密码的工作原理如图2-8所示。
图2-8 序列密码的工作原理
序列密码中的加解密采用的都是异或计算。异或是在计算机领域常用的一种数学计算,计算在两个比特位之间进行,操作符为,运算规则为:
0⊕0=0
0⊕1=1
1⊕0=1
1⊕1=0
如果以a、b分别表示比特位,则在进行异或计算时,以下等式恒成立:
a⊕b⊕b=a
此特性在序列密码中,体现为明文与一组密钥序列异或的结果,再次与相同的密钥序列异或时,将恢复明文。例如,明文为“01110001”,密钥序列为“11110000”,则两者异或将产生密文“10000001”,密文与密钥序列异或产生结果“01110001”,与明文相同。
异或计算具有操作简单、计算速度快等优点。这些特点能够满足序列密码对于加密操作的要求。举例来看,采用序列密码给一段很长的明文进行加密,由于加密操作以比特位为单位,如果计算复杂的话,加密操作将消耗很长时间。异或计算由于在计算上简单、快速,可以降低加密的计算开销,同时也可以为加密节省计算时间。
在序列密码中,密钥序列产生算法最为关键。密钥序列产生算法生成的密钥序列必须具有伪随机性。所谓伪随机性主要体现为两点,首先,密钥序列是不可预测的,这将使得攻击者难以破解密文。其次,密钥序列具有一定的可控性。加解密双方使用相同的种子密钥,可以产生完全相同的密钥序列。倘若密钥序列完全随机,则意味着密钥序列产生算法的结果完全不可控,在这种情况下,将无法通过解密恢复明文。此外,加解密双方还必须保持密钥序列的精确同步,这是通过解密恢复明文的重要条件。
序列密码的优点在于安全程度高,明文中每一个比特位的加密独立进行,与明文的其他部分无关。此外,序列密码的加密速度快,实时性好。其最大缺点是密钥序列必须严格同步,为了确保该要求的满足往往要付出较高的代价。
2.分组密码
分组密码是将明文以固定长度划分为多组,加密时每个明文分组在相同密钥的控制下,通过加密运算产生与明文分组等长的密文分组。解密操作也是以分组为单位的,每个密文分组在相同密钥的控制下,通过解密运算恢复明文。
分组密码的工作原理如图2-9所示。明文信息m在加密前将依据加密算法规定的大小进行分组,划分为长度相同的分组。分组大小通常是64位的整数倍,例如,64位、128位都是常见的分组大小。如果明文的最后一块不满一个分组,将使用填充位补足。
图2-9 分组密码的工作原理
图2-9中明文分组m1通过密钥k加密,由m1加密产生的密文分组c1与m1长度相同。执行解密运算时使用的解密密钥k与加密密钥相同,在密钥k的控制下将密文分组c1恢复为明文分组m1。
作为一种现代密码系统,分组密码的一个重要特点是密文分组中的所有位与明文分组中的所有位之间都存在联系。举例来说,明文分组中某一位发生变化将使对应的密文分组中很多位出现改变(称为“雪崩效应”)。而古典密码一般不具备这样的特性。以维吉尼亚密码为例,这种古典密码系统通过关键字产生密钥,进而利用密钥加密明文。关键字为“stay”时,可以看作将明文划分为长度为4个字母的分组加密,明文中一个字母的变化只会导致密文中对应的字母出现改变。例如,采用“stay”作为关键字,明文为“atta”时加密结果是“SMTY”,当明文变为“btta”时加密结果为“TMTY”,两段密文相比较,只有一个字母出现了变化。
分组密码不像序列密码一样需要密钥同步,适应性很强,是目前使用非常广泛的一种现代密码系统。
2.3.2 公开密钥密码系统
1976年,美国斯坦福大学的迪菲和赫尔曼在论文《密码学新方向》中首次提出了公开密钥密码系统的基本思想,开创了密码学研究的新时代。公开密钥密码系统并不是采用代替和置换运算隐藏明文信息,而是将密码系统建立在数学难题求解的困难性之上。
公开密钥密码系统的加密算法E和解密算法D都完全公开。与传统的密码系统不同,使用公开密钥密码系统的用户拥有一对密钥。其中一个密钥可以像电话号码一样公开,被称为公钥(public key),另外一个密钥用户必须严格保密,被称为私钥(private key)。用公钥加密的信息内容仅能通过相应的私钥解密。
采用公开密钥密码系统,如果要给某一用户发送机密信息,只需通过公开渠道获得相应用户的公钥,在该密钥的控制下使用加密算法加密明文。用户在接收密文以后,使用自己的私钥进行解密,恢复明文。由于私钥严格保密,只有用户本人知道,因此其他人即使截获密文也无法解密,可以确保信息在传输过程中的保密。
公开密钥密码系统的安全性主要在于公钥和私钥之间虽然存在某种算法联系,但是由公钥和密文要推出明文或者私钥在计算上不可行。
以PK表示公钥,SK表示对应的私钥,E表示加密算法,D表示解密算法,m表示任意的明文,则公开密钥密码系统需要满足条件:D(SK,E(PK,m))=m,即明文通过公钥加密后可以由相应私钥恢复还原。
如果公开密钥密码系统能够同时满足条件:D(PK,E(SK,m))=m,则该公开密钥密码系统还能够用于认证数据发送方的身份。对于需要进行身份认证的信息,用户在发送信息时使用自己的私钥处理,接收方收到信息以后使用发送方的公钥将信息恢复。由于公钥和密钥之间存在唯一对应关系,信息如果能够用某个用户的公钥恢复,则可以确定信息是由该用户的私钥生成的,同时由于私钥隶属于用户本人,接收方可以据此认证信息发送方的身份。
公开密钥密码系统与对称密钥密码系统相比,主要存在两方面的优点。首先,可以解决对称密钥密码系统密钥分发困难的问题。在通信过程中采用公开密钥密码系统,通信双方为了实现保密通信,不需要事先通过秘密的信道或者复杂的协议约定密钥。公钥可以通过公开渠道获得,只要保证用户的私钥不泄露即可。
其次,公开密钥密码系统的密钥管理简单。如果N个用户相互之间进行保密通信,每个用户只需保护好自己的私钥,而无须为其他密钥的保密问题担心。
公开密钥密码系统的主要缺点是加密操作和解密操作的速度比对称密钥密码系统慢很多。因此,在实际应用中两种密码系统常常结合使用。
公开密钥密码系统与对称密钥密码系统结合使用的工作原理如图2-10所示。其中算法EA为对称密钥密码系统的加密算法,算法DA为与之对应的解密算法。算法EB为公开密钥密码系统的加密算法,算法DB为与之对应的解密算法。
图2-10 公开密钥密码系统与对称密钥密码系统结合使用的工作原理
发送者在发送明文信息m前,首先随机产生一个密钥ks,该密钥一般称为会话密钥。发送者使用密钥ks,通过加密算法EA产生密文c。此时如果将密文c发送到接收方,接收者由于没有密钥ks的信息,将无法完成解密。为了解决该问题,发送者使用接收者的公钥采用加密算法EB对密钥ks加密,并将加密结果与密文c一同发送。在接收端,接收者使用自己的私钥通过解密算法DB恢复密钥ks,进而利用密钥ks通过解密算法DA恢复明文m。
将两种不同类型的密码系统混合使用,充分发挥了两种密码系统各自的优势。一方面,采用对称密钥密码算法对信息主体进行加密和解密,可以发挥对称密钥密码算法处理迅速的优势。另一方面,采用公开密钥密码算法对会话密钥进行加密和解密,可以解决会话密钥在通信双方的分配和统一问题。