差分密码分析

差分密码分析（Differential cryptanalysis）是一种密码分析的方法，主要用于破解分组加密，但也适用于流加密和加密哈希函数。广义上讲，其研究的是信息输入上的差别对输出结果变化的影响。对于分组密码，其指的是利用差异来获取密钥的技术，包括跟踪变换网络中的差异，以及寻找加密中的非随机行为等。

历史

1980年代后期，和阿迪·萨莫尔发表了一系列针对多个块加密和哈希函数的攻击，包括对資料加密標準（DES）理论弱点的运用。因此，二者通常被认为是在公开领域中发现差分密码分析的元勋，然而NSA在更早之前已发现该方法，但并未公开。比哈姆和萨莫尔表示，DES在抗差分密码分析方面表现意外的好，不过只要对加密算法稍加修改就能大幅减弱其抗攻击能力。Biham and Shamir, 1993, pp. 8-9

1994年，IBM DES初始团队的成员发表论文称，IBM早在1974年就发现了差分密码分析法，并早已将抗差分分析纳入算法的设计目标中。 (subscription required)作家史蒂芬·列维表示，IBM的确独立发现了差分密码分析方法，显然NSA也知道这项技术。对于IBM选择保密的原因，库帕史密斯解释道：“IBM与NSA商讨后，认为若公布加密算法中抗差分密码分析的设计，那么差分密码分析这种能攻击多种加密算法的强力技术就会被暴露，这将削弱美国在密码学领域的领先优势。IBM内部把差分分析称为“T-attack”或“Tickle attack”。Matt Blaze, , 15 August 1996, Re: Reverse engineering and the Clipper chip" 

与内建抗差分密码分析的DES相比，同期其它加密算法在这方面被证实是脆弱的。是本分析方法的早期攻击目标。原始的4轮版本（FEAL-4）可以在仅利用八个选择明文的情况下被破解，且31轮版本的FEAL的抗攻击性也不尽人意。相比之下，差分分析在使用247数量级的选择明文后才能破解DES算法。

攻击原理

差分密码分析通常是选择明文攻击，意思是攻击者可以自行选取一部分明文并取得相应密文。不过，一些扩展也能让此方法用在已知明文攻击，甚至是唯密文攻击上。差分分析的基本方法，是运用若干对有着常量差异的明文；差异可以用数种方法定义，最常见的是逻辑异或（XOR）。然后，攻击者计算相应密文的差异，尝试找出差异分布的统计特征。明文差异和密文差异所组成的差异对被称为差分，其统计性质由加密所使用的S盒决定。也就是说，对于S盒子S，攻击者分析差分(ΔX, ΔY)，其中ΔY = S(X ⊕ ΔX) ⊕ S(X)（⊕表示异或）。在初等攻击中，攻击者希望某个密文差异出现的频率非常高，这样就能将加密和随机过程区分开来。更复杂的变体攻击能做到比穷举更快地破解出密钥。

最基本的差分密码分析密钥破解形式中，攻击者首先取得大量明文对的密文，并假设差分在至少r − 1轮后有效，r即加密算法的总轮数。攻击者在倒数第二轮与最后一轮之间差异固定的假设下，去推测可能的轮密钥。如果轮密钥比较短，那么只需举可能的轮密钥，直到最后一轮运算结果和差异的密文对一致即可。当一个轮密钥看起来明显比其他密钥常出现时，其会被假设是正确的轮密钥。

针对特定的加密算法，输入差异要经过精心挑选才能使攻击成功。这需要研究算法的内部过程；标准的方法是在加密的不同阶段，跟踪一个高频差异经过的路径，术语上将这点称为差分特征。

自从差分密码分析进入公众视野，其就成了加密设计者的基本考量。新的加密设计通常需要举证其算法可以抗此类攻击。包括AES在内的许多算法都被证明在差分分析攻击下是安全的。

攻击细则
攻击主要依赖于一点：给定输入/输出，差异特征仅在特定输入下出现。这种方法通常用于线性结构组成的加密方式，如差表结构或S盒。给定两个已知密文或明文后，观察其输出差异可猜测密钥的可能值。

举个例子，假设有一个差分：输入的最低位的变化时，引起输出最低的变化，记作1 => 1（代表輸入的最低有效位元 (LSB) 的差異導致 LSB 的輸出差異）發生的幾率為4/256，（可能在例如AES 密碼中使用非線性函數），則只有4 個值（或2 對）的輸入才可能有差分。假設我們有一個非線性函數，其中密碼在求值之前經過異或運算並允許差分的值為 {2,3} 和 {4,5}。如果攻擊者發送了 {6, 7} 的值並觀察到正確的輸出差異，則說明金鑰是 6 ⊕ K = 2 或 6 ⊕ K = 4，表示金鑰 K 是 2 或 4。

变体






另见
 密码学



参考

外部链接
 A tutorial on differential (and linear) cryptanalysis 
 Helger Lipmaa's links on differential cryptanalysis


Category:密码分析