应用密码学:原理、分析与Python实现
上QQ阅读APP看书,第一时间看更新

1.2.2 密码学的基本原则

随着Enigma密码被破译,人们才意识到其实真正保证密码安全的重点往往不是算法,而是密钥管理。即使算法外泄,但只要密钥保密,密码就不会失效。这也称为柯克霍夫原则:即使密码系统的任何细节都已公开,只要密钥未泄露,则该密码系统也应是安全的。

在密码学领域,用于解决复杂问题的步骤通常称为算法(Algorithm)。从明文转密文的方法称为“加密算法”;从密文转明文的方法,则称为“解密算法”。加密、解密算法合在一起统称为密码算法。

在了解具体算法之前,首先需要了解一些关于密码学的基本概念。

图1-7 密码学基本要素

明文(Plaintext):加密前的信息,需要使用某种密码对其进行变换,以隐藏信息。用表示,该信息只有通信双方能看到。

密文(Ciphertext):加密后的信息,经过变换后,该信息不能被非授权者所知。用表示,该信息所有人都能看到。

加密(Encryption):通过特定的加密技术将明文转化为密文的行为。

解密(Decryption):由掌握加密技术的特定人群将密文转化为明文的行为。

发送方/发件人(Sender):例如后文例子中的Alice。

接收方/收信人(Receiver):例如后文例子中的Bob。

攻击者/拦截者(Attacker):例如后文例子中的Eve。

密钥(Key):用表示,密钥通常是一系列数字或符号,发送方采用密钥来加密信息,接收方通过相同或不同的密钥来解密信息。只使用一次的密钥称为一次性密钥。

密钥空间(Key Space):密钥的所有可能,或解密密钥的可能数量。对于一个安全的密码系统,其密钥空间须能抵御穷举攻击。

Alice和Bob最早出现在1978年Rivest等3人发表的论文“A method for obtaining digital signatures and public-key cryptosystems”(一种实现数字签名和公钥密码系统的方法)[7]中。在此之前,密码学领域一般用A表示数据发送方,用B表示数据接收方。相对于冰冷的A和B,Alice和Bob更加人性化,因此在密码学界广泛使用,可以说他们是密码学界的“李雷”和“韩梅梅”。不过实际使用过程中,Alice和Bob并不一定是人,在大多数情况下,Alice是一台计算机,Bob是一台网络服务器,它们之间互相通信。不过Eve作为攻击者经常是一个人。Alice和Bob之间互相通信的流程如图1-8所示。

图1-8 密码流程

在相关书籍或文献中,还有其他几种身份,如Mallory、Trent、Victor。Mallory通常指主动攻击者,它会进行妨碍通信、伪造信息等操作;Trent则指可信的第三方,进行中继等操作;Victor指验证者,进行信息验证。

加密的方法主要有两种,分别为替换(Substitution)加密和换位(Transposition)加密。替换加密主要是指将个字符的明文替换成个字符的密文;换位加密主要是指将原始信息的字符按照某些特定的模式重新排列。而现代加密方式是以上两种的混合,使得密码更加安全。

加密和解密过程即Alice通过密钥加密明文,将明文转变成密文;通过选定途径,发送给Bob;Bob通过密钥进行解密,得到明文。一个密码系统,通常由明文、密钥、密文、加密算法(Encrypt)和解密算法(Decrypt)这5种元素构成,加密算法用公式表示为:

解密算法用公式表示为:

使用密码的场景一般是发送方和接收方之间没有安全的通信通道,所以需要加密信息,以确保不会被第三方知道。信息安全的关键是攻击者不知道加密中使用了何种特定密钥,以及加密方式。攻击者一旦知道密钥及加密方法,密文即被破译。

现代密码学有3个基本原则。

(1)安全的定义

对安全的定义必须是公式化的、表述严格且精确的。一个安全的密码算法应该满足哪些条件?“对于攻击者而言,不能恢复密钥。”这句话是否满足对于安全的定义呢?很显然,不满足。因为有些算法即使不能恢复密钥,也有可能泄露明文。比如,没有人可以从密文中猜出密钥,但明文依然被泄露。“对于攻击者而言,不能从密文恢复完整的明文。”这也不满足对于安全的定义。因为不需要恢复完整明文,只要恢复部分明文就可能泄露重要的信息。比如,某个加密算法只加密偶数位的信息,那么奇数位的信息依然会被泄露。“对于攻击者而言,不能从密文恢复任何明文字符。”这也不满足对于安全的定义。因为即使攻击者不能知道明文的任何信息,但只要知道明文之间潜在的关系即可。比如,虽然不知道两架飞机的具体速度,但是知道飞机A比飞机B快,这也是信息泄露,是不安全的。

正确的定义是:若攻击者无法从密文中计算出任何关于明文的信息,那么该密码是安全的。

(2)精确的假设

若密码学系统的安全性依赖于未被证明的假设,这种假设必须被精确陈述,且假设需要尽可能的少。大部分公钥密码系统通常是基于数学困难问题构造的。现代密码学要求,若一个方案的安全性依赖于假设,则假设必须被精确地陈述。假设是暂无数学证明的,但据推测是正确的命题。一个假设被检查和测试的次数越多,那么它的可信度就越高。

在其他条件相同的情况下,如果有两个基于不同假设的方案都被证明满足某种定义,那么该选哪种方案呢?通常选择假设更弱的那个方案。这是因为假设越弱越好,越弱的假设,其所需要的条件就越少,需要的信息也越少,也就越安全。反过来说,如果某个假设需要很强的条件才可以成立,那么这个假设就会因为条件太多而带来更多的不安全因素。

(3)严格的安全证明

密码学方案应该有严格的安全证明。一个密码学方案在某些特定的假设下满足给定的定义,是可以严格证明该方案安全的前提。即假设A是正确的,则根据A给定的定义,所发明的算法B就是安全的。假设否定了A,那么攻击者就能破解算法B。