3

是否有实现 AES-512 算法(即加密、解密)的 javascript 可用?我发现大多数 javascript 实现了 AES-128、AES-192、AES-256。

4

9 回答 9

21

Rijdael 密码有 128、160、192、224 和 256 位变体。高级加密标准选择了 128、192 和 256 位变体。128 位对称密钥被认为与 1024 位 RSA 密钥大致一样强,而 256 位对称密钥被认为与 2048 位 RSA 密钥大致一样强。在实践中,没有人使用 192 位 AES,因为他们要么关心性能和/或出口控制,要么使用 128 位,要么偏执地使用 256 位。

在公共使用中没有单一的 512 位对称密钥密码。基于 AES 的漩涡散列函数返回 512 位摘要,但这与 512 位 AES 密码不同。

于 2010-08-22T01:13:22.697 回答
9

我知道没有 512 位 AES 这样的东西。

来自维基百科

在密码学中,高级加密标准 (AES) 是美国政府采用的加密标准。该标准包括三个分组密码,AES-128、AES-192 和 AES-256,这些密码取自最初以 Rijndael 发布的较大集合。

于 2009-08-26T10:21:01.350 回答
3

正如其他人提到的那样,由于“中间相遇攻击”给出的时间/空间权衡,双 AES-256 不提供 512 位的安全性(而不是 256+1 位的时间复杂度)。

但是我不相信有人正确回答了“如果它存在的话”AES-512 实际上会是什么。请注意,所有当前的 AES 变体都具有 128 位的固定块大小,因此 AES-512 如果存在,其块大小也只有 128 位(假设保持模式),因此不需要更改 MixColumns 或 ShiftRows子程序。

AES 标准在技术上支持扩展 AES 系统以使用 512 位密钥大小,如果您允许的话N_k>8。请注意,AES 标准 FIPS-197 的设计主要与密钥大小无关。唯一缺少的是N_k=16( 512 bit keys=16*'32 bit words') 的轮数。当前标准(第 14 页)分别指定N_r={10,12,14}了轮次N_k={4,6,8}。如下图所示N_r=N_k+6。因此N_r=22,如果N_k=16......在没有其他需要更改的情况下定义后N_r=22N_k=16只需使用给定的密钥预先填充密钥调度的前 512 位(如第 5.2 节中所述)并继续算法......

x (mod x^8+x^4+x^3+x+1)唯一的限制因素可能是每个单词都乘以 Rcon[i] 的单词,N_k因为它的周期为 51,然后开始重复。x^51=(1 mod x^8+x^4+x^3+x+1)...但是使用的最大Rcon[i]的是

i=(N_r+1)*N_b/N_k  ; ((N_r+1)*N_b is the total size (in 4 octet words) of the key schedule)
i=(N_k+6+1)*N_b/N_k
i=(N_k+7)*4/N_k
i=4+28/N_k ; (correct... ignoring rounding issues (and probably an off by one error due to laziness))

所以这不是问题,因为随着密钥大小的增加,Rcon 的使用量会减少......

于 2014-12-14T22:23:17.863 回答
2

请注意,两次运行 AES256 并不等同于(未来的)AES512 加密。

比较:2^256 + 2^256 < 2^512

换句话说,暴力破解 2 256 位密钥所需的时间明显少于暴力破解单个 512 位密钥所需的时间。

(并不是说这两种攻击在当前硬件上都是可行的)

于 2014-11-05T00:01:01.957 回答
1

我认为可能可以扩展 AES,但美中不足的是可以说是移位和反向移位值,否则应该没有问题。因此,对于 512,您需要 4 行 16 列,但您需要计算出我之前所说的移位因子。对于 1024,您只需将列数增加一倍,但需要再次计算移位和反向移位。

于 2012-09-14T19:11:57.620 回答
0

AES 只是标准,它处理各种事情。其中之一是密码,称为 Rijndael。

它只是不可用并且定义为超过 256 位。

理论上,您可以将此密码扩展到更长的密钥长度,但是对于对称密钥密码来说,256 位密钥长度已经非常强大了。

不要被 RSA 密钥和非对称密码术所迷惑。它们要弱得多,具有相同密钥长度的求和密码的等效强度要强得多。如果您修改 Rijndael,您可能会犯很多错误,从而危及您的安全。256 位 AES 密钥的强度可能与 2048 位 rsa 密钥相当

但是你能做什么,如果你想把你的偏执狂提升到一个全新的水平,只需加密一些东西,然后再次加密它。加密两次有效地使密钥大小加倍。你仍然可以避免犯错。

于 2013-11-09T23:52:25.600 回答
0

我认为您可以使用 8 行 64 位数字,这样每一行都包含一个 64 位数字,您可以轻松地对其进行密钥添加。

左/右移位没有问题,因为您可以使用编写 *int64_t __lrotl(int64_t,int)* 和 *int64_t __lrotr(int64_t,int)* 的 64 位版本。唯一美中不足的是void mixcolumns()void invmixcolumns()必须从 %4 更改为 %8 但我认为它不会起作用,但它似乎在理论上应该起作用。

于 2012-12-04T19:38:36.603 回答
-4

AES-512 没有官方标准,但是,您只需使用两个不同的 256 位密钥运行 AES-256 两次即可轻松模拟其效果。

运行两次的主要问题是优化,尽管它可能不会特别影响 Javascript,因为它无论如何都不会使用硬件加密支持。考虑到这一点,最简单的方法将完全取决于您选择的库,因为大多数库在设计时并未考虑任何类型的流功能,因此您可能会对每个 256 位的数据进行两次单独的传递您的“512 位”密钥的一部分。

正如其他人所质疑的那样,更大的问题是为什么您需要真正的 512 位保护。256 位现在仍然足够,但是,如果您担心它,那么最好的办法是设计您的系统以接受可变长度密钥,并且只需为每个 256 位块运行一次;这样,您可以在以后觉得需要升级时通过发布/生成更大的密钥来增加大小。

于 2014-05-14T15:37:29.533 回答
-10

您可以执行两次以增加加密。

例如,通过两次使用 AES-256 加密,您将拥有 256 位 Powered by 2 因此变为 65536 位加密。;) 我怀疑你是否会喜欢这方面的表现。128 位加密两次将是 16,384 位加密。你应该只使用一个密钥进行一次加密,如果你想加密两次,你必须有两个密钥进行两次不同的加密,我可以向你保证,任何人都很难突破这种加密。;)

于 2010-11-02T15:25:37.603 回答