Threshold Signature in Multiverse(MTS)论文阅读(持续更新中)
(在文章中,作者使用了universe和Multiverse的概念,基于我的理解,这里把其翻译成“域”和“多域”,若有更好的表达,欢迎交流)
前置知识
这是一篇关于应用于区块链的门限签名方案,故开始之前有一些基础知识需要准备
MTS是基于BLS门限签名方案构建的在区块链上的轻量化门限签名方案,在Multiverse的初始化阶段过程中,用到了以下的几方面理论知识:
1、门限签名
2、BLS门限签名
3、双线性映射的性质
4、基于离散对数的非交互性零知识证明(NIZKPoK)
……
可以先检索相关知识内容,对以上定义有一定的了解
多域模型的构想
基于现阶段在区块链上进行门限签名的需求,提出了Multiverse的模型。
具体来说:
1、一个节点可能同时在不同的域中;
2、同一个域可能进行T不同的门限签名;
3、某一次门限签名中的签名方不一定在一个域中,并且每个节点总是想设置自己的threshold(因为并不相信其他域中的签名方),但为每一个来自不同universe中的节点或群体设置一个threshold太过于繁琐
……
希望达成的目标(需求)
随时定义一个新的域(universe),聚合器节点可以根据一个threshold聚合生成部分签名
包括(优点):
1、非交互性设置
2、紧凑秘钥
3、快速聚合和验证
多域模型的搭建
BLS门限签名(略)
把BLS门限签名拓展到MTS上
具体来说,改变域初始化阶段的方式,不再用已有的“一刀切”的方案,避免了随着节点数和签名数的增加而导致吞吐量的快速增加,使签名过程变慢。
所做的工作
解决1:
若了解BLS签名,应该知道N-1次多项式f的作用。
在MTS中,N个参与方(P1,P2,…,Pn),可以根据自己的私钥构建出N-1阶的多项式。若把多项式上(-(N-T),…,-1)共N-T个额外的点公布,就可以将f的次数从N-1次降低到T-1次。
问题1:
这样做会有风险。
有恶意节点时,通过初始化不用的域,可以揭示真诚节点密钥的线性关系,有可能解出诚实方节点的密钥。
举例:
(P1,P2,P3,P4)四个节点的域,其中P1,P2是诚实节点,P3,P4是恶意节点,在这个域上做2-of-3的门限签名。
第一次选择(1、2、3)三个节点,构建一个二次多项式;第二次选择(1,2,4)三个节点,也构造一个二次多项式。因为P3,P4是恶意的,故把3,4两个节点带入两个方程,两个未知数两个方程,是可以解出P1,P2的私钥信息的。
解决2:
不再公布(i,f(i)),而是公布(i,gf(i)),并改变验证方式:
其中
问题2:
计算σpub的开销较大,节点的计算和存储应该是轻量化的,不应该承担太大的计算量
解决3:
让聚合器计算σpub,这样验证者可以直接获取到(σpub ,σpar),并进行验证。
问题3:
在文章的安全性假设中,集合器并不是可信的第三方,可以进行伪造。
若聚合器构造这样的(σpub ,σpar),则该式子也可以通过上面提到的验证方法
解决4:
域的初始化过程中,各参与方进行了一个单轮的协议:
每个Pi选择一个ki,并公布
整个域初始化的时候,所生成的公共参数(pp)为
k=∑ki
聚合器验证
基于指数知识假设(KEA),可以保证签名的不可为造性。
文章还提到了加权的问题,不再展开细说。
MTS的形式化定义
主要是定义了几个参数和函数:
U: 域
Λ: 加权门限访问结构
KGen: 输入安全参数κ,输出(pk,sk)
UGenon: 输入(U,Λ)和私钥sk,输出消息的采样ρ
UGenoff: 输入(U,Λ)和所有参与方的ρ,输出验证密钥VK和公共参数pp
Sign: 输入sk,m,输出部分签名σ
Aggregate: 输入(U,Λ),pp,所有参与方的σ’,输出聚合签名σ
Verify: 输入VK,消息m和聚合签名σ,输出1/0
其他的为公式化定义和正确性证明、安全性证明等内容,不再赘述。