Halo2 协议
预备工作
我们定义 作为一个安全参数,且除明确标注外,文档中所有的算法和敌手(adversaries)都是在该安全参数下运行时间为多项式的概率型图灵机。我们使用 表示一个在 下可忽略的函数。
密码学群
我们令 表示一个阶为素数 的循环群,群的单位元记作 。将 中元素的标量表示为阶为 的标量域 中的元素。群元素用大写字母表示,标量则用小写字母或希腊字母表示。群元素或标量所组成的向量用粗体字表示,例如 以及 。群上的运算记作加法,群元素 和标量 的乘法记作 。
我们会经常使用 表示长度相等的, 上 两个向量的内积。同样地也用这种表示法描述群元素的一个线性组合 ,其中 ,该内积的计算是通过群中的标量乘法和加法实现的。
我们使用 描述域 中长度为 的,只包含零元的向量。
离散对数关系问题 攻击者优势(advantage)的度量(metric)为: 其定义为赢得以下游戏的概率。 即:如果攻击者能够给出一个 使得 ,则它赢得这次游戏
给定一个长度为 的向量 , 离散对数关系问题 指寻找一个 使得 且 (我们称为 非平凡 离散对数关系)。该问题的难度和群中的离散对数问题紧密相连([JT20] 引理3)。我们使用上面定义的游戏 描述该问题。
交互式证明
交互式证明是一个算法三元组 。 算法用于生成某些被 引用的 公开参数 。证明者 和验证者 是能够访问 的交互式机器,我们用 表示在 和 之间执行的两方协议,其输入为 和 。协议的输出是一个 transcript ,包含了所有 和 之间交互的消息。在协议的最后,验证者输出一个决策位,表示它是否接受证明者的证明。
关于知识的零知识证明
知识证明是一种交互式证明,指证明者试图向验证者证明它知道一个 witness 使得 ,其中 为一个 statement , 为多项式时间内可决定的 relation。我们假设证明者的计算能力是有限的,在这个假设下研究知识证明。
我们将从四个角度分析知识证明的安全程度:
- 完备性: 如果证明者有一个有效的 witness ,它是否 总是 能够向验证者证明这一点?完备性做出了一些假设,理解完备性将有助于理解其他的安全性
- 可靠性: 一个试图作弊的证明者能否向验证者成功证明一个错误的 statement ? 我们将发生这种情况的可能性称为 可靠性错误 。
- 知识可靠性: 当验证者确信 statement 是正确的时候,证明者是否实际拥有(“知道”)一个有效的 witness ?我们将验证者确信,但证明者并不拥有有效 witness 的可能性称为 知识错误 。
- 零知识性: 除了 statement 的正确性和证明者实际拥有该有效 witness 之外,验证者是否还获得了额外的知识?
首先,我们考察完备性的一个简单定义:
完美完备性: 一个交互式证明 是 完美完备的 当对于所有的多项式时间内可决定的关系 和所有非均匀的多项式时间攻击者 都有
可靠性
我们分析过程的复杂性在于:我们的协议被描述为交互式证明,但实际上通过 Fiat-Shamir 变换,它被实现为 非交互式 的。
Public coin: 我们将那种验证者发送的每个消息都来自新的随机性采样的交互式证明称为 public coin 式。
Fiat-Shamir 变换: 将验证者发送的消息替换为密码学上健壮的哈希函数以产生足够的随机性,即可将交互的 public coin 式证明在 随机预言机模型 中转换为 非交互式 的。
这种形式变换意味着在实际的协议中,一个试图作弊的证明者可以通过对 transcript 进行分叉,修改某个时刻自己应该发送给验证者的消息,从而轻易的达成状态“回卷”。因此,研究我们的协议在 Fiat-Shamir 变换之后的安全性是非常重要的。幸运的是我们可以依照 Ghoshal 和 Tessaro 提出的框架 ([GT20]) 来进行分析。
我们通过 状态恢复可靠性 的概念分析我们的协议。在该模型中,(作弊的)证明者可以“回卷”验证者至之前任意的状态。如果证明者能通过这种方式使验证者接受证明,则是对我们协议一次成功的攻击。
状态恢复可靠性: 令 是一个交互式的 argument ,包含有 个验证者挑战。令第 th 个挑战是从 中采样获得,则一个具备状态恢复能力的证明者 的优势度量(advantage metric)为 通过以下攻防游戏定义:
如 [GT20] (定理1)所示,状态恢复可靠性和 Fiat-Shamir 变换后的可靠性紧密相关。
知识可靠性
我们将会展示我们的协议满足一种强知识可靠性,即 witness extended emulation 。这意味着,对于任意成功证明的证明者算法,都存在一个高效的仿真器,通过状态“回卷”和提供新的随机数,仿真器可以从算法中提取出 witness 。
但我们必须调整一下我们对于 witness extended emulation 的定义,以描述一个事实,即我们协议中的证明者都是有状态恢复能力的证明者,能够“回卷”验证者。另外,为避免在提取 witness 时回卷证明者,我们在 代数群模型 中研究我们的协议。
代数群模型(Algebraic Group Model, AGM) 若攻击者 在每次输出群元素 的时候同时也输出 在 中的一个 表示 ,使得 , 是 到目前为止所知的群元素的向量,则我们说 是 代数的 。
我们用 描述一个以代数方法表示的群元素 ,定义 为 用 表示的系数,即
代数群模型允许我们对某些协议进行所谓的“在线”提取:提取者可以从某个被接受的 transcript 的表示方式中提取出 witness 。
状态恢复的 witness extended emulation 令 是一个关系 的交互式证明,包含 个挑战。我们对所有非均匀的代数证明者 ,提取者 ,以及拥有无限计算能力的辨别者 ,其优势度量 定义为赢得如下游戏的概率:
零知识性
若验证者在协议的交互中除了知道存在一个有效的 之外没有获得任何其他额外的知识,则我们说该关于知识的证明是 零知识性 的。
完美特殊诚实验证者零知识性 一个交互式的 public coin 证明 拥有 完美特殊诚实验证者零知识性 (PSHVZK) 仅当对于所有多项式时间可决定的关系 和所有 及所有非均匀多项式时间的攻击者 , ,存在一个概率性的多项式时间模拟器 ,使得 表示 verifier 内在的随机性。
在这个零知识性的定义下,验证者预期将会“诚实地”进行交互,并发送只与它的内在随机性相关的挑战。它们不能根据证明者发送的消息改变自己的挑战。我们使用该定义的一种增强形式,要求模拟器输出包含和验证者所发送的相同挑战的 transcript 。
协议
令 是 的单位根,组成一个 domain , 为该 domain 上的消退多项式。令 为正整数。对于关系
我们提出一种交互式证明 ,其中 是关于 的阶为 的(多变量)多项式, 是关于 的阶为 的多项式。
返回 .
对于所有的 :
- 令 为整数 (模 )的完备集,使得 为 中的成员。
- 令 为一组包含 的不相交的整数集合, .
- 令 ,若 .
令 表示集合 的大小,不失一般性地,令 表示每个 集合的大小。
在下述的协议中,我们默认每个 多项式为 个盲因子均为验证者新采样的,且以 domain 上各点值的形式表示。
- 和 进行 轮交互,在第 轮中(轮次从0开始)
- 设置
- 发送一个隐藏用的承诺 , 其中 为单变量多项式 的系数, 为某个随机且独立采样的盲因子。
- 回应 一个挑战 .
- 和 设置 .
- 发送一个承诺 ,其中 为随机采样的单变量多项式 的系数,其度数为 。
- 计算单变量多项式 ,其度数为 .
- 计算度数至多为 的多项式 ,使得 .
- 将所有的承诺 发送给 ,其中 为多项式系数组成的向量。
- 回应一个挑战 并计算 .
- 设置 .
- 发送 并且对所有的 ,发送 ,使得对所有的 ,都有 。
- 对所有的 , 和 设置 为度数最低的单变量多项式,使得对所有的 , 。
- 发送两个挑战 以回应,并初始化 .
- 从 到 , 设置 .
- 最后 设置 .
- 初始化 .
- 从 开始到 , 设置 .
- 最后 设置 .
- 和 初始化 .
- 从 开始到 , 和 设置 .
- 最后 和 设置 , 使用由 提供的 和 计算
- 发送 ,其中 为下列多项式的系数:
- 回以挑战 .
- 发送 使得 for all .
- 回以挑战 .
- 和 设置 ,
- 设置 .
- 采样一个随机的度数为 的多项式 (其中一个根为 ) ,并发送其承诺 , 为 多项式的系数。
- 回以挑战 .
- 和 设置 .
- 设置 .
- 初始化 作为多项式 的系数,令 , . 和 将以如下方式交互 轮, 的取值范围从 到 :
- 发送 and .
- 回以挑战 .
- 和 设置 且 .
- 设置 .
- 发送 以及盲因子 .
- 若 ,则 接受证明。