门限签名和隐藏地址方案讨论

2019年4月12日,第十三期北大软微-八分量协同实验室学术沙龙活动如期展开。本次技术沙龙讨论的主题是Two-Party ECDSA 签名和隐藏地址方案讨论。北京大学的沈晴霓教授、方跃坚副教授、Trias胡志琳以及软微学院众位博士生、硕士生参与了此次沙龙,并由博士生张晓磊,王与琛,Trias胡志琳做出分享。

门限签名和隐藏地址方案讨论

此前的学术沙龙已经就椭圆曲线加密算法基础做出了解读,本次以Bar-Ilan University, Israel(以色列巴伊兰大学)Yehuda Lindell的论文作为基础,两位博士生张晓磊,王与琛围绕其部分内容做出了介绍和分析。
论文指出,作为一种广泛应用于比特币等区块链项目的加密算法,安全分布式ECDSA协议需要运行大量的零知识证明知识。
在20世纪80年代末和90年代,就已经出现了围绕门限密码学问题的研究。现在,由于比特币使用了ECDSA签名,私钥一旦遗失大概率会造成金融损失。在比特币中有一个内置的多方签名解决方案,它基于使用多个不同的签名密钥,而不是门限签名方案。然而,可以通过门限加密获得更通用的解决方案。

尽管取得了很多成功,但是DSA/ECDSA一直拒绝构建用于门限签名的专用协议。这似乎是由于需要不知道k而计算k和k-1。我们通过比较ECDSA签名和EC-Schnorr签名来解释这一点。两种情况下,公钥为椭圆曲线点Q,私钥为x,令Q = x·G,其中G为EC群的q阶。

门限签名和隐藏地址方案讨论

注意,Schnorr签名可以很容易地分布,因为私钥x和值k都在线性方程中使用。因此,双方共享x1、x2,使得Q = (x1 + x2)·G每个局部都可以选择k1、k2,令R = k1·G+k2·G = (k1 + k2)·G。然后,每个都可以局部计算e和si=ki-xi·e mod q并互相发送,并且每一方可以对s = s1 + s2 mod q求和,输出一个有效的签名(s,e)。
在恶意对手情况下,为了保证R是均匀分布的,需要一些零知识证明,但这些都是离散对数知识的高度特殊证明。相比之下,在ECDSA签名中,计算s的方程包括k-1。现在,给定k1,k2,使得k1 + k2 = k mod q非常难以计算k’1 ,k’2, 使得k’1+k’2=k-1 mod q。
值得一提的是,大家谈到,密码学的选取并不仅仅是先进就可以,还需要相关机构的安全性证明以及公众的认可。而在很多专业人士眼中,这似乎不是非常必要的,但现实确是不可缺少,因为没有专业的机构和标准进行安全背书,告诉大家如何避坑,这个技术就难以得到大众认可。
关于论文的解读还有很多内容,我们就不一一详述了。在此之后,胡志琳分享了一个隐藏地址的方案。在这个方案中,Bob分别创建了两个私钥-公钥对,分别标记为(a,A)和(b,B),根据定义有A=aG和B=bG。Bob将A,B告诉别人,这就是其隐身地址。
Alice发送一个币给Bob,即将该币赋给地址P,其中P=H(rA)G+B。该交易与R=rG一道被广播到区块链网络。那么,现在Bob怎么拿到这些钱呢?
当他看到Alice的交易,他就执行x=H(aR)+b,并发现: xG = (H(aR)+b)G = H(aR)G+bG = H(arG)G+B = H(raG)G+B = H(rA)G+B = P, 即Bob可以重建符合P=xG的x,因此成为该币的拥有者。
但这种方法存在着瓶颈,那就是接收方需要遍历链上每一笔交易,才能找到属于自己的隐身地址。首次启动时必须扫描所有区块——每个节点需要遍历所有历史交易。经测试速度,当前验证单笔交易0.1 ms级别。也就是说,TPS低时没有压力,而当链的TPS将来变得很高时,影响节点处理能力。
最后,大家对这个方案的优化方式进行了饶有趣味并且非常热烈的讨论,重点讨论了通过链下渠道将R直接交给Bob来提升速率,或者通过一个类中心化的方案来把所有的交易进行分区处理。但这两种方案都存在明显的缺陷,第一种方法可能会泄露交易方的身份,而第二种方案又有违去中心化的原则。至于更好的办法,依旧在研讨中。
下一期沙龙将会对椭圆曲线加密算法的速率优化和并行性作出讨论。Trias每周都会和北大举办沙龙活动,对区块链技术以及Trias项目有疑问的小伙伴可以随时将问题抛在技术交流群里,我们会及时作出回应噢。
整理 | 郑辰
出品 | Trias团队