2.6 密码分析

2.6.1 传统密码分析方法

密码分析学,俗称“密码破译”,截收者在不知道解密密钥和通信者所采用的加密算法的细节条件下,对密文进行分析,试图获取机密信息、研究分析解密规律的科学。密码分析除了依靠数学、工程背景、语言学等知识外,还要依靠经验、统计、测试、眼力、直觉判断能力等因素,有时还要靠运气。根据攻击者对明文、密文等信息的掌握情况,密码分析可以划分为四种类型。

(1)唯密文攻击(Ciphertext-only attack)

攻击者手中除了截获的密文,没有其他任何辅助信息。唯密文攻击是最常见的一种密码分析类型,也是难度最高的一种。

(2)已知明文攻击(Known-plaintext attack)

攻击者除了掌握密文,还掌握了部分明文和密文的对应关系。举例来看,如果是遵从通信协议的对话,由于协议中使用固定的关键字,如“login”、“password”等,通过分析可以确定这些关键字对应的密文。如果传输的是法律文件、单位通知等类型的公文,由于大部分公文有固定的格式和一些约定的文字。在截获的公文较多的情况下,可以推测出一些文字、词组对应的密文。

(3)选择明文攻击(Chosen-plaintext attack)

攻击者知道加密算法,同时能够选择明文并得到相应明文所对应的密文,是比较常见的一种密码分析类型。举例来看,攻击者截获了有价值的密文,并获取了加密使用设备,向设备中输入任意明文可以得到对应的密文,以此为基础,攻击者尝试对有价值的密文进行破解。选择明文攻击常常被用于破解采用公开密钥密码系统加密的信息内容。

(4)选择密文攻击(Chosen-ciphertext attack)

攻击者知道加密算法,同时可以选择密文并得到对应的明文。采用选择密文攻击这种攻击方式,攻击者的攻击目标通常是加密所使用的密钥。基于公开密钥密码系统的数字签名,容易受到这种类型的攻击。

从密码的分析途径看,在密码分析过程中可以采用穷举攻击法、统计分析法和数学分析法等三种方法。

(1)穷举攻击法

穷举攻击法的破解思路是尝试所有的可能以找出明文或者密钥。穷举攻击法可以划分为穷举密钥和穷举明文两类方法。所谓穷举密钥,指的是攻击者依次使用各种可能的解密密钥对截收的密文进行试译,如果某个解密密钥能够产生有意义的明文,则判断相应的密钥就是正确的解密密钥。穷举明文指的是攻击者在保持加密密钥不变的条件下,对所有可能的明文进行加密,如果某段明文加密的结果与截收的密文一致,则判断相应的明文就是发送者发送的信息。理论上只要有足够多的计算时间和存储容量,采用穷举攻击法破解密码系统一定可以成功。

为了对抗穷举攻击,现代密码系统在设计时往往采用扩大密钥空间或者增加加密、解密算法复杂度的方法。当密钥空间扩大以后,采用穷举密钥的方法,在破解的过程中需要尝试更多的解密密钥。提高加密、解密算法的复杂度,将使得攻击者无论采用穷举密钥还是穷举明文的方法对密码系统进行破解,每次破解尝试都需要付出更加高昂的计算开销。对于一个完善的现代密码系统,采用穷举攻击法进行破解需要付出的代价很可能超过密文破解产生的价值。

(2)统计分析法

统计分析法是通过分析明文和密文的统计规律从而破解密文的一种方法。一些古典密码系统加密的信息,密文中字母及字母组合的统计规律与明文完全相同,此类密码系统可以采用统计分析法破解。统计分析法首先需要获得密文的统计规律,在此基础上,将密文的统计规律与已知的明文统计规律对照比较,提取明、密文的对应关系,进而完成密文破解。

要对抗统计分析,密码系统在设计时应当着力避免密文和明文在统计规律上存在一致,从而使得攻击者无法通过分析密文的统计规律来推断明文内容。

(3)数学分析法

大部分现代密码系统以数学难解作为理论基础。数学分析法,也称为“确定分析法”、“解密变换分析法”,是指攻击者针对密码系统的数学基础和密码学特性,利用一些已知量,例如,一些明文和密文的对应关系,通过数学求解破译密钥等未知量的方法。对于基于数学难题的密码系统,数学分析法是一种重要的破解手段。

