译自 halo2 book:https://zcash.github.io/halo2/design/protocol.html
协议描述(Protocol Description)
预备知识
我们取 作为安全参数(security parameter),除非另有明确说明,所有算法和敌手(adversary)都是在该安全参数下以多项式时间运行的概率性(交互式)图灵机。我们用 表示一个在 上可忽略(negligible)的函数。
密码学群(Cryptographic Groups)
我们令 表示一个素数阶 的循环群。群的单位元写作 。我们把 中元素的标量(scalar)称为大小为 的标量域(scalar field) 中的元素。群元素用大写字母书写,标量用小写字母或希腊字母书写。标量向量或群元素向量用粗体书写,即 和 。群运算以加法形式书写,群元素 乘以标量 写作 。
我们经常用记号 来表示两个等长标量向量 的内积(inner product)。我们也用这个记号来表示群元素的线性组合,例如 ,其中 ,在实践中通过多标量乘法(multiscalar multiplication)来计算。
我们用 表示一个长度为 、仅包含 中零元素的向量。
离散对数关系问题(Discrete Log Relation Problem)。 优势度量(advantage metric) 是相对于以下博弈(game)定义的。
给定一个 长度的群元素向量 ,离散对数关系问题 要求找出 使得 但 ,我们称之为一个 非平凡的 离散对数关系。如 [JT20] 的引理 3 所示,该问题的困难性可由群中离散对数问题的困难性紧致地推出。形式上,我们使用上面定义的博弈 来刻画该问题。
交互式证明(Interactive Proofs)
交互式证明 是一个三元组算法 。算法 输出某些 公共参数(public parameters),通常用 来指代。证明者 和验证者 是交互式机器(可访问 ),我们用 表示一个在它们之间以输入 执行两方协议的算法。该协议的输出是它们交互的一个 副本(transcript),包含 与 之间发送的所有消息。在协议结束时,验证者输出一个决策比特。
零知识知识论证(Zero knowledge Arguments of Knowledge)
知识证明(proofs of knowledge)是这样的交互式证明:证明者旨在使验证者相信,对于某个陈述 和多项式时间可判定关系 ,他们知道一个证据(witness) 使得 。我们将处理 论证(arguments) 形式的知识证明,它假设证明者在计算上是有界的。
我们将通过四种安全概念来分析知识论证。
- 完备性(Completeness): 如果证明者持有一个有效的证据,他们能 总是 说服验证者吗?理解这一性质很有用,因为它可能会对其他安全概念产生影响。
- 可靠性(Soundness): 一个作弊的证明者能否虚假地使验证者相信一个实际上并不正确的陈述的正确性?我们把作弊证明者能虚假地说服验证者的概率称为 可靠性误差(soundness error)。
- 知识可靠性(Knowledge soundness): 当验证者被说服相信陈述是正确的时,证明者是否确实持有("知道")一个有效的证据?我们把作弊证明者虚假地使验证者相信这种知识的概率称为 知识误差(knowledge error)。
- 零知识(Zero knowledge): 验证者除了能从陈述的正确性以及证明者拥有有效证据这一事实推断出来的内容之外,是否还学到了别的东西?
首先,我们来看完备性的简单定义。
完美完备性(Perfect Completeness)。 一个交互式论证 具有 完美完备性,如果对于所有多项式时间可判定关系 以及所有非一致(non-uniform)多项式时间敌手
可靠性
使我们的分析复杂化的是,尽管我们的协议被描述为一个交互式论证,但它在实践中是通过使用 Fiat-Shamir 变换实现为一个 非交互式论证(non-interactive argument) 的。
公开掷币(Public coin)。 我们说一个交互式论证是 公开掷币(public coin) 的,当验证者发送的所有消息都各自以新鲜随机性采样时。
Fiat-Shamir 变换(Fiat-Shamir transformation)。 在这个变换中,一个交互式、公开掷币的论证可以在 随机预言机模型(random oracle model) 下被变为 非交互式,方法是用一个产生足够随机外观输出的密码学强哈希函数替换验证者算法。
这一变换意味着,在具体协议中,一个作弊的证明者可以通过分叉副本(forking the transcript)并向验证者发送新消息来轻易地"回退(rewind)"验证者。研究我们的构造在应用这一变换 之后 的具体安全性很重要。幸运的是,我们能够遵循 Ghoshal 和 Tessaro([GT20])的一套分析框架,它已被应用于与我们类似的构造。
我们将通过 状态恢复可靠性(state-restoration soundness) 这一概念来研究我们的协议。在这个模型中,允许(作弊的)证明者将验证者回退到它之前所处的任意状态。如果证明者能够产生一个被接受的副本,则他们获胜。
状态恢复可靠性(State-Restoration Soundness)。 设 是一个具有 个验证者挑战(challenge)的交互式论证,并设第 个挑战从 中采样。状态恢复证明者 的优势度量 是相对于以下博弈定义的。
如 [GT20](定理 1)所示,状态恢复可靠性与应用 Fiat-Shamir 变换之后的可靠性紧致相关。
知识可靠性
我们将证明,我们的协议满足一种被称为 证据扩展模拟(witness extended emulation) 的、被强化的知识可靠性概念。非形式地说,这一概念指出:对于任何成功的证明者算法,都存在一个高效的 模拟器(emulator),它能通过回退该算法并向其提供新鲜随机性来从中提取出一个证据。
然而,我们必须对证据扩展模拟的定义稍作调整,以考虑到我们的证明者是状态恢复证明者并且能够回退验证者这一事实。此外,为了避免在证据提取过程中需要回退状态恢复证明者,我们在代数群模型(algebraic group model)下研究我们的协议。
代数群模型(Algebraic Group Model,AGM)。 一个敌手 被称为 代数的(algebraic),如果每当它输出一个群元素 时,它也输出一个 表示(representation) 使得 ,其中 是 迄今为止所见到的群元素向量。 在记号上,我们写 来表示带有该表示增强的群元素 。我们也写 来标识 的表示中对应于 的分量。换言之,
代数群模型允许我们对某些协议执行所谓的"在线(online)"提取:提取器(extractor)可以从单个(被接受的)副本的表示本身中获得证据。
状态恢复证据扩展模拟(State Restoration Witness Extended Emulation) 设 是一个针对关系 、具有 个挑战的交互式论证。我们对于所有非一致的代数证明者 、提取器 ,以及计算上无界的区分器(distinguisher) 定义优势度量 是相对于以下博弈定义的。
零知识
我们说一个知识论证是 零知识(zero knowledge) 的,如果验证者除了从有效 存在这一事实所能学到的内容之外,也不从他们的交互中学到任何其他东西。更形式地说,
完美特殊诚实验证者零知识(Perfect Special Honest-Verifier Zero Knowledge)。 一个公开掷币的交互式论证 具有 完美特殊诚实验证者零知识(PSHVZK),如果对于所有多项式时间可判定关系 、所有 ,以及所有非一致多项式时间敌手 ,都存在一个概率多项式时间模拟器(simulator) 使得 其中 是验证者的内部随机性。
在这个(常见的)零知识定义中,验证者被期望"诚实地"行动,并发送仅与其内部随机性相对应的挑战;他们不能基于证明者的消息自适应地响应证明者。我们使用这一定义的一种强化形式,它强制模拟器输出一个带有验证者算法发送给证明者的相同(由敌手提供的)挑战的副本。
协议
设 是一个 次本原单位根(primitive root of unity),构成域 , 是该域上的消失多项式(vanishing polynomial)。设 为正整数,满足 且 。我们针对关系 给出一个交互式论证 ,其中 是关于 度数为 的(多元)多项式, 关于任意不定元 的度数至多为 。
返回 。
对于所有 :
- 设 为所有整数 (模 )的穷举集合,使得 作为一项出现在 中。
- 设 是一个由互异整数集合构成的列表,包含 以及集合 。
- 当 时设 。
设 表示 的大小,并不失一般性地设 表示每个 的大小。
在以下协议中,我们将默认每个多项式 的定义方式使得:有 个盲化因子(blinding factor)由证明者新鲜采样,并各自作为 在域 上的一个求值出现。在以下所有内容中,验证者的挑战不能为零或 中的元素,此外对某些特定挑战还设置了额外的限制。
- 和 进行以下 轮交互,在第 轮(从 开始)中
- 设
- 发送一个隐藏承诺(hiding commitment),其中 是一元多项式 的系数,而 是某个为简化叙述而省略的、随机且独立采样的盲化因子。(这种省略记号在本协议描述中通篇使用以简化叙述。)
- 以挑战 作出响应。
- 设 。
- 发送一个承诺 ,其中 是一个随机采样的、度数为 的一元多项式 的系数。
- 计算一元多项式 ,其度数为 。
- 计算至多 度的多项式 使得 。
- 对所有 发送承诺 ,其中 表示 的系数向量。
- 以挑战 作出响应,并计算 。
- 设 。
- 发送 ,并对所有 发送 使得对所有 有 。
- 对所有 , 和 设 为最低度数的一元多项式,其定义满足对所有 有 。
- 以挑战 作出响应,并初始化 。
- 从 开始到 , 设 。
- 最后设 。
- 初始化 。
- 从 开始到 , 设 。
- 最后设 。
- 和 初始化 。
- 从 开始到 , 和 设 。
- 最后 和 设 ,其中 由 使用 提供的值 计算为 。
- 发送 ,其中 定义了多项式 的系数。
- 以挑战 作出响应。
- 发送 使得对所有 有 。
- 以挑战 作出响应。
- 设 以及
- 设 。
- 采样一个度数为 且在 处有根的随机多项式 ,并发送承诺 ,其中 定义了 的系数。
- 以挑战 作出响应。
- 设 。
- 设 (其中 应与验证者计算出的值 相对应)。
- 将 初始化为 的系数,并设 以及 。 和 将进行以下 轮交互,在第 轮(从第 轮开始到第 轮结束)中:
- 发送 和 。
- 以挑战 作出响应,该挑战的选取使得 非零。
- 和 设 以及 。
- 设 。
- 发送 以及由被省略的盲化因子计算出的合成盲化因子(synthetic blinding factor)。
- 仅当 时接受。
零知识与完备性
我们声称该协议是 完美完备的(perfectly complete)。这可以通过对协议的检视来验证;给定一个有效的证据 ,证明者以概率 成功说服验证者。
我们声称该协议是 完美特殊诚实验证者零知识(perfect special honest-verifier zero knowledge) 的。我们通过证明存在一个模拟器 来做到这一点,该模拟器能够产生一个被接受的副本,其分布与一个有效证明者在相同公开掷币下与验证者交互的分布相同。该模拟器将如同一个诚实的证明者那样行动,但有以下例外:
- 在协议的第 步中, 选择随机的度数为 的多项式(关于 )。
- 在协议的第 步中, 选择随机的 度多项式 。
- 在协议的第 步中, 选择一个随机的 度多项式 。
- 在协议的第 步中, 利用其对验证者所选 的预知,生成一个度数为 的多项式 ,其唯一约束条件是 在 处有根。
首先,让我们考虑为什么这个模拟器总能成功产生一个 被接受的 副本。 缺乏一个有效的证据,并且每当诚实证明者需要有效证据的知识时,它都只是简单地对随机多项式做承诺。验证者对副本中的标量值不设任何条件。 只须保证协议第 步中的检查成功。它通过利用其对挑战 的知识,生成一个与 相互作用的多项式,以确保后者在 处有根来做到这一点。因此,由于完美完备性,该副本将总是被接受。
为了理解为什么 产生的副本与诚实证明者的副本分布完全相同,我们将逐一考察副本的每个部分并比较其分布。首先,注意 (正如诚实证明者那样)对副本中的每个群元素都使用一个新鲜随机的盲化因子,因此我们只需考虑副本中的 标量(scalars)。 的行为与证明者完全相同,除了上述提到的几种情况,因此我们将逐一分析每种情况:
- 与诚实证明者都揭示每个多项式 的 个打开值,并在第 步中至多揭示每个 的一个额外打开值。然而,诚实证明者用 个在域 上的随机求值来盲化他们的多项式 (关于 )。因此, 在挑战 (协议禁止其为 或位于域 中)处的打开值,在 与诚实证明者之间的分布完全相同。
- 和诚实证明者都不揭示 ,因为它由验证者计算。然而,诚实证明者可能会揭示 ——它与 有一种非平凡的关系——若不是因为诚实证明者还在第 步中对一个随机的度数为 的多项式 做了承诺,产生一个承诺 ,从而确保在第 步当证明者设 时 的分布是均匀随机的。因此, 永远不会被诚实证明者也不会被 揭示。
- 的期望值由验证者计算(在第 步中),因此模拟器对 的实际选择是无关紧要的。
- 被约束为在 处有根,但除此之外对 不设其他条件,因此无论 是否在 处有根,度数为 的多项式 的分布都是均匀随机的。因此,第 步中产生的 的分布在 与诚实证明者之间完全相同。第 步中也揭示的合成盲化因子 是证明者其他盲化因子的一个平凡函数,因此在 与诚实证明者之间分布完全相同。
注:
- 在我们协议的较早版本中,作为多点打开论证(multipoint opening argument)的一部分,证明者会在 处打开每个单独的承诺 ,而验证者会确认这些打开值的一个线性组合(以 的幂为系数)与 的期望值相符。这样做是因为它在递归证明中更高效。然而,我们当时不清楚这些承诺 的打开值的期望分布是什么,因此证明该论证是零知识的很困难。于是我们改变了论证,使得 验证者 计算这些承诺的一个线性组合,而这个线性组合在 处被打开。这避免了泄露 。
- 如前所述,在第 步中证明者对一个随机多项式做承诺,作为一种确保 不会在多重打开(multiopen)论证中被揭示的方法。这样做是因为不清楚 的分布会是什么。
- 从技术上讲,我们也可以用一个模拟器来证明零知识,该模拟器利用其对挑战 的预知来承诺一个 ,使其在 处与它将被期望的值相符。这将省去协议中对随机多项式 的需求。不过这可能会使协议其余部分的零知识分析变得有些棘手,所以我们没有走这条路。
- 群元素盲化因子在第 步(此处多项式被完全随机化)之后 在技术上 不再必要。然而,在实践中,确保协议中的每个群元素都被随机盲化对我们来说更简单,这使得涉及无穷远点(point at infinity)的边界情况更难出现。
- 至关重要的是,验证者不能挑战证明者在 中的点处打开多项式,否则诚实证明者的副本将被迫包含可能是证明者证据一部分的内容。因此我们将挑战空间限制为包含域中除 之外的所有元素,并且为简单起见,我们还禁止挑战为 。
证据扩展模拟
设 为上述针对关系 、群 (其标量域为 )的交互式论证。我们总能构造一个提取器 ,使得对于任何对其预言机做至多 次查询的非一致代数证明者 ,都存在一个非一致敌手 ,具有这样的性质:对于任何计算上无界的区分器
其中 。
证明。 我们将通过援引 [GT20] 的定理 1 来证明这一点。首先,我们注意到所有轮次的挑战空间是相同的,即 。定理 1 要求我们定义:
- 对所有部分副本 定义 使得 。
- 一个提取器函数 ,它以一个被接受的扩展副本 作为输入,并返回一个有效证据或失败。
- 一个返回概率的函数 。
我们说一个被接受的扩展副本 包含"坏挑战(bad challenges)",当且仅当存在一个部分扩展副本 、一个挑战 ,以及某个证明者消息和挑战序列 使得 。
定理 1 要求:当给定一个不包含"坏挑战"的被接受扩展副本 时, 返回该副本的一个有效证据,除非概率上界为 的情形发生。
我们的策略如下:我们将定义 ,相对于一个参与 博弈的敌手 建立 的一个上界,将这些代入定理 1,然后逐步走过协议以确定 大小的上界。敌手 按如下方式参与 博弈:给定输入 ,敌手 向 模拟博弈 ,使用来自 博弈的输入作为公共参数。如果 设法产生一个被接受的扩展副本 , 在 上调用一个函数 并返回其输出。我们将以这样的方式定义 :对于一个不包含"坏挑战"的被接受扩展副本 ,只要 不 返回一个非平凡的离散对数关系, 就 总是 返回一个有效证据。这意味着概率 不大于 ,从而确立了我们的声称。
有用的替换
我们将执行一些替换以辅助叙述。首先,让我们定义多项式
这样我们可以写 。 的系数向量 定义为
其中 当 的第 个比特被置位时返回 ,否则返回 。我们也可以写 。
函数 的描述
回忆一个被接受的副本 满足
通过检视群元素关于 的表示(回忆 是代数的,因此 拥有它们),我们得到 个等式
以及这些等式
我们定义线性时间函数 ,它返回如下表达式的表示
它总是一个离散对数关系。如果上述任何等式不被满足,那么这个离散对数关系就是非平凡的。这就是 所调用的函数。
提取器函数
提取器函数 简单地从表示 中返回 ,。由于我们将对每一轮中坏挑战空间施加限制,只要敌手的函数 返回的离散对数关系是平凡的,我们就能保证得到这样的多项式: 在 上消失。这平凡地给出:提取器函数 成功的概率上界为所要求的 。
定义
回忆前面所述,以下 个等式成立:
以及等式
为方便起见,让我们引入以下记号
这样我们可以把上面的式子(在对 展开后)重写为
我们可以通过将第一个等式的每个实例的两边都乘以 (因为 永不为零)并代入第二个等式中的 ,来合并这些方程,得到以下 个等式:
引理 1。 如果 ,那么对于所有不包含坏挑战的副本,可推出 。
证明。 引入又一个抽象会很有用,它首先定义为 然后对所有满足 的整数 递归定义 这允许我们把上面的等式重写为
现在我们将证明:对于所有满足 的整数 ,每当以下式子对 成立时 同样的式子 也 对以下成立
对于所有满足 的整数 ,根据 的定义我们有 。由于 中没有任何值、也没有任何挑战 为零,这给我们 。我们可以用这一点把一半的等式与另一半关联起来,如下:
注意 可以对所有 重写为 。因此我们可以把上式重写为
现在让我们把这些等式中的 替换为形式不定元 来重写它们。
现在让我们把所有式子按 重新缩放以消除负指数。
这给了我们 个三元组,每组是关于 的最高度数为 的多项式,尽管它们的系数在 选定之前就已确定,但它们在 处取值相等。根据 Schwartz-Zippel 引理,这其中两个多项式会在 处取值相等却又互异的概率为 ,因此由联合界(union bound),这三个多项式取值相等却又其中任意一个与另一个不同的概率为 。再次由联合界, 个三元组中任意一个含有多个互异多项式的概率为 。通过相应地限制 的挑战空间,我们对整数 得到 ,从而 。
现在我们可以得出多项式相等的结论,从而得出系数相等。首先考虑常数项的系数,这给我们 个等式
中没有任何值为零, 永远不会被选为 ,且每个 的选取使得 非零,因此我们可以得出
对于这些等式中 项的系数,可以遵循一个相同的过程来确立 ,这取决于 非零(它总是非零)。把这些代入我们的等式得到更简单的式子
现在我们将考虑 中的系数,它们给出等式
由与之前类似的推理,它给出等式
最后我们将考虑 中的系数,它们给出等式
它通过代入给我们
注意到根据 的定义,我们可以把它重写为
这正是我们着手要证明的形式。
我们现在从已知成立的 情形出发通过归纳法进行,直到达到 ,这给我们
而因为 且 ,我们得到 ,这就完成了证明。
在确立了 之后,并鉴于 和 在 选定之前就已固定,我们有:至多存在一个 的值(非零)使得 却又 。通过相应地限制 ,我们得到 ,从而由 定义的多项式在 处有根。
根据构造 ,这给我们由 定义的多项式在点 处求值为 。我们有 在 选定之前就已固定,因此要么由 定义的多项式在 处有根(这蕴含由 定义的多项式在点 处求值为 ),要么 是 中使得 在点 处求值为 、而 本身却并非如此的唯一解。我们通过相应地限制 来避免后一种情况,从而可以得出由 定义的多项式在 处求值为 。
剩余的工作严格地处理证明者先前发送的群元素的表示及其与 的关系,以及协议每一轮中所选的挑战。我们首先通过用 表示由 定义的多项式来简化处理,因为这个 恰好对应于协议本身中同名的多项式。我们将对其他群元素(及其对应的多项式)做类似的替换以辅助叙述,因为这个证明的剩余部分主要是繁琐地应用 Schwartz-Zippel 引理来对协议中剩余每个挑战的坏挑战空间大小取上界。
回忆 ,因此通过代入我们有 。还回忆
我们已经确立了 。注意上述关于 和 的表达式中的系数在 选定之前就已固定。由 Schwartz-Zippel 引理我们有:至多存在 个可能的 选择,使得这些表达式被满足却又对某个 有 ,或
通过限制 ,我们可以得出上述所有不等式都不成立。现在我们可以对所有 用 替换 以得到
假设 (它是由 定义的多项式,度数至多为 )不 具有如下形式
然而正如我们上面所确立的, 在 处与此表达式取值相符。由 Schwartz-Zippel 引理,这至多只能对 个 的选择发生,因此通过限制 ,我们得到
接下来我们将通过再次相对于 应用 Schwartz-Zippel 引理,来提取这个关于 的多项式的系数(它们本身是关于形式不定元 的多项式);同样,这导致限制 ,并且我们对所有 得到以下度数至多为 的多项式
在确立了这些各自是度数至多为 的非有理多项式之后,我们便可以说(由因式定理,factor theorem):对于每个 和 , 在 处有根。注意,我们可以把每个 解释为一个 二元 多项式在点 处的限制,该二元多项式关于 的度数至多为 ,其系数由各个多项式 (来自表示 )以及 (来自表示 )和 (来自表示 )构成。通过类似地应用 Schwartz-Zippel 引理并以 限制挑战空间,我们(由协议第 12、13 步中每个 和 的构造)得到:证明者在第 9 步声称的 值等于 ;验证者在第 13 步计算的值 等于 ;并且对所有 ,证明者声称的值 对所有 成立。
由第 7 步中 (来自表示 )的构造,我们知道 ,其中我们用 指代度数至多为 的多项式,其系数对应于每个 拼接后的表示。如前所述,假设 不 具有形式 。那么因为 在 选定之前就已确定,由 Schwartz-Zippel 引理我们知道:如果这两个多项式不相等,它将至多在 个点处与 相符。通过再次限制 ,我们得到 ,并且因为 是一个非有理多项式,由因式定理我们得到 在域 上消失。
我们现在有 在 上消失,但希望证明 在 上的所有点处都消失,以完成证明。这只涉及对每个挑战重复应用同一技术;由于多项式 按定义关于任意不定元的度数至多为 ,并且因为每个多项式 在具体挑战 选定之前就已确定,通过类似地限制 ,我们确保 在 上消失,从而完成证明。