关于短群签名论文阅读

参考文献为2004年发表的Short Group Signatures

什么群签名?

        群签名大致就是由一组用户组成一个群,其中用户对某条消息的签名,改签名不会揭示是哪一个用户签署的,签名只能表明该消息确实是来自该群的签名。对于群还有一个群管理者,该管理者拥有系统私钥,就可以将用户的匿名性给取消即管理者可以知道该签名来自群中具体的那一个用户。在如今的现实生活中,群签名的应用场景还是很多的。例如,车联网。国产电车的崛起,许多电动车都有信号发射器,用来发送和接收信息。某一车辆,在驾驶时发现前方出现堵车需要减速慢行,车练就会发送该信息给附加车辆,避免造成事故发生。但这些信息可能包含车辆的位置和速度等个人信息,我们要避免在传递信息出现泄漏隐私的情况。此外,为了避免有些恶意车辆制造假消息,我们需要使用签名对该消息进行认证后才允许发送。这种情况,我们就可以使用群签名。

方案概括

        本方案的签名大小更小长度低于200字节,并且安全性和长度相等的RSA一样。方案的底层数学难题是SHD问题以及在双线性群中的线性假设问题。系统基于一个新的零知识证明知识,利用零知识证明来证明某人知道SDH问题的解。

预备知识

SDH问题

        我们说当我们给任何某人提供(g_1,g_2,g_2^{\gamma} ,... ,2^{\gamma^q}),这个人可以根据提供的信息求出(g_1^\frac{1}{\gamma +x},x)的概率是可忽略的。

决策线性问题

        简单的说当我们给任何某人提供(u^a,v^b,h^c),这个人可以根据提供的信息去判断h^c=u^av^b的概率是可忽略的。如果一个算法可以解决决策线性问题在群G_1中,那么就可以解决在该群中DDH问题。反之,则不成立。

        由决策线性问题我们可以构造一个线性加密方案,不同于ElGamal加密,该方案能够在DDH问题被攻破的情况下依旧是安全的。加密方案大致如下:

初始化:从G_1中随机选择三个生成元u,v,h作为用户公钥,用户选择私钥x,y满足u^x=v^y=h

加密:用户随机选择a,b并输出(u^a,v^b,h^{a+b}m)作为密文。

解密:将密文看成由(T_1,T_2,T_3)三部分构成,解密通过\frac{T_3}{T_1^xT_2^y}最终得到明文。

Fiat–Shamir启发式

Fiat-Shamir启发式是使用一个哈希函数将交互式的证明系统变成非交互式的证明系统。具体的如何转换的可以看看这一篇Fiat-Shamir启发式

SDH零知识证明

        在该系统中公共信息为g_1,u,v,h \in G_1 ,g_2,w=g_2^{\gamma } \in G_2,协议证明拥有(A,x),满足A^{x+\gamma }=g_1

Alice首先使用线性加密方案将A加密得到密文的三个部分,之后向验证者Bob证明自己拥有 (α,β,x,δ1​,δ2​)的知识。这五个值满足五个关系式,以至于Alice使用五个致盲因子去计算五个R之后,可以通过五个R和三个T以及两者交互的参数使以下(1),(2),(3),(4),(5)五个式子成立,因此证明Alice拥有五个值的知识从而揭示自己拥有(A,x)。例如式子(1),由于T_1是公开的,R_1是Alice传给Bob的,Bob计算左边的式子,发现如果要让等式成立,那么Alice需要知道\alpha,才能算出r_{\alpha }+c\alpha,这就证明了Alice拥有该知识,其余类似。

        可以从以下三点的出,该协议是决策线性假设下SDH对知识的诚实验证者零知识证明。

        首先,协议计算上是正确的。再者,协议是可模拟的(可模拟性保证了协议不会泄露有关秘密值)。最后,该协议存在一个知识提取器(说明证明者不会欺骗验证者,他确实存在这么一个知识)。

