Encryption 允许在不知道输入的情况下比较输入的哈希函数

Encryption 允许在不知道输入的情况下比较输入的哈希函数,encryption,cryptography,rsa,hash-function,Encryption,Cryptography,Rsa,Hash Function,我需要找到函数F和F\u验证,以便: F(输入1,随机种子1)=输出1 F(输入1,随机种子2)=输出2 F_验证(输出1,输出2)=真 加密要求: 给定Output1和Output2,您必须无法找到输入 F可以是一个满射函数,产生相同的输出~1/10亿次。最好在满射的频率上有一些灵活性 F_验证可以灵活地再次产生约10亿次假阳性 额外细节 1。所有输入都是唯一的 F_验证必须是一项快速功能 理想情况下,F是一个缓慢的函数 如果您对起点有任何建议,我们将不胜感激。 谢谢。一般来说,您很难找到

我需要找到函数FF\u验证,以便:

  • F(输入1,随机种子1)=输出1
  • F(输入1,随机种子2)=输出2
  • F_验证(输出1,输出2)=真
加密要求:

  • 给定Output1和Output2,您必须无法找到输入
  • F可以是一个满射函数,产生相同的输出~1/10亿次。最好在满射的频率上有一些灵活性
  • F_验证可以灵活地再次产生约10亿次假阳性
  • 额外细节

  • 1。所有输入都是唯一的
  • F_验证必须是一项快速功能
  • 理想情况下,F是一个缓慢的函数
  • 如果您对起点有任何建议,我们将不胜感激。
    谢谢。

    一般来说,您很难找到一个能做到这一点的函数,因为大多数加密函数的输出都被设计成与随机函数无法区分。因此,您不太可能找到一个函数,该函数基于随机种子生成两个相同的输出,并允许您在不知道种子的情况下恢复有关输入值的任何信息

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

    如果您需要两个不同的输出,您可以这样做:

    F(input, seed) = SHA-256(input) || HMAC-SHA-256(seed, input)
    
    这仍然表明对象是相同的,但它在不同的种子上提供不同的输出。验证是前32个字节的相等性比较

    除此之外,您还看到了验证费用不菲的情况。您可以使用RSA-PSS对对象进行签名,并且在签名中使用的salt将使两个签名不同,即使输入(您将对其进行哈希)相同。但就加密功能而言,RSA验证并不是非常便宜,尽管还有更糟糕的选择

    几乎所有其他操作都需要知道种子以便进行比较,但您没有提供这一选项。如果是,您可以使用256位种子并将F转换为:

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

    一般来说,您将很难找到一个函数来实现这一点,因为大多数加密函数的输出都被设计为与随机函数无法区分。因此,您不太可能找到一个函数,该函数基于随机种子生成两个相同的输出,并允许您在不知道种子的情况下恢复有关输入值的任何信息

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

    如果您需要两个不同的输出,您可以这样做:

    F(input, seed) = SHA-256(input) || HMAC-SHA-256(seed, input)
    
    这仍然表明对象是相同的,但它在不同的种子上提供不同的输出。验证是前32个字节的相等性比较

    除此之外,您还看到了验证费用不菲的情况。您可以使用RSA-PSS对对象进行签名,并且在签名中使用的salt将使两个签名不同,即使输入(您将对其进行哈希)相同。但就加密功能而言,RSA验证并不是非常便宜,尽管还有更糟糕的选择

    几乎所有其他操作都需要知道种子以便进行比较,但您没有提供这一选项。如果是,您可以使用256位种子并将F转换为:

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

    @因为当使用不同的随机种子时,你会得到不同的输出。这是该计划的挑战。我们是否可以验证Output1和Output2使用相同的输入,给定不同的随机种子,而不知道输入,只知道加密的输出。典型的哈希函数不是内射函数(意味着多个输入映射到相同的哈希值)。你对这些有什么要求?它们是否必须加以区分,或者你认为
    F_验证
    是一种过度近似,即如果它报告为假,那么输入肯定不相等,但如果它报告为真,输入可能相等,也可能不相等?这让我想起了一些概念。@f9c69e9781fa194211448473495534我做了一些eddits。请告诉我是否需要更多规格。@PresidentJamesK.Polk,因为当使用不同的随机种子时,您将获得不同的输出。这是该计划的挑战。我们是否可以验证Output1和Output2使用相同的输入,给定不同的随机种子,而不知道输入,只知道加密的输出。典型的哈希函数不是内射函数(意味着多个输入映射到相同的哈希值)。你对这些有什么要求?它们是否必须加以区分,或者你认为
    F_验证
    是一种过度近似,即如果它报告为假,那么输入肯定不相等,但如果它报告为真,输入可能相等,也可能不相等?这让我想起了一些概念。@f9c69e9781fa194211448473495534我做了一些eddits。如果需要更多规格,请告诉我。