双鱼密码密钥生成



我试图弄清楚Twofish密码扩展密钥是如何生成的。

现在,我已经弄清楚首先生成密钥的一部分,并用于白化,然后在每一轮中生成 2x32 位密钥部分。

密钥的第一部分由 3 个向量组成,Mo、Me 和 S。

Mo 和 Me 的生成只需将主键扩展到第一个定义的长度,然后将其拆分为偶数和奇数 32b 字,然后将其放入 Mo 和 Me 向量中。

另一方面,向量 S 由 k 个单词组成,其中 k = N/64,在 N=128 的情况下,S 包含 2x32b 单词。

所以,我们得到了Mo(2x32)+ Me(2x32)+ S(2x32)+ 16x2x32 = 38个32位字。 缺少 2 个单词。为什么??

如果 N=

192 或 N=256 怎么办?扩展密钥如何是 40 个 32 位字而不是 41 和 44?

任何帮助都会很棒。

谢谢

为了回答我自己的问题,我发现向量 Mo、Me 和 S 实际上并不是扩展键的一部分,正如我最初认为的那样,实际上它们只是用于生成扩展键和键相关的 S 框。用于美白的部分键的生成方式与每轮中使用的部分相同,使用 h 函数,只是除了美白之外,它们不在其他地方使用。希望这能给有这种问题的人省去一些麻烦。:)

最新更新