【问题标题】:Reversible math function that looks random看起来随机的可逆数学函数
【发布时间】:2019-03-03 21:36:28
【问题描述】:

我想要一个数学函数 y = f(x),其中 x 和 y 是 32 位整数,这样

  1. 通过某些函数 x = g(y) 是可逆的
  2. 序列 f(1), f(2), f(3), ... 看起来是随机的

我曾想过用一些恒定键进行异或运算,但这看起来并不随机。我也可以使用 DES 或 AES。但这些似乎有点矫枉过正。

还有更简单的吗?

【问题讨论】:

  • 一些术语是有序的:一个真正可逆的函数 f: A -> A 被称为 A 上的 排列。所以你想要一个看起来“随机”的空间排列32 位整数。有无数种方法可以构建这样的东西,所以你需要更加具体。您可以使用 AES 或 DES 或 Blowfish 作为示例,并将所有内容缩小为 4(对于 AES)或 2(对于 blowfish 和 DES),并且仅使用几轮作为示例。
  • 我闻到了 XY 问题...
  • 尝试分组密码,例如 Skip32。但请注意,这总是将一个值加密为另一个值,因此您需要记住,输入的重复会导致输出的重复,可能会将信息泄露给对手。
  • 定义“看起来随机”
  • @JohnColeman 这个想法是很难预测给定 f(1) ... f(n-1) 的值 f(n) 见en.wikipedia.org/wiki/Pseudorandomness

标签: math encryption integer


【解决方案1】:

尝试使用 Skip32 等分组密码。但请注意,这总是将一个值加密为另一个值,因此您需要记住,输入的重复会导致输出的重复,可能会将信息泄露给攻击者。

否则,您可以查看格式保留加密。有一些方法可以将分组密码的大小减半,例如 3DES,它具有显着更高的安全余量(如果使用三个随机密钥,则为 112 位),例如使用 Feistel 网络。

一个奇怪的密码是 Hasty Pudding Cipher,它有一个可配置的块大小。但是,该密码的安全性值得怀疑,并且至少没有得到足够的研究。

【讨论】:

    【解决方案2】:

    在问了这个问题之后,我找到了一个不同的解决方案(将哈希附加到我的顺序键)。但这仍然是一个有趣的问题。我认为最好的答案是实现一个简单的分组密码算法。有几个examples here

    【讨论】:

      猜你喜欢
      • 2015-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      相关资源
      最近更新 更多