1.2.3 密码分析方式
要保证整个密码系统的安全,需要什么呢?只保证加密算法的安全就行了吗?答案是否定的。加密算法的设计需要经严格测试以证明其安全性。比如好不容易设计了一个加密算法,但只能加密前10位的字符,后面的不能加密,这很明显不是一个安全的加密算法。一个安全的加密算法应该是无法从密文中计算出任何关于明文的信息,换句话说,不光不能算出具体的明文信息,也不能算出与明文相关的信息。
不过遗憾的是,大多数的密码并不能保证密文中没有明文的任何信息。
在未知密钥的情况下,从截获的密文中分析出明文的过程称为密码分析。试图对密码进行分析的行为称为攻击。
密码分析作为密码学的一部分,通常情况下指的是一种破译密码的方法。绝大多数的密码分析方法都是由学术界赫赫有名的密码学家完成的。它的难度不比设计密码算法小,它的意义在于让人们试图破译密码以验证该密码算法是否安全,如果发现漏洞,需要及时补上,或者更换更安全的密码。
密码分析通常有3种方法,如下所述。
1.经典密码分析
经典密码分析(Classical Cryptanalysis)包括两种,一种是纯暴力破解,穷举所有明文的可能性,找出最合理的一种;另一种则是数学分析方法,包括以下4种攻击方式。
● 唯密文攻击(Ciphertext-Only Attack):攻击者仅通过分析密文来恢复明文。
● 已知明文攻击(Known-Plaintext Attack):攻击者通过分析已知的明文-密文对来恢复全部明文。
● 选择明文攻击(Chosen-Plaintext Attack):攻击者知道加密算法,并且有能力选择一些明文一密文对来恢复全部明文。
● 选择密文攻击(Chosen-Ciphertext Attack):攻击者可以选择部分密文并获得相应明文,是一种比已知明文攻击更强的攻击方式。
这4种攻击的攻击难度依次递减。
2.实施攻击
实施攻击(Implementation Attack)即不利用密码算法本身,而是通过其他渠道进行密码分析。例如通过测量处理明文的CPU功耗,或者测量信号强度来推理出密钥,这些方式也称为侧信道攻击。除此之外还有软硬件攻击、弱点攻击、差分攻击等方式,甚至包括清除访问记录。实施攻击在绝大多数情况下针对的是攻击者可以物理访问的密码系统,因此如果使用远程系统加密,通常不会考虑这种方法。
3.社会工程学攻击
通过间谍行为,如行贿、窃取、跟踪等方式获得密钥,称为社会工程学攻击(Social Engineering Attack)。它包括但不限于钓鱼、恶意软件传播、身份伪造、诱饵攻击、尾随、假冒权威等攻击方式。有个笑话:某公司被黑客勒索,每20分钟断一次网,用技术手段怎么也找不到原因。最后发现是黑客收买了保安,让他每20分钟拔一次网线。这种攻击方式也是社会工程学攻击的一种。
密码系统的安全性分析评估一般需要用数据复杂度(明文空间、密文空间、密钥空间)、时间复杂度、空间复杂度和成功概率来衡量。一般来说,密码分析常说的计算复杂度主要是指时间复杂度和空间复杂度。
攻击者Eve会寻找密码使用过程中最脆弱的环节,不仅限于算法,还包括密码传输、管理等。换句话说,密码使用者必须使用足够安全的算法,也必须保证可以抵御实施攻击和社会工程学攻击。本书将会重点介绍经典密码分析方法,也会简单介绍实施攻击和社会工程学攻击。
对于任何安全的加密方案,其密钥空间必须能抵御穷举攻击,且必须满足,即明文空间大于密钥空间。若可能的明文比可能的密钥还少,穷举出所有可能的密钥,解密之后会获得比明文空间还大的候选明文集合。
充分大的密钥空间是密码算法安全的必要不充分条件。一个安全的密码算法一定有一个充分大的密钥空间,但充分大的密钥空间不一定能保证密码算法的安全。还有一点值得注意,密钥空间并不等于密钥长度。密钥长度为密钥的二进制位数,比如密钥为10101010 ,一共8位,那么它的密钥长度就是8 ,其密钥空间为。如果密钥长度为16 ,是8位密钥长度的两倍,那么它的密钥空间会远远大于后者的密钥空间大小,是其倍之大。