重温默克尔树遍历:认证路径计算算法详解
1. 引言
默克尔树在密码学和数据结构领域有着广泛的应用,特别是在认证路径计算方面。本文将详细介绍一种新的默克尔树认证路径计算算法,该算法基于Szydlo的算法,并进行了优化和改进。我们将对算法进行详细描述,证明其正确性,并分析其时间和空间复杂度。
2. 认证路径计算
2.1 定义和符号
- 设 $H \geq 2$ 为默克尔树的高度,当前叶子节点的索引为 $\phi \in {0, \ldots, 2^H - 1}$。
- 默克尔树中的节点用 $y_h[j]$ 表示,其中 $h = 0, \ldots, H$ 表示节点在树中的高度(叶子节点高度为 0,根节点高度为 $H$),$j = 0, \ldots, 2^{H - h} - 1$ 表示节点在树中从左到右的位置。
- 设 $f: {0, 1}^* \to {0, 1}^n$ 为一个密码学哈希函数,默克尔树的内部节点计算方式为:
- $y_h[j] = f(y_{h - 1}[2j] \parallel y_{h - 1}[2j + 1])$,其中 $h = 1, \ldots, H$ 且 $j = 0, \ldots, 2^{H - h} - 1$。
- 定义 $\tau$ 为叶子节点 $\phi$ 的第一个左父节点的高度。如果叶子节点 $\phi$ 本身是左节点,则 $\tau = 0$;否则,$\tau = \max{h : 2^h | (\phi + 1)}$。$\tau$ 告诉我们叶子节点 $\phi + 1$ 的认证路径在哪些高度需要新节点,需要在高度 $h