Skip to content

哈希链 (Hash Chain)

哈希链通常用于认证的过程中,在哈希链之前主要是使用的是 身份-密码 验证的方式。 1981年,Lamport1 提出使用哈希函数的方式代替传统的验证方式。 这种哈希链的形式在后来的实际生活中也有着广泛的应用,而且对后来区块链的出现也有一定的启发意义。


1. 构造

哈希链

长度为 \ell 的哈希链是由长度为 \ell 的序列 \{x_1,x_2,...,x_\ell\} 组成的,其中,对于 0< i\leq \ell,有 x_i=H(x_{i+1}),其中 H:\{0,1\}^*\rightarrow\{0,1\}^k 是一个密码哈希函数。

一般提到认证协议(identification protocol),一般分为两个部分:注册(registration)和认证(identification)。

  • 注册: P 随机选取 x_0\in_R\{0,1\}^k,计算 x_\ell=H^\ell(x_0),然后将 x_\ell 发送给 VVx_\ell 作为 v 保存起来; PV 各自留有一个计数器 ii 的初始值为 0
  • 认证: P 计算 x_{\ell-i}=H^{\ell-i}(x_0) 并将 x_{\ell-i} 发送给 VV 在收到 x_{\ell-i} 之后,计算 H(x_{\ell-i})\overset{?}{=}v 是否成立,如果成立,则将 v 的值重新设置为 x_{\ell-i}

Hint

现实中的 \ell 一般取得比较大,如 \ell=2^32

Hint

P 的空间复杂度是 O(\log \ell)V 的空间复杂度是 O(1)

注册过程,P 的计算复杂度是 O(\ell)V 的计算复杂度是 O(1)

认证过程,P 的计算复杂度是 O(\log \ell)V 的计算复杂度仍然是 O(1)


  1. L. Lamport, “Password authentication with insecure communication,” Communications of the ACM, vol. 24, no. 11, pp. 770–772, 1981.