【问题标题】:Hash Function which allows for comparison of input without knowing input [closed]哈希函数,允许在不知道输入的情况下比较输入[关闭]
【发布时间】:2021-01-04 00:43:52
【问题描述】:

我需要找到函数 FF_Verification 使得:

  • F(Input1, RandomSeed1) = Output1
  • F(Input1, RandomSeed2) = Output2
  • F_Verification (Output1, Output2) = TRUE

加密要求:

  1. 鉴于 Output1Output2,您一定无法找到输入。
  2. F 可能是一个满射函数,产生相同的输出~1/Billion~ 次。最好对满射的频率有一定的灵活性。
  3. F_Verification可能会产生误报再次 ~1/Billion~ 次,具有一定的灵活性

额外细节

  1. 1。所有输入都是唯一的
  2. F_Verification必须是快速函数
  3. 理想情况下,F 是一个慢速函数

任何关于起点的建议将不胜感激。 谢谢。

【问题讨论】:

  • @PresidentJamesK.Polk 因为当使用不同的 RandomSeeds 时,您将获得不同的输出。这是节目的挑战。我们能否在不知道输入的情况下验证 Output1 和 Output2 使用相同的 Input 给定不同的 RandomSeeds,只知道加密的输出。
  • 一个典型的散列函数不是单射的(意味着多个输入映射到同一个散列值)。您对这些有什么要求?是否必须区分它们,或者你认为F_Verification 是一个过度近似,如果它报告为假,那么输入肯定不相等,但如果它报告为真,输入可能会或可能不会是平等的吗?
  • 这让我想起了一点zero knowledge proof 的概念。
  • @f9c69e9781fa194211448473495534 我做了一些编辑。如果需要更多规范,请告诉我。

标签: encryption cryptography rsa hash-function


【解决方案1】:

一般来说,您将很难找到执行此操作的函数,因为大多数加密函数的输出设计为与随机无法区分。因此,您不太可能找到一个函数,它既能基于随机种子产生两个相同的输出,又能让您在不知道种子的情况下恢复有关输入值的任何信息。

但是,您可以使用一些结构。如果两个输出可以是完全相同的输出,那么您可以跳过随机种子并让 F 成为安全哈希函数,如 SHA-256 或 BLAKE2b。那么验证就是相等比较。这是哈希函数设计的理想情况,除非您知道自己需要不同的行为,否则我建议您这样做。

如果你需要有两个不同的输出,你可以让 F 这个:

F(input, seed) = SHA-256(input) || HMAC-SHA-256(seed, input)

这仍然表明您的对象是相同的,但它在不同的种子上提供了不同的输出。验证是前 32 个字节的相等比较。

除此之外,您还会看到验证成本不高的情况。您可以使用 RSA-PSS 对对象进行签名,并且您在签名中使用的盐将使两个签名不同,即使输入(然后您将对其进行哈希处理)是相同的。但就加密功能而言,RSA 验证并不是超级便宜,尽管还有更糟糕的选择。

几乎所有其他操作都涉及了解种子以进行比较,而您还没有将其作为选项提供。如果是,您可以使用 256 位种子并将 F 变成这样:

F(input, seed) = AES-Key-Wrap(seed, SHA-256(input))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 2018-03-24
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    相关资源
    最近更新 更多