Mersenne Twister混合函数是如何可逆的?

5
众所周知,MT混淆函数是可以被反转的。可以在这里找到源代码。我正在尝试弄清楚它的工作原理,并以编程的方式解决类似的问题。
我遇到的问题是,对有限大小的变量进行移位操作应该会导致不可逆的数据丢失。同样,按位与运算也应该会导致永久性的数据丢失,但是提供的示例代码可以将任何值反转为其原始的预处理状态!
另一件让我困惑的事情是,未经处理的移位操作与处理函数相同方向和数量的移位。
1个回答

6
考虑一个费斯特网络的结构。基本操作原则是将数据分成两部分,并将其中一部分哈希为掩码,以进行异或运算。即使哈希本身不可逆,这也是可逆的。在解密期间,使用相同(可能有破坏性)的哈希操作来生成与之前相同的掩码,并将其异或到另一部分中,从而将其恢复到其原始值。可以使用不同的拆分重复此操作,以便所有位都有机会影响和受到所有其他位的影响,只需按相反的顺序重新播放链即可解密它。
同样,破坏性移位和按位与仅用作排列完整副本的异或掩码。 k ^= k >> 11的意思是取k的前21位并将其异或到k的后21位。k的前11位保持不变,我们可以使用它们再次对这些位进行异或,以恢复k的下一个11位。然后,我们可以使用这些新发现的原始位将k的其余部分的原始值恢复到原始状态。

谢谢,@sh1 - 非常有帮助的解释。你最后一段提到的“21”是错别字吗?如果不是,那我真的很迷惑... - Jonathan Basile
1
不,我的意思是21。k是一个32位的值,右移11位意味着底部的11位将被丢弃,只有移位后的顶部21位保留(如21+11=32)。这21位将与最低有效位对齐进行异或操作;但请记住,该表达式来自编码操作。要解码,您确实需要按11位块处理。 - sh1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接