要避免密码系统被攻击者通过数学分析法破解,最关键的一点就是被密码系统作为理论基础的数学难题必须具有极高的破解难度,攻击者无法在有限时间内利用有限的资源破解相应的数学难题。

2.6.2 密码旁路分析

前面讲到的是传统的密码分析学,这类方法将密码算法看作是一个理想而抽象的数学变换,假定攻击者不能获取除密文和密码算法以外的其他信息。然而,密码算法的设计安全性并不等于密码算法的实现安全性。现实世界中,密码算法的实现总需要基于一个物理平台,即密码芯片。由于芯片的物理特性会产生额外的信息泄露,如密码算法在执行时无意泄露的执行时间、功率消耗、电磁辐射、Cache访问特征、声音等信息,或攻击者通过主动干扰等手段获取的中间状态比特或故障输出信息等,这些泄露的信息同密码的中间运算、中间状态数据存在一定的相关性,从而为密码分析提供了更多的信息,利用这些泄露的信息就有可能分析出密钥,这种分析方法称为旁路分析。密码旁路分析中攻击者除了可在公开信道上截获消息,还可观测加解密端的旁路泄露,然后结合密码算法的设计细节进行密钥分析,避开了分析复杂的密码算法本身,使得一些传统分析方法无法破解的密钥成为可能。

近几年来,密码旁路分析技术发展较快,出现了多种旁路分析方法。根据旁路泄露信息类型的不同,可分为计时分析、探针分析、故障分析、功耗分析、电磁分析、Cache分析、声音分析;根据旁路分析方法的不同,可分为简单旁路分析、差分旁路分析、相关旁路分析、模板旁路分析、随机模型旁路分析、互信息旁路分析、Cache旁路分析、差分故障分析、故障灵敏度分析、旁路立方体分析、代数旁路分析、代数故障分析等。有关旁路分析的详细介绍,读者可参考文献[15]。

2.6.3 密码算法和协议的工程实现分析

即使密码体系在理论上无懈可击,攻击者也无法通过观测加解密端的旁路泄露来进行密码旁路分析,也并不意味着攻击者没有办法对密码体系进行攻击。近几年来,越来越多的密码算法和协议在工程实现层面的安全漏洞被发现,对密码体系的安全形成了严峻挑战。下面列举三例来说明。

2014年4月9日,“心脏滴血(Heartbleed)”安全漏洞(CVE-2014-0160)曝光。SSL/TLS协议是应用最为普遍的网站通信加密技术,Web服务器通过它将密钥发送给浏览器客户,然后在双方的连接之间对信息进行加密。OpenSSL则是开源的SSL套件,为全球成千上万的Web服务器所使用。Heartbleed漏洞的得名是因为用于安全传输层协议(SSL/TLS)及数据包传输层安全协议(DTLS)的心跳连接(Heartbeat)扩展存在漏洞。由于OpenSSL 1.0.2-beta 与OpenSSL 1.0.1在处理TLS heartbeat扩展时出现边界错误,攻击者可以利用漏洞获取连接的客户端或服务器的内存内容,这样不仅可以读取其中机密的加密数据,还能盗走用于加密的私钥。该漏洞实际上早期出现于2012年,在OpenSSL代码更新时被引入,因为代码错误明显,甚至有人怀疑这是故意添加的后门。Heartbleed引发了人们对密码协议实现代码的关注,随后一系列SSL代码实现漏洞被发现。

2014年10月谷歌研究人员曝光了POODLE(Padding Oracle On Downloaded Legacy Encryption vulnerability)漏洞,它是实现SSLv3协议时因为考虑互兼容性问题而引入的安全漏洞。攻击者可以利用它来截取浏览器与服务器之间传输的加密数据,如网银账号、邮箱账号、个人隐私等。

2016年3月2日,淹没(Drown)安全漏洞(CVE-2016-0703)被公开。攻击者欺骗支持SSLv2的服务器解密TLS服务器加密的内容,利用返回结果破解TLS会话密钥。Drown 漏洞影响HTTPS以及其他依赖SSL和TLS的服务,即使是那些仅支持TLS协议的服务器,如果使用了同一对公私钥在某个服务器上支持SSLv2 协议,也将处于危险当中。全球超过33%的HTTPS服务存在此漏洞,各大互联网公司几乎都榜上有名。