纯理论上。我知道尝试发明自己的加密是一个坏主意,这不是这里的意图。只是一个思想实验。

说,我更改了AES中使用的部分或全部魔术数字(但这也适用于其他算法)并创建了“ AES-RobIII”。当然,这将与当前的AES算法不兼容。


第一:我知道这些数字(通常)是非常谨慎地选择的(有时甚至是精心制作的,以便它们可以包含秘密)后门,但我对阴谋论等不感兴趣)。通常如何选择这些数字,我认为可能有很多(“无限”)变化?它们是否来自“ RNG”(已调整为某些特定规则)?他们是“手动”选择的吗?我知道他们必须满足一些多项式,但是他们(设计算法的密码学家)只是从随机种子开始,还是选择一个特定的数字或...?从理论上讲(就像任何好的加密算法一样),我可以理论上用它们填充加密的消息,并在算法开始进行加密/解密之前用数字“装载”这些表,对吗?
那么为什么这些数字首先在算法中作为常量(除非大小是当然优先)?还是为什么我们没有AES-I,AES-II和AES-III,而唯一的区别是另一组幻数呢?您甚至可以考虑魔术数字表使用某种“额外密钥”,例如,公司可以在内部使用其生成的(类似于生成私钥/公共密钥对的方式)数字集来额外添加东西泄漏时的安全性。我意识到这不会增加太多(如果有的话),但是会增加复杂性,但我只是想知道。

再一次,我意识到这根本不会增加任何意义的优势(可能),但是我只是想知道。同样,此问题基于以下假设:如果我更改任何幻数并用它加密某些东西,然后尝试对其进行解密(使用相同,更改的幻数),它仍然可以正确解密。

Update:到目前为止,答案似乎主要集中在AES上,但这只是一个例子。我可以选择任何算法(尽管我意识到每个算法的细节可能有所不同)。我还意识到AES足够强大,并且AES在很多硬件中实现。尽管我可以将这些魔术值加载到某些“寄存器”或“专用ram”中,但我认为没有问题(但我知道它的性能会低得多,并且会占用更多的晶圆空间)。我/我从理论的角度看更多,而速度或实用性并不(真的)重要。

评论

有趣的花絮:“ GOST的块大小为64位,密钥长度为256位。其S盒可以是秘密的,并且包含大约354位秘密信息,因此有效密钥大小可以增加到610位;但是,选择密钥攻击可以以大约$ 2 ^ {32} $加密恢复S-Box的内容。”不是说我会选择GOST(就像我不会选择DES一样),而是有一些使用特殊S盒的功能。

在算法中固定幻数的原因之一是,您可以构建高效的硬件来实现它。

#1 楼


如何选择这些(魔术)数字?


很大程度上取决于哪种算法以及哪个魔术数字。他们很少是完全武断的。在AES中,通常采用最低值,以使某个数学属性成立,并且该属性(可证明地或合理地)有助于安全性。在其他算法中,可能是在其他上下文中预先存在的值(例如数学常数),经常对其进行筛选以便满足某些条件(例如,奇数)。 “手动”?


经常这样。或者,就像在AES S盒中那样,使用辅助程序。


理论上,我可以用它们填充加密后的消息,并在这些表之前用数字“装入”



是的。



那么为什么在算法中将这些数字作为常量呢?


奥卡姆剃须刀。还有其他一些很好的理由,其中包括:引入参数而不是常量,尤其是沿着消息引入参数,而不是常量,这可能会非常现实地受到攻击。例如,如果AES S-box的参数以短AES-GCM消息为前缀,则攻击者可以更改前缀中的这些常量中的某个位,并查看尽管有此更改,消息是否仍被接收者接受,这意味着可能在解密期间此位的特定S-box条目未处于活动状态,这可能会显示许多有关消息和密钥的信息。可以通过尝试解密的实际次数来恢复消息和密钥。
将常量更改为变量将使硬件实现变慢,变大,耗电且复杂。在AES的情况下,标准常数被刻入现代CPU中。
更改常量可能会使将常量转换为硬件或软件的复杂优化(速度或旁通道泄漏)无效。如果是AES S盒,请参见琼·博亚尔(Joan Boyar)和雷内·佩拉尔塔(RenéPeralta):AES S-Box的第16深度小电路,在SEC 2012会议上进行。一种“附加键”


有更好的方法来获取它。例如,可以通过将密钥派生函数应用于普通密钥和附加密钥来获得输入到AES密钥输入的内容。

评论


$ \ begingroup $
在这种情况下,XOR是否可以作为良好的KDF?最终所得到的密钥和“额外”密钥输入将被视为秘密。 Dunno,可能改用ECB加密只是为了至少感到更安全。
$ \ endgroup $
–马腾·博德威斯♦
19/12/9在13:03



$ \ begingroup $
@Maarten-恢复莫妮卡:当我第一次输入答案时,我补充说XOR可以。然后,我想到了针对AES的相关密钥攻击,并且不想在不安全的方面犯错。因此,我未指定KDF。
$ \ endgroup $
–fgrieu♦
19/12/9在13:50

#2 楼

Rijndael S-box上的Wikipedia页面描述了如何选择数字(注意:Rijndael是产生AES的竞赛的获胜者。)首先,将输入映射到其乘法逆in
GF(28)= GF(2)[x] /(x8 + x4 +
x3 + x + 1),Rijndael的有限域。没有
逆的零被映射为零。这种转换在发明家Kaisa Nyberg之后被称为“ Nyberg S-box”。然后使用[an]仿射变换来变换可乘的
逆。 S-Box经过专门设计,可以抵抗线性和差分密码分析。这是通过最小化输入/输出位的线性转换之间的相关性,同时最小化差异传播概率来实现的。Rijndael S-Box可以是替换了Rijndael密码,从而消除了人们对内置在利用静态S-box的密码中的后门的怀疑。作者声称,如果使用具有“平均”相关/差分传播特性的S-Box,则Rijndael密码结构应提供足够的抵抗差分和线性密码分析的能力。


还有其他一些具有固定常数的原因:


将SubBytes表添加为键的一部分将需要额外的256字节(2048位)信息到“关键”。有256个! = 10506个可能的排列,因此理论上可以减少到大约1600位,但这仍然比典型的对称密钥大得多。具有预定义的AES-II,AES-III等变体可以大大减少这种情况,但仍会添加一些位以指定使用哪个变体。
嵌入式系统的内存可能非常有限。 ATmega328(在Arduino Uno中使用)只有2048字节的RAM,因此256字节的表将占据可用RAM的八分之一。它还只有32 KB的程序存储器,因此即使使用预定义表也将受到限制。
包括当前x86和ARM处理器在内的多个处理器都具有AES指令。 ,AES目前足够强大。引用有关AES的维基百科文章:


目前,尚无已知的实际攻击手段,允许不知道密钥的人读取由AES加密的数据>正确实施后。

评论


$ \ begingroup $
也许值得一提的是Rijndael是AES,所以人们知道您为什么要交替使用两者。
$ \ endgroup $
–帕特里克M
19 Dec 10'在5:02