您怎么知道什么时候您拥有正确的密钥?假设他们测试了正确的密钥。然后,他们必须检查解密后的文本是否有意义。为此,他们可以测试词典中是否有单词。

但是,我们假设邮件先用Enigma加密,再用RSA加密。他们试图强行使用RSA加密,但是如何知道自己获得了正确的密钥,因为文本本身是用Enigma加密的,并且字典中没有单词?

评论

这就是一次性垫完美的原因:无法告诉您是否猜对了键。

如果我见过一个人,这是一个可疑的问题

@mcfedr我认为这实际上是一个很好的问题,不一定可疑

#1 楼

首先,不要通过蛮力破坏RSA。 RSA是具有公钥/私钥对的非对称加密算法。公钥具有强大的内部结构,并且对其进行拆解可以访问私钥(基本上,公钥的主要组成部分是模数,它是一个大的复合整数,并且私钥等效于对模数的素数)。与尝试可能的私钥相比,这可以更有效地完成操作。实际上,一次尝试素因子是一种称为“试验除法”的方法,在所有整数因子分解方法中效率最低。

最重要的是,攻击者完全知道自己何时知道已经找到了私钥,因此他不需要看到任何加密的文本。


现在让我们假设您不是在谈论RSA加密,而是一种对称加密算法,例如AES。在这种情况下,您的问题更有意义,因为:


在对称加密算法中,没有公用密钥可以使用,因此攻击必须从某些截获的密文中进行。 br />在对称加密算法(至少是“安全”算法)中,最著名的攻击方法确实是蛮力。蛮力是必不可少的通用方法(至少在理论上是这样-在实践中,我们使用足够大的键使其完全不可行);如果没有更好的攻击方法,则加密算法被认为是安全的。

Enigma使用拉丁字母(从“ A”到“ Z”的26个字母)作为输入和输出序列。现代加密系统工作于比特和八位字节,即“二进制数据”。如果您将AES与Enigma级联,则需要一些常规的字母表示形式,例如ASCII码。例如,您会将Enigma输出的每个字母映射到8位字节中,以用作AES的输入。由于26不是2的幂,因此不可避免的是此映射将具有“空洞”:必然有一些位序列可能是有效的AES输入,但不能作为编码的Enigma输出。

因此,这为攻击者提供了一种有效的策略:对于每个可能的AES密钥,解密AES层,然后查看结果是否为有效的编码Enigma输出。如果不是,则说明AES密钥错误,然后继续下一个。如果使用ASCII编码,则AES解密的16字节输出是有效的Enigma输出编码,仅在7803076729492126.75中具有大约1的概率。这是由于存在25616个可能的16字节序列,但只有2616个可能的16个大写字母序列的事实。这是攻击者识别坏键的强大功能。如果攻击者可以访问两个加密的块(32个字节,对应于Enigma输出的32个字符),那么他将能够查明“有意义”的单个AES密钥。在所有这些方面,攻击者甚至不必开始考虑如何突破谜题。您可能会想到存在于同一世界中的级联算法;例如两种均在位上工作的对称加密算法。

级联算法是构造更大的加密算法的一种方法。不过,这不是一个很好的选择。例如,假设您将AES与另一个分组密码(例如Serpent)级联;或者,也许您使用两个带有单独选择的密钥的AES实例。从而可能希望产生具有两倍密钥长度的合成分组密码。但是它并不能实现所有这些承诺:双重加密方法是“遇到中间人”攻击(不要与无关的“中间人”攻击相混淆)的牺牲品。这样的架构可能很有启发性:因此,通过级联两个算法,可以使运营成本增加一倍,但并不能使安全性增加。要真正获得额外的安全性,您必须进行三重加密。这就是为什么三重DES是三重DES而不是三重DES的原因:双重DES不会比简单DES强大得多。完全没有如果您将AES与其他任何元素级联,那么“其他任何东西”都是完全没有用的,因为AES已经足够强大,可以击败蛮力攻击。否则您使用AES的能力很差,这是您应该首先解决的问题。

评论


$ \ begingroup $
值得注意的是:如果您有足够的计算资源来破解AES-128,那么您肯定有足够的计算资源来破解Enigma。即使使用简单的暴力破解,Enigma的安全性仍约为80位-比AES容易得多。 (当然,同盟国证明,第二次世界大战期间的实际安全性大大降低了)。
$ \ endgroup $
–nneonneo
16年2月28日在21:40

