假设您运行到一个混乱的AES (128)实现,该实现将S框配置为0x0,0x1,…,0xFE,0xFF,您可以在其中查询几个明文以获得相应的密文。一个人需要多少个查询才能推断出密钥,以及如何处理呢?这将是一次选择性的明文攻击,但我看不出是如何做到的。非常感谢。
发布于 2019-02-26 03:05:37
如果S盒是身份映射,那么剩余的密码是线性的.
如果密码是线性的(在GF(2)上),那么任何给定位的表达式都等于:c_i = m_i \oplus m_j \oplus m_k \oplus \dots \oplus k_a \oplus k_b \oplus k_c \oplus \dots
对于每一个密文位a, b, c, j, k, \dots的不同数量和值。
基本上,每个密文位等于由明文位和密钥位组成的xor (以及适用的任何圆形常量)。
一个线性密码可以在一个选择的明文攻击下被打破。
将所有0位的块作为明文提交给加密oracle。
由于明文对密钥调度没有影响,影响每个密文位的密钥位在不同明文的调用之间不会有变化。当消息全部为0位时,任何给定的密文位的方程都是简单的k_a \oplus k_b \oplus k_c \oplus \dots。
其中,对于任何给定的密文位,a, b, c, \dots的数量和值都不同(为简单起见省略了圆形常量)。
生成的密文将等价于加密/解密密钥。
它可能/不会是用来计算密码的密钥,但它可以从密文中恢复明文,反之亦然。
要做到这一点,只需使用密文对等效密钥进行异或,然后运行"AES"*解密例程而不使用addRoundKey步骤。
概念就在这里的证明
*" AES“是引号,因为AES是一个标准。一旦它被修改(例如通过改变S框),它就不再是AES了。
https://crypto.stackexchange.com/questions/67612
复制相似问题