关于CBC中Padding Oracle攻击的再解读——如何攻破HTTPS

为什么说是再解读呢?目前关于Padding Oracle攻击的介绍,比较好的文章包括的内容,都取自于这篇外文。但是,该文在论述一个关键问题,即如何确认Padding位数时,并没有提及,这让许多较真的读者会有很大的疑惑。本人亦如此。因此,我想再把思路做个梳理 1.分组密码和填充 常用的对称加密算法,如DES和AES,在用密钥加密数据时,只能加密和密钥长度相同的数据。对于超长数据,我们需要将其切分成块。这就带来一个问题,可能最后一个块,无法和密钥“对齐”(当然,这也包括原始数据本来就比密钥短的情况)。这就需要一些数据去填充最后的几位。常用的填充算法即***PKCS#5***,在数据填充中,使用缺失的位数长度来统一填充,说起来麻烦,上图即可明白: 即缺5位,就用0x05填充;缺2位,就用0x02填充;如果刚刚好,还要扩展出一个块,全用0x08填充。 2.初始向量和CBC加解密过程 如果每一个块都用同一个密钥加密,很容易使用统计学原理去分析和破解密文(原理大致如同e字母在英文单词中出现的概率是非常高的,因此通过统计分析,大致可能猜出X代表了e),为此CBC加密过程引入了一个初始向量,…