【问题标题】:What are some ways to prevent deliberate malicious attacks against hash function implementations?有哪些方法可以防止针对散列函数实现的蓄意恶意攻击?
【发布时间】:2021-08-24 15:48:56
【问题描述】:

假设您有一些使用哈希函数的软件服务器,并且一些外部来源想要利用它,并且它不断使用他们知道(或很有可能)会导致冲突的密钥攻击服务器。您将如何在实践中防止这种情况发生?

我认为一种方法是在问题开始时随机选择散列函数,但这种方法似乎很慢,因为每次更改散列函数时都必须重新散列所有内容。

【问题讨论】:

  • edit您的问题包括您在所选哈希函数中遇到的特定问题以及您在该函数中看到的问题。 “通常”您不会遇到哈希冲突,那么影响您的代码的问题或攻击是什么?使用这些附加信息澄清您的问题。
  • @Progman 在 OP 中,我说它是针对“一些想要利用它的外部资源”,而“那个”是指“哈希冲突”。是一些恶意来源故意试图制造这些冲突。
  • 根据您的代码,它们不会成功,因为您可能无法仅生成哈希冲突。请edit您的问题详细描述您遇到的问题或您使用的哈希函数的问题。

标签: hashtable hash-collision


【解决方案1】:

正如您显然意识到的那样,最好的防御方法是确保他们不知道您的哈希函数会产生什么 - 理想情况下也不知道您的桶数(如果哈希函数很强,难以逆转并产生大范围的输出——比如 64 位无符号整数——然后找到两个产生相同哈希的键可能很耗时,但是找到一个在修改 N 后将哈希到特定存储桶的值只需要平均 N 次尝试任意随机,不同的键)。

在问题开始时随机选择散列函数,但这种方法似乎很慢,因为每次更改散列函数都必须重新散列所有内容。

不一定需要反复更改哈希函数...您只需要根据公开的数据/代码和可观察的行为使其不可猜测。例如,您可能会在服务器上生成一个随机种子值,将其写入某个安全文件,并将其用作哈希函数的种子(或者如果您的哈希函数不支持种子值,只需对哈希进行异或输出随机值)。即使有人知道你的哈希函数,如果他们不知道种子,那么他们就无法设计碰撞。

您还可以计算特定客户端发生的冲突,如果显然是恶意的 - 断开它们并移除它们的密钥。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 2016-11-05
    • 1970-01-01
    • 2021-05-04
    相关资源
    最近更新 更多