Multi-scalar multiplication: state of the art & new ideas

Posted mutourend

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Multi-scalar multiplication: state of the art & new ideas相关的知识,希望对你有一定的参考价值。

1. 引言

Consensys团队 Gus Gutoski 2020年在zkStudyClub上分享:Multi-scalar multiplication: state of the art & new ideas

Multi-scalar multiplication(MSM)又名Multi-exponentiation或multi-exp。
针对的场景为:

  • 参数:某cyclic group G \\mathbbG G,其order ∣ G ∣ |\\mathbbG| G的bit length为 b b b。(如BLS或BN椭圆曲线,有 ∣ G ∣ ≈ 2 256 |\\mathbbG|\\approx 2^256 G2256,即 b = 256 b=256 b=256
  • 输入:
    • G \\mathbbG G内的群元素 G 1 , ⋯   , G n G_1,\\cdots,G_n G1,,Gn,称为inputs。
    • 整数 a 1 , ⋯   , a n a_1,\\cdots,a_n a1,,an的取值范围为 0 0 0 ∣ G ∣ |\\mathbbG| G,称为scalars。
  • 输出:群元素 a 1 G 1 + ⋯ + a n G n a_1G_1+\\cdots+a_nG_n a1G1++anGn称为output。

目标是:

  • 减少所需的群运算(+)的次数——为关于 n n n的函数。

直接的解决方案为:

  • 使用double-and-add来计算每个 a i G i a_iG_i aiGi,然后将它们相加求和,所需group ops期望值为: 1.5 b n ≈ 1.5 ∗ 256 n ≈ 384 n 1.5bn\\approx1.5*256n\\approx 384n 1.5bn1.5256n384n

有更优的解决方案么?

1.1 MSM的背景需求

零知识证明ZKP中,Prover向Verifier证明其知道某些 x ⃗ = a 1 , ⋯   , a n \\vecx=\\a_1,\\cdots,a_n\\ x =a1,,an secret inputs,使得 P ( x ⃗ ) = y P(\\vecx)=y P(x )=y成立。

在证明过程中,Prover需要使用proving key G 1 , ⋯   , G n G_1,\\cdots,G_n G1,,Gn 计算:
G = a 1 G 1 + ⋯ + a n G n G=a_1G_1+\\cdots +a_nG_n G=a1G1++anGn

即Prover需要做MSM运算。

  • 对于ZCash的NU5升级之前的spend program: n ≈ 4 × 1 0 4 n\\approx 4\\times 10^4 n4×104
  • 对于Rollup扩容方案: n n n越大越好

目标是:

  • 针对 n = 1 0 7 , 1 0 8 n=10^7,10^8 n=107,108甚至更大的 n n n值。

MSM占据了约 80 % 80\\% 80%的Prover工作量。
Justin Drake在2020的Zero-Knowledge podcast Episode 120: ZKPs in Ethereum with Vitalik Buterin & Justin Drake中指出:

  • Focus on multi-exponentiation, forget about FFTs(Remove the need for FFTs)
  • Sparseness
  • Recursion
  • Custom gates
  • Hardware

MSM占据了Prover的主要开销,Prover开销占据ZKP主要开销。改进MSM即意味着提升ZKP效率。

2. bucket method

由Consensys团队开发的:

中采用了bucket算法,针对BLS或BN曲线( b ≈ 256 b\\approx 256 b256),所需group ops运算次数为:
16 n + ( constant ) 16n+(\\textconstant) 16n+(constant)

相比于直接方案的 384 n 384n 384n,性能提升了 24 24 24倍+。

bucket算法详细见2012年论文《Faster batch forgery identification》第4章的“Overlap in the Pippenger approach”,核心策略会:

  • 1)将一个 b b b-bit MSM reduce为多个 c c c-bit MSM,其中 c ≤ b c\\leq b cb
  • 2)使用一些聪明的技巧来计算 c c c-bit MSM。(有趣的部分)
  • 3)将多个 c c c-bit MSM合并为最终的 b b b-bit MSM。

3.1 第一步:将一个 b b b-bit MSM reduce为多个 c c c-bit MSM

选择 c ≤ b c\\leq b cb,将每个scalar a 1 , ⋯   , a n a_1,\\cdots,a_n a1,,an以二进制表示,将二进制scalar切分为 c c c-bit parts。

如:给定 b = 12 , c = 3 b=12,c=3 b=12,c=3,将每个 12 12 12-bit scalar a a a切分为 3 3 3-bit parts。
若scalar a = 1368 a=1368 a=1368,则将 a a a表示为 a = ( 2 , 3 , 5 , 0 ) a=(2,3,5,0) a=(2,3,5,0)

从已切分的scalars推导出 b / c b/c b/c c c c-bit MSM instances。
( b , c , b / c ) = ( 12 , 3 , 4 ) (b,c,b/c)=(12,3,4) (b,c,b/c)=(12,3,4),将每个scalar切分表示为 a i = ( a i , 1 , a i , 2 , a i , 3 , a i , 4 ) a_i=(a_i,1, a_i,2, a_i,3,a_i,4) ai=(ai,1,ai,2,ai,3,ai,4),从而可获得4个 c c c-bit MSM instances T 1 , ⋯   , T 4 T_1,\\cdots,T_4 T1,,T4
T 1 = a 1 , 1 G 1 + ⋯ + a n , 1 G n T_1=a_1,1G_1+\\cdots +a_n,1G_n T1=a1,1G1++an,1Gn
⋮ \\vdots
T 4 = a 1 , 4 G 1 + ⋯ + a n , 4 G n T_4=a_1,4G_1+\\cdots +a_n,4G_n T4=<

以上是关于Multi-scalar multiplication: state of the art & new ideas的主要内容,如果未能解决你的问题,请参考以下文章

使用嵌套循环在控制台上输出九九乘法表