Merkle树实现环签名

该文章探讨了如何仅使用对称原语如哈希函数和分组密码实现抗量子的累加器,特别地,它提供了具有零知识成员证明和环签名的解决方案。通过非交互式零知识证明构造,实现了对数复杂度的环签名,解决了传统方案中签名大小随成员数量线性增长的问题。文中详细描述了累加器的构建过程,包括使用默克尔树作为基础的无碰撞性质,以及验证和证明的步骤。这种方法降低了环签名的大小,提高了效率。
摘要由CSDN通过智能技术生成

这个题目摘自2018年的论文Post-Quantum Zero-Knowledge Proofs for Accumulators with Applicationsto Ring Signatures from Symmetric-Key Primitives,写了一点理解罢了,看个热闹。

这篇文章考虑只使用对称原语哈希函数和分组密码(也就是不需要格了,需要格的话貌似需要提供结构硬度?),实现具有零知识成员证明和环签名的累加器,同时,这个方案是抗量子的。为了实现证明系统的有效实例化,通过构造电路实现高效的非交互式零知识证明。在构建分组的基础上,展示了如何仅使用对称原语构建对数复杂度的环签名。(使用具有零知识成员证明和环签名的累加器)

环签名:环中的成员使用公钥代表环生成了签名,但是不知道具体是哪个成员签的名。

一般来说,与编码和多元密码学相关的后量子环签名方案,随着成员个数的增加,签名大小是线性的,这篇文章提出的累加器能构造亚线性大小的环签名

PQ累加器和零知识成员证明:完全依赖于非结构化的假设,使用默克尔树作为累加器。

        累加器是一个元组,也就是一整套操作(Gen,Eval,WitCreate,Verify),其中,Gen(1^k,t)输入一个安全参数k和一个参数t,这个t其实就是累加元素的上界,返回的元素是sk和pk,认为pk定义了累加域D。Eval((sk, pk), X)输入一个公私钥对和一个集合X进行累积,并返回一个累加器X以及一些辅助信息aux。WitCreate((sk, pk), X, aux, xi)以一个密钥对sk和pk,一个累加器X和辅助信息aux和一个值xi作为输入,如果xi不属于X,那么就返回false,否则返回一个证明witx。Verify(pk, X, witx, xi)输入pk,累加器X,证明witx和xi,如果witx是X中xi的证明,返回true,否则返回false。

(Collision Freeness):意思是无碰撞的,sk和pk确实是由Gen生成的,中间值也确实是正确的,但是xi不在累加器X中,结果输出了1,这个概率可以忽略不计。

 具体的实现?第一步其实就是定义哈希函数,这里的哈希函数可以是SHA也可以是SM3,就是生成密钥对。第二步就是先解析,如果n不是2的幂次就返回false(这个n是叶子节点数,必须要是完美的二叉树),如果有,就能继续做,就从第0层开始DFS,到底就返回哈希,这样的话,相比服务器只给一些中间节点会慢,但是服务器并不能知道是谁投了票。这个累加器值就是根节点存的哈希值,aux作为辅助信息,存的是每一行的节点的哈希值。第三步首先解析aux,变成每一行的节点,然后从下往上重构Merkle树,wit的那个函数其实就是给中间节点凑根节点哈希值的过程,虽然证明懒了,但是选择一共八个叶子节点,i=3(xi为第四个叶子节点),v=0时,wit的结果是第三个,v=1时,是倒数第二层第0个,也是刚才选择的两个叶子节点的父节点的兄弟节点,又可以向上构造,可以一直构造到根节点。第四步进行验证,首先把叶子设置成每一方的哈希值,然后从上往下DFS,看存不存在和根节点相等的情况,找到的话就是环中的成员。(这个和根节点比较要防止碰撞,用哈希函数即可)。

这里假设有n个叶子,那么服务器发给用户一个程序,程序里有从每个叶子节点算到根节点所需要的路径,用户算完n个根节点以后,如果有一个值和服务器根节点存储的相等,就认为用户在这个环中。

单向域累加器:几个性质:

Efficient verifification:有高效的算法D,满足D(x,z)=1,当且仅当f(z)=x.
Efficient sampling:输入一个安全参数1^k,W(1^k)函数能随机返回公私钥对(x,z),D(x,z)=1
One-wayness:他的意思是(x,z)确实是用W生成的,敌手A生成了一个z*,D(x,z*)=1的概率是很小的。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值