SDH知识签名

        通过 Fiat-Shamir 启发式从知识证明获得的签名通常称为知识签名。签名方案如下:

        公钥包含哈希函数H,群G_1G_2的生成元g_1,g_2,以及G_1中的随机生成元u,v,hw=g_2^{\gamma } \in G_2

        私钥就是SDH对(A,x)满足A^{\gamma +x}=g_1

        签名:首先根据SDH零知识证明即协议一计算出(T_1,T_2,T_3,R_1,R_2,R_3,R_4,R_5)然后计算哈希值c=(M,T_1,T_2,T_3,R_1,R_2,R_3,R_4,R_5)。之后使用c去执行协议中第三部分的计算获得s_\alpha ,s_\beta ,s_x,s_{\delta_1},s_{\delta_2}。构造签名为\sigma =(T_1,T_2,T_3,c,s_\alpha ,s_\beta ,s_x,s_{\delta_1},s_{\delta_2})

        验证:验证者使用方程(1-5)重新推导R1、R2、R3、R4和R5(由公钥以及签名中T_i

最后建议使用重新推到的算出的哈希值能否等于之前的c。

 理解来看因为\widetilde{R_i}的计算是满足(1-5)的公式,而R_i也是满足(1-5)的公式,因此两者具有相同的数学属性和关系,因此,输入相同值的哈希函数才会相同。

群签名方案

         主要的思路就是零知识证明。假设Alice就是签名者,然后发布了一个知识签名,利用了Fiat-Shamir启发式,将交互式变成了非交互式,这样签名过程完全是由签名者来操作的。验证者Bob收到签名后,可以通过签名中的内容验证验证Alice确实有相关知识,并且通过计算出的参数和原本签名中的一些参数以及公钥中的参数的一个哈希会得到相同的一个哈希,这是验证的一个思路。

安全性

        我们说如果有一个敌手能攻破我们的方案,那么我们就可以利用敌手去解决DL问题。

        给与模拟器线性加密公钥u,v,h,模拟器生成群签名密钥生成算法的公钥其余部分,然后,他向敌手提供公钥以及用户的私钥。模拟器拥有一个哈希表用来存储每次敌手询问的内容和对应的哈希值以便如果相同的询问,模拟器给敌手的回答是一致的。

        通过提供两个序列i_0,i_1和消息M,敌手来请求其完全匿名挑战。模拟器通过两个用户私钥A_{i_0},A_{i_1},来请求其不可区分挑战。(敌手如果能解决完全匿名那么我们就可以根据敌手的输出来区分私钥,其中私钥是被嵌入在线性密文中的是作为信息加密中的消息)模拟器根据挑战者选择的某一个序号的A_{i_i}生成(T_1,T_2,T_3,R_1,R_2,R_3,R_4,R_5,c,s_\alpha ,s_\beta ,s_x,s_{\delta_1},s_{\delta_2})的副本,并将c=(M,T_1,T_2,T_3,R_1,R_2,R_3,R_4,R_5)如果出现冲突的情况则终止,之后模拟器返回有有效签名给敌手。因为敌手可以攻破方案即他知道签名是哪个用户签的,那么模拟器就可以根据敌手的输出而输出来区分线性加密密文。对于SDH问题和匿名性的关系是,我们任意给一个x_i去计算g_1^{1/\gamma +x_i}是困难的,而后者就是用户密钥,我们说如果知道用户的密钥其实就知道了是哪一个用户。

撤销性

        对于撤销机制,我们需要一个撤销权威去发布一个撤销列表,列表中包含被撤销用户的类私钥信息(g_2^{1/\gamma +x_i},x_i),其中可以通过同构映射到G_1中就变成了该用户的私钥因此我这里说他是类私钥。撤销表会给所有的签名者和验证者,用于更新公钥信息以便以后去验证签名。我们让y=\prod _{i=1}^{\gamma }(\gamma +x_i)那么\bar{g_1}=g_1^{\frac{1}{y}},\bar{g_2}=g_2^{\frac{1}{y}},\bar{w}=(\bar{g_2})^{\gamma }。文中给出了撤销一个用户的例子如下图。

        对于未撤销的用户可以自身私钥和撤销列表信息更新私钥,而撤销用户计算不会信公钥对应的私钥,因此保证了撤销机制。如果撤销用户可以算出私钥那么就可以解决SDH问题,所以是不存在的。

排他性 

        群组中的任何成员,甚至群组管理员(被赋予追踪密钥的实体)也不能代表其他用户生成签名。因此,没有用户会因为他未曾生成的签名而被诬陷。排除性的一个更强的概念,在这个概念中,即使是发放用户密钥的实体也不能代表用户伪造签名。使用了一个协议(称为JOIN)来为新用户发放密钥。在协议结束时,密钥发放者并不知道赋予用户的完整私钥,因此无法伪造用户的签名。我们的群签名方案可以通过类似的机制扩展以提供强排除性。用户和密钥发放者参与一个JOIN协议,在协议结束时用户ii拥有一个三元组(A_i,x_i,y_i),使得A_i^{\gamma +x_i}h_1^{yi}=g_1​,这里h_1​是某个公共参数。y_1由用户选择,并对密钥发放者保密。

上一篇:[MAUI]模仿哔哩哔哩的一键三连


下一篇:redis事务详解