Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

译自 halo2 book:https://zcash.github.io/halo2/design/implementation/fields.html

域(Fields)

我们在 halo2 中使用的 Pasta 曲线被设计为高度 2-adic 的,这意味着每个域(field)中都存在一个较大的 乘法子群(multiplicative subgroup)。也就是说,我们可以写成 ,其中 为奇数。对于 Pallas 和 Vesta,;这有助于简化域的实现。

Sarkar 平方根算法(基于表的变体)

我们使用来自 Sarkar2020 的一种技术来在 halo2 中计算平方根(square roots)。该算法背后的直觉是:我们可以把任务拆分为在每个乘法子群中分别计算平方根。

假设我们想求 模某个 Pasta 素数 的平方根,其中 中的一个非零平方数(square)。我们定义一个 单位根(root of unity) ,其中 中的一个非平方数(non-square),并预计算以下各表:

。我们便可定义 ,它是 乘法子群中的一个元素。

i = 0, 1

使用 ,我们查找 使得

定义

i = 2

查找 使得

定义

i = 3

查找 使得

定义

最终结果

查找 使得

现在我们可以写出

对右端(RHS)取平方,我们观察到 因此, 的平方根就是 ;其中第一部分我们在前面已经计算过,第二部分可以利用 中的查找,通过三次乘法计算得到。