Lecture 10: Hashing III: Open Addressing

0. Overview

  • Open Addressing, Probing Strategies
  • Uniform Hashing, Analysis
  • Cryptographic Hashing

1. Open Adressing

在 Lecture 8 中我们提到过,解决 collision 的方法有两种:

  • Chaining
  • Open Addressing

本节介绍的就是第二种。发生 collision 时,open addressing 会按照某种固定的方式寻找 table 中的下一个 slot,每个 slot 只存放一个 key/item,因此 。在 open addressing 中,hash function 负责确定 probe (探测) 的 slots 顺序,而不是只指定单个 slot: 由于最多 probe 次,因此其定义域是 。换一种方式来理解,hash function 实际上为每个 key/item 确定了一个 的 permutation (排列)。

NOTE: 这里把 open addressing 和原始 hash function 合起来当作一个 hash function 实际上增加了学生的理解负担。open addressing 与 chaining 一样,是解决 collision 的策略,这种策略适用于任意 hash function。将 collision resolution strategy 和 hash function 看作是可以组合的两个部件更容易理解。不过本文将遵守原课程教授的方式。

1.1 Operations

1.1.1 Insert

Insert key/item 时,不断 probe 直到找到空 slot 为止:

1
2
3
4
5
for i in range(m):
if T[h(k, i)] is None:
T[h(k, i)] = (k, v)
return
raise 'full'

举例如下:

根据给定的某个 probe strategy, 的 probe 顺序是 4, 6, 1, 5...,在 slot 5 之前都发生 collision,因此 496 最终被插入到 slot 5 中。

Search key/item 时,按照相同的顺序 probe,直到找到空 slot 或者目标 key 为止:

1
2
3
4
5
6
for i in range(m):
if T[h(k, i)] is None:
return None
elif T[h(k, i)][0] == k:
return T[h(k, i)]
return None

1.1.3 Delete

Delete key 时,如果直接从 slot 中移除元素会导致后续的 search 无法找到正确的结果。回到 1.1.1 insert 一节中的例子,如果我们将 从 slot 1 中移除,search(496) 将失效。合理的做法是利用某个特殊标记,如 "DeleteMe",insert 认为它是空 slot,而 search 不认为。

1.2 Probing Strategies

1.2.1 Linear Probing

顾名思义,linear probing 就是从初始位置开始往后顺序遍历,假设 为普通 hash function: 一个很好的比喻是 linear probing 就像在停车场上找车位:当车比较多时,车主会按顺序遍历车位,直到发现空的停车位位置。linear probing 的问题在于 clustering (聚集效应),当 hash table 中逐渐形成连续被占用的 slots 时,会影响新的 key/item 插入性能,同时后者将进一步产生负向反馈,进一步扩大 clustering 的影响,如下图所示:

可以证明,当 时,clusters 的大小为 。

1.2.2 Double Hashing

利用 2 个 hash function, 和 : 在什么情况下 会遍历所有 slots?假设存在 且 ,满足: 消元后得到:

如果 与 互质,则只能 。举一个具体的例子,假设 ,让 返回的永远是奇数即可。

Complexity Analysis

假设使用 open addressing 策略往大小为 的 table 中插入 个 keys/items 后,在 SUHA 下,当 时,下一次 search/insert/delete 的时间复杂度为 。

证明如下:假设我们想要继续往 table 中插入 ,且 尚不存在于 table 中。

  • 首次 probe 成功的概率为: (在 SUHA 下),记为
  • 首次 probe 失败,第二次 probe 成功的概率为:
  • 前两次 probe 都失败,第三次 probe 成功的概率为:
  • ...

每次 probe 的成功率都至少为 ,尝试次数的期望为: 以此类推,search 和 delete 的时间复杂度同样为 , 在插入前已经存在于 table 中也同理可证。

1.4 Open Addressing vs. Chaining

由于 clustering 现象的存在且实现中没有指针寻址,open addressing 对缓存更友好,但同样由于 clustering 现象的存在,open addresing 对 hash functions 的选择比较敏感,且其 不能过大 (通常要小于 70%);chaining 与 open addressing 正好相反。

2. Cryptographic Hashing

cryptographic hash function 可以将任意长度的数据稳定地 (deterministic) 转化成固定大小的 hash value,即 bit string,意外或恶意修改数据会造成 hash value 的大幅度变化。通常称待加密的数据为 message,加密后的 hash value 为 (message) digest。

2.1 Desirable Properties

假设 d 是 hash value 的 bit 数量,通常安全性较高的 ,那么理想中的 cryptographic hash function 应该具备以下特性:

  • One-Way (OW) (pre-image resistance): 通过 digest 找到一条 message 计算上不可行。即给定 ,找到 满足

  • Collision-resistance (CR):找到存在 collision 的两条 message 计算上不可行。即找到 且

  • Target collision-resistance (TCR) (2nd pre-image resistance):给定条 message,找到另一条与它冲突的 message' 计算上不可行。即给定 ,找到 满足

CR 是 TCR 的充分非必要条件,而 OW 与 CR/TCR 之间没有直接关系。

2.2 Applications

  • Password storage:在数据库存储 ,而不是 ,当用户输入 验证时,对比 与 即可。在该场景下使用的 cryptographic hash function 需满足 OW。攻击者通常无法获取 以及 ,因此 TCR 和 CR 并不是必须要求。
  • File modification detector:对于每个文件 ,保存 。检查 在传输过程中是否被篡改,只需要重新计算 对比即可。常常用在文件下载的校验过程。在该场景下使用的 cryptographic hash function 需满足 TCR,防止攻击者篡改 的同时保持 不变。
  • Digital signatures:用于非对称加密中。假设 Alice 拥有一个公钥 和一个私钥 ,Alice 可以对 message 使用私钥加密,得到 ,Bob 知道 Alice 的公钥,可以用它来验证 中的消息 是否来自于 Alice,即 。攻击者想要伪装成 Alice,伪造 。通常对于数据量比较大的 ,我们会选择先做一次散列,即 ,此时 需满足 TCR,因为我们不希望攻击者能够先让 Alice sign ,然后对外声称 Alice 发送的是消息 ,即 。

2.3 Implementations

cryptographic hash function 的核心是一个特殊的函数,其输入是 2 个固定大小的数据块,输出是对应的 hash value,如下图所示:

数据块的大小取决于算法本身,通常在 128 bits 到 512 bits 之间。上述函数是整个 cryptographic hash function 的最小计算单元,完整的加密过程是将原始待加密数据切分成固定大小,然后执行多轮次的上述计算,将前一次的结果与下一个数据块共同作为下一轮计算的输入,如下图所示:

我们称这个过程为 avalanche effect of hashing (哈希雪崩效应),即前面的数据块会不断影响后续的所有轮次加密结果。avalanche effect 使得一旦两条消息存在一点不同 (single bit),digest 就会显著不同。

综上所述,cryptographic hash function 需要决定如何切分 message,如何将前一次处理的结果输入到后一次计算中,在这两个设计点上的不同决定影响着函数的功能。

References

TODO

  • clusters 大小证明