1

我正在实现用于教育软件的 Twofish 算法。我将 QT 用于 UI 并使用来自 Wikipedia 的研究和 Bruce Schneier 的 Twofish 论文,但我坚持生成美白子键。我已经成功地理解了如何生成圆形子键,但还没有找到生成美白子键的方法。

我取 k = 2(128 位密钥,128/64 = 2),所以,2k = 4;M_e 和 M_0 的大小为 2,我从原始密钥填充它们并计算 16 轮的轮密钥,每轮 2 个密钥。

所以,我得到的不是 40 个子键,而是 32 个。

我错过了美白8的地方?我已经重新阅读了这篇论文,但没有找到适合它们的算法,或者关于如何生成它们的建议,比如在轮次之前或之后如何生成第一个或最后一个 N 个键。

如何生成美白键?

4

1 回答 1

1

来自双鱼纸

第 5 页:

Twofish 在第一轮 Feistel 之前异或 128 位子密钥,在最后一轮 Feistel 之后再异或 128 位。这些子密钥的计算方式与轮子密钥相同,但不会在密码中的其他任何地方使用。

第 7 页上的方程式表明,输入白化是用前 4 Ki 完成的,输出白化是用接下来的 4 Ki 完成的。

函数 F(在主回合中使用)使用密钥 K_(2r+8) 和 K_(2r+9)。添加 +8 和 +9 是为了跳过用于美白的 8 个键。

总之,您需要为额外的 4 轮生成密钥(额外生成 8 个密钥)。前 4 个键用于输入,后 4 个用于输出。

于 2013-06-09T17:51:32.017 回答