0

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

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

密钥的第一部分由 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?

任何帮助都会很棒。

谢谢

4

1 回答 1

0

为了回答我自己的问题,我发现向量 Mo、Me 和 S 实际上并不是扩展密钥的一部分,正如我首先想到的那样,实际上它们只是用于生成扩展密钥和依赖于密钥的 S 框。用于白化的部分密钥的生成方式与在每一轮中使用的部分相同,使用 h 函数,除了白化之外,它们不用于其他任何地方。希望这可以为有此类问题的人节省一些麻烦。:)

于 2014-01-20T10:11:55.373 回答