假设我有一个密钥-k和纯文本P.然后使用密钥k用AES加密P:
C = AES_k(P)
现在让我说我有另一个我选择的纯文本 - P *。这个纯文本与P无关,我选择它是我想要的任何东西。
是否有可能找到一个密钥 - k *,这样当我用k *解密C时我会得到P *?
含义: D_k *(AES_k(P))= P *
答案 0 :(得分:8)
我认为密钥不一定存在。键定义了块的所有可能值的置换。使用128位块大小,有(2 ^ 128)!可能的排列。使用256位密钥,有2 ^ 256个可能的密钥。这远远小于排列的数量,因此不是每个排列都可以指定。我认为 - 虽然我当然无法证明,甚至争辩 - 这意味着可能没有可指定的排列将您选择的第二个明文映射到密文。
如果存在这样的排列,我认为很难找到。如果这很容易,那么对密码的明文攻击就会变得微不足道。
答案 1 :(得分:4)
我在这里假设您的明文和密文P,P *和C都是128位块。
如果您的密钥k和k *具有128位长度(即您使用的是AES-128),那么,概率大约为36.8%,则没有解决方案:更正式地说,如果您考虑所有可能值的集合对于C和P *(2 256 组合),那么对于它们的大约e -1 ,没有k *使得AES_k *(P *)= C. / p>
这是因为,对于给定的P *值,将k *转换为AES_k *(P *)的函数应该表现为随机函数,并且来自一组大小的随机函数 N 到一组相同大小 N 的目标集的平均覆盖范围为1-e -1 。这里,对于给定的P *,大约有63.2%的128位字是可以输出的带有128位密钥的P *的AES加密。
另一方面,如果你允许k *更宽(AES也接受192位和256位密钥),那么你的等式应该有很多解* k *。
无论如何,实际上找到 k *(甚至是192位或256位k *)应该是不可行的,工作因子接近2 128 操作。能够找到工作量少于k *的k *可以被视为AES的结构性缺陷。对P和k的了解绝不有助于:对于给定的128位密文C,很容易找到匹配对(P,k)。
注意:如果您使用AES并交换明文和密钥的角色,那么您将获得具有有限输入和128位输出的散列函数的粗略模拟。您要求的是对该哈希函数进行原像攻击的可行性。
答案 2 :(得分:1)
对于您选择的任何明文,这都不可能。能够将密文解密为任意明文意味着完美安全(或完美保密)。
例如,如果我有密码ADGWTX并且我知道它是使用简单的XOR和6个字母密钥加密的,那么我仍然无法在没有关于密钥的更多信息的情况下解决这个问题。因为一把钥匙会给我ESCAPE,而另一把钥匙会给我ATTACK。
完美的安全性是“一次性垫”(http://en.wikipedia.org/wiki/One-time_pad)的一个特征,但不是AES。
答案 3 :(得分:1)
有可能获得k *并解密C以获得明文P *,但只能通过使用其他类型的密码解密,例如vernam密码。
你可以得到k *,使得D_k *(AES_k(P))产生你的P *。
你这样做:P * ^ C得到你的k * 然后,如果你解密:k * ^ C你得到P *(假设C和P *都是相同的大小)
但如果P *的大小小于C,那么它将产生重复的P *
^:按位XOR
我不确定这是不是你想要的,你没有提到你也想用AES解密它。