美文网首页
Plonkup中Hash函数设计

Plonkup中Hash函数设计

作者: 雪落无留痕 | 来源:发表于2022-04-06 15:52 被阅读0次

本文主要介绍如何结合Plonk的数值电路和 looup 门电路 以最小的约束条件实现Hash函数。

电路示例

通过Blake2 hash中32位word 异或XOR 操作,来展示如何使用 Plonkup 设计电路。

查找表

对于XOR查找表,表中的每一行为: (a, b, a \oplus b ) 。 对于32位,查找表需要穷举 ab 所有可能的值,查找表需要 2^{32} \times 2^{32} 行.

为了减少行数,可以将 ab 拆成分别拆成四个8位的,则查找表变成 2^{16} 行。

电路

对于32位的XOR操作,需要将32位拆成4个8位的数,即:
x = x_3 | x_2 | x_1 | x_0 \\ y = y_3 | y_2 | y_1 | y_0
计算四个8位的XOR操作,即: z_3 = x_3 \oplus y_3, z_2 = x_2 \oplus y_2, z_1 = x_1 \oplus y_1, z_0 = x_0 \oplus y_0,这四个XOR 门电路为:
lookup(x_3, y_3, z_3) \\ lookup(x_2, y_2, z_2) \\ lookup(x_1, y_1, z_1) \\ lookup(x_0, y_0, z_0)
然后将结果组合起来,得到最终32拉的结果。先定义一个加法门电路:

add((l,x), (r,y), (o,z)) 用以约束: lx +ry + oz = 0

然后对位组合的加法门电路即为:
add((2^8, z_3), (1,z_2), (-1, z_{hi})) \\ add((2^8, z_1), (1,z_0), (-1, z_{low})) \\ add((2^16, z_{hi}), (1,z_{lo}), (-1, z)) \\

位旋转

对于 z = z_{up} | z_{down}, 其中z_{up}z_{down} 分别为 kn-k 位,

向左旋转 k 位,可以得到 z = z_{down} | z_{up}, 可以将 z_{down}z_{up} 分别表示为域中元素,则得到:

z = 2^{n-k} z_{up} + z_{down}w= 2^k z_{down} + z_{up}

对于7位的旋转,证明者需要计算:
add((2^{25}, z_{up}), (1, z_{down}), (-1, z)) \\ add((2^7, z_{down}), (1,z_{up}), (-1, w))
为了保证w 的长度为32位,证明者需要拆分w 为8位的块: w_3, \cdots, w_0w = w_3 || w_2 || w_1 || w_0 , 通过查找表验证其位长度小于8位,即:
lookup(w_3, w_2, w_3\oplus w_2) \\ lookup(w_1, w_0, w_1\oplus w_0)
通过以下3个加法门验证8位块计算的准确性:
add((2^8, w_3), (1, w_2), (-1, w_{hi})) \\ add((2^8, w_1), (1, w_0), (-1, w_{lo})) \\ add((2^{16}, w_{hi}), (1, w_{lo}), (-1, w))

整合所有约束

采用 8位XOR查找表,对于表达式 w = rot_7(x\oplus y), 其中x,y, w 分别为32位,可以通过14个约束条件表示:
\begin{aligned} & lookup(x_3, y_3, z_3) \\ & lookup(x_2, y_2, z_2) \\ & lookup(x_1, y_1, z_1) \\ & lookup(x_0, y_0, z_0) \\ & add((2^8, z_3), (1, z_2), (-1, z_{hi})) \\ & add((2^8, z_1), (1, z_0), (-1, z_{lo})) \\ & add((2^{25}, z_{up}), (1, z_{down}), (-1, z)) \\ & add((2^7,z_{down}),(1, z_{up}), (-1, w)) \\ & lookup(w_3,w_2, w_3\oplus w_2) \\ & lookup(w_1,w_0, w_1\oplus w_0) \\ & add((2^8, w_3), (1, w_2), (-1, w_{hi})) \\ & add((2^8, w_1), (1, w_0), (-1, w_{lo})) \\ & add((2^{16}, w_{hi}), (1, w_{lo}), (-1, w)) \end{aligned}

R1CS 比较

R1CS 优势在于可以在一个约束中,允许无限多的加法操作,缺点在于不支持查找表。对于上面的示例,R1CS 约束需要97个约束条件,Plonkup只有其1/7的门电路。

缺点

查找表会增加证明的计算负担和证明尺寸,对于8位XOR查找表,2^{16} 已经相当大,若改为4位查找表,则会增加约束条件到26个。

参考

https://anoma.network/blog/hash-functions-in-plonkup/

相关文章

  • Plonkup中Hash函数设计

    本文主要介绍如何结合Plonk的数值电路和 looup 门电路 以最小的约束条件实现Hash函数。 电路示例 通过...

  • 现代密码学:Hash函数Keccak

    Hash函数的核心在于设计压缩函数。可以证明,如果压缩函数具有抗碰撞能力,那么迭代Hash函数也具有抗碰撞能力。2...

  • OC 中NSString的hash方法

    对象的hash oc对象的hash,就是对象地址本身 NSString中的hash函数 NSString 中has...

  • NSDictionary实现原理

    NSDictionary(字典)是使用 hash表来实现key和value之间的映射和存储的, hash函数设计的...

  • NSDictionary的实现原理

    一、NSDictionary使用原理 hash表来实现key和value之间的映射和存储的,hash函数设计的好坏...

  • iOS NSDictionary内部实现

    NSDictionary(字典)是使用 hash表来实现key和value之间的映射和存储的。hash函数设计的好...

  • Golang标准库——hash

    hash hash包提供hash函数的接口。 type Hash Hash是一个被所有hash函数实现的公共接口。...

  • NSDictionary介绍

    NSDictionary是使用hash表来实现key和value之间的映射和存储的,hash函数设计的好坏影响着数...

  • 哈希算法

    哈希算法 什么是hash函数?常见的hash算法hashlib的用法hash算法的用途 什么是hash函数? 哈希...

  • 散列表(Hash Table)

    散列表其实就是数组+hash函数构成。所以它就具有了数组和hash函数的所有优点。数组,支持按索引随机访问数组中的...

网友评论

      本文标题:Plonkup中Hash函数设计

      本文链接:https://www.haomeiwen.com/subject/nsnrsrtx.html