【问题标题】:Seed for hash-table non cryptographic hash functions哈希表非加密哈希函数的种子
【发布时间】:2021-01-23 21:35:41
【问题描述】:

如果在调整大小或创建表的过程中将哈希表种子设置为随机数,这会阻止对此类哈希表的 DDoS 攻击,还是知道哈希算法,攻击者仍然可以轻松绕过种子?如果算法使用 Pearson 散列函数和随机生成的表,攻击者不知道会怎样?这样的表哈希还需要种子还是足够安全?

上下文:我想为我的玩具 Web 服务器的键值数据库使用磁盘哈希表,其中键可能取决于用户输入。

【问题讨论】:

  • 请澄清哈希表“种子”的含义。一般来说,哈希表没有种子,尽管一些特定的哈希函数确实有一些他们称之为种子的东西。无论如何,哈希函数的其余部分对于确定它是否能够充分抵抗哈希泛洪攻击也是至关重要的。
  • 通常大多数哈希函数都有种子,就像随机数生成器一样。事实上,您可以将任何散列函数变成随机数生成器。如果您使用要散列的值作为种子,随机数生成器也可以变成散列函数。哈希表种子是指在初始化或调整大小期间选择的种子值。 IE。可以尝试几种种子,选择碰撞较少的种子,以防攻击者探测表。
  • siphash 是专门为此设计的。

标签: hash hashmap hashtable hashset hashcode


【解决方案1】:

有几种方法可以保护您的哈希子系统免受“逆向选择”攻击,其中最流行的是命名为Universal Hashing,其中哈希函数或其属性在初始化时随机选择。

在我自己的方法中,我使用相同的哈希函数,其中每个字符添加到非线性混合的结果中,依赖于 uint32_t[256] 的随机数组。数组是在系统初始化期间创建的,在我的代码中,它发生在每次启动时,通过读取/dev/urandom。请参阅我在开源 emerSSL 程序中的实现。欢迎您借用整个哈希表实现,或仅使用哈希函数。

目前,来自引用源的我的散列函数为double hashing 搜索算法计算两个独立的散列。

源中有“简化”的散列函数,以展示非线性混合与 S-block 数组的想法”

uint32_t S_block[0x100]; // Substitute block, random contains

#define NLF(h, c) (S_block[(unsigned char)(c + h)] ^ c)
#define ROL(x, n) (((x) << (n)) | ((x) >> (32 - (n))))

int32_t hash(const char *key) {
  uint32_t h = 0x1F351F35; // Barker code * 2
  char c;
  for(int i = 0; c = key[i]; i++) {
    h  = ROL(h, 5);
    h += NLF(h, c);
  } 
  return h;
}

【讨论】:

  • 使用巴克有什么意义?不就是为了信号传输错误检测吗?
  • 是否有人试图找到针对此的哈希泛洪攻击的任何分析?
  • 关于 Barker;s 代码:此代码与循环移位相比具有最小的自相关性。由于散列函数使用循环移位,我需要为输入键生成最大扩展值。如您所见,barker 代码将在 65 次迭代(5x13)后返回自映射,这已经绰绰有余了,无论如何,在 65 次迭代后会添加很多来自 S-block 的值。
  • 关于hash flooding attack。我想,你假设muticollision,对吗?我开发了这个哈希函数来高度抵抗这种攻击。如您所见,它使用加密 S 块,其中的值用于将下一个字符非线性混合为哈希值。因此,要选择有效的多重碰撞,需要知道 S-block 的值。这是 2K 的随机字节(在我的代码中,从 /dev/urandom 读取),所以这不可能猜到。如果您不同意 - 请尝试创建一对冲突的密钥,在此处发布,然后我们将运行哈希(从 /dev/urandom 获得 2K),我们会看到结果。
  • 好吧,我将其与 siphash 和 siphash 使用的设计标准进行比较。 siphash 使用了一个非常保守的假设:攻击者可以观察他选择的任何输入的哈希输出。 siphash 似乎在这种假设下仍然存在,但您的哈希却没有,因为用不超过 256 个哈希来恢复整个 S 块表相对容易。但是,我对该模型的有效性有点怀疑。我想看看为什么允许攻击者观察他选择的哈希输出是合理的解释。
猜你喜欢
  • 2013-05-05
  • 2016-03-25
  • 2011-02-27
  • 2016-03-20
  • 2018-07-12
  • 2017-11-15
  • 2021-11-19
  • 2011-05-27
相关资源
最近更新 更多