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 ∣G∣≈2256,即 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.5bn≈1.5∗256n≈384n
有更优的解决方案么?
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 n≈4×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
b≈256),所需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 c≤b。
- 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 c≤b,将每个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。 以上是关于Multi-scalar multiplication: state of the art & new ideas的主要内容,如果未能解决你的问题,请参考以下文章
若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=<