$ \ begingroup $
如果发件人使用自己的类似于ASCII的个人表,您将如何强行使用?攻击者将需要测试相同的序列是否以与某种语言中的字母相同的速率出现。但是,然后您可以构建一个类似ASCII的表,假设有1000种编码每个字母的方式,那么您将不再能够检测冗余(取决于消息的长度),那么您将如何测试您的在AES加密中找到正确的密钥?
$ \ endgroup $
– ChiseledAbs
16-2-28在23:05

$ \ begingroup $
尽管Enigma可能是易破解的,但今天您可能会实现这个想法,而不是受限制的硬件。因此,您将加密256个值,而不是26个。您将有8个轮子,而不是3个或4个。依此类推。
$ \ endgroup $
– gnasher729
16年2月29日在0:07

$ \ begingroup $
在RSA中,公钥由两个整数组成,其中较大的是“模数”。它是一个非素数整数。如果您知道模数的素数,那么您就知道私钥,因为这些素数就是私钥。当然,很难获得质因数,以至于如果模数足够大是不可行的,这就是为什么我们可以公开模数的原因:它没有揭示质因数。
$ \ endgroup $
–托马斯·波宁(Thomas Pornin)
16年2月29日在1:52

$ \ begingroup $
另外,您从Wiki文章中提取的图表在我继续阅读该文章之前没有任何意义,它解释了这是什么类型的攻击,并且需要时间来交换空间。无论如何,好的答案,但仍有改进的余地。 :)
$ \ endgroup $
– Peter Cordes
16-2-29在6:15

#2 楼

让我们假设攻击者完全了解如何加密此信息。攻击者知道(在您的示例中)明文是先用Enigma然后再用RSA加密的。

尝试暴力破解时,他们将首先针对RSA加密测试密钥。在这一点上,攻击者可以在假设使用加密加密的情况下检查输出数据是否有意义(例如,我可以假设他们可以检查输出的数据是否全部为ASCII字符)。然后他们可以继续尝试攻击谜题加密。

#3 楼

在现代密码学中,攻击者被认为可以更改密文。由于这个事实,解密总是输出错误或正确的解密。因此,您可以通过观察身份验证的解密是否成功来验证密钥猜测。同态属性。

因此,在您的示例中,攻击者猜测RSA密钥,直到他命中为止,该密钥才提供有效的解密,并以此为基础破解密文。

#4 楼


但是他们怎么知道他们得到了正确的密钥,因为文本本身是用Enigma加密的,并且字典中没有单词? t。
当然,您可以结合几种加密算法,从而找出是否破解了一个加密级别,例如添加一个校验和,该校验和仅在加密破坏后才有效。但是正确设计的加密方案将不允许这种信息泄漏,因为这会削弱加密。

#5 楼

您建议结合两种加密方法。原则上,攻击者可以弄清楚如何有效地将您的加密分为两个独立的部分,这些部分可以独立破解,或者不能。一个臭名昭著的案例是用于加密DVD的加密:这是一种40位加密,但是可以分为一个16位加密和一个25位加密(不是24位,有一些重叠)。这种分裂使得它十年前很容易破解。

#6 楼

正如其他人在回答中所说的那样,这个有趣问题的答案基本上是:已知纯文本。

基本上,攻击者必须事先了解明文的某些属性,才能确定其解密是否产生了可信的结果。在明文中仅能找到ASCII字母的假设是关于明文的知识。假设大多数纯文本片段必须包含词典中的单词也是有帮助的。

这引发了一个问题,即是否以及如何可以应对这种攻击。双重或三次加密增加了攻击者必须花费的精力,但并不能减轻原始问题。某些编码表示形式,当反转时,会将任何输入映射到合理的纯文本中。使用这种预加密和后解密可以避免上述已知的明文攻击向量。

示例:

我有一个帐号,例如1234567890。这意味着任何有效的明文只能包含数字0-9。可以说这些数字由0到9之间的8位值表示。此明文具有不便的属性,即在每个8位值中,高4位始终为0(平均为4.83位)。 />现在,在加密之前,我通过在{0*10, 1*10, 2*10, ..., 24*10}的每个明文字节中添加一个随机数来对明文进行预处理;然后进行加密。

解密文本的解码只是b mod 10。此解码可以应用于任何(随机)输入,并且始终会产生合理的帐号。如果输出是正确的帐号,则无法从解密尝试的任何结果中推断出该帐号。您的映射算法会将任何输入解码为字符序列,例如a-zA-Z0-9.!,+-,但未透露其输入的有效性。

(以上所有内容当然都是假设编码表示的明文中没有其他已知模式。对于帐号示例,字节值250 ... 255将不会以编码形式出现,这为攻击者带来了优势平均每字节2.59位;但是对我们来说,这比他编码前的4.83位要好。)