定义一个群G,G = {U1, U2,...,Ut}。其中群成员可以代表群进行签名。C 表示密钥生成中心KGC。
准备阶段
这个阶段,C会生成各个群成员的私钥和共同拥有的公钥。(缺少的一会在补充)
主要步骤如下:分为9步
1.选择两个大素数p和q。令p = u1rp1+1且q = u2rq1+1。其中r、p1、q1都是素数。u1, u2 ∈ Z with gcd(u1, u2) = 2(gcd表示最大公约数)。令u1=2v1,u2=2v2。且v1,v2为质数。r为设定的比特长度
2.计算n = pq, φ(n)=(p − 1)(q − 1) = u1u2r2p1q1,这里r2是r的平方。λ(n) = lcm(p − 1, q − 1) = 2v1v2rp1q1,lcm是表示求两个或者多个数的最小公倍数。这个函数又叫做卡迈尔函数。
为什么要选择(p-1)*(q-1)作为计算的基础?
直观地说,是为了使用费马小定理,从ap-1 ≡ 1(mod p)可以看出,费马小定理可以把一个基于指数的大数的模转换为一个小数,这也是要求p、q必须为素数的原因。其实,费马小定理是欧拉定理的特例,欧拉定理:
对任意的整数(a,m)=1,存在公式:
aφ(m)≡1(mod m)
其中φ(m)称为m的既约剩余系的大小,即那些与m互质的余数的个数,当m为素数p时,φ(p)=p-1(除0外其他余数都与p互质),则得到费马小定理。
同样,应用欧拉素数公式可以得到:φ(N)=φ(p*q)=(p-1)*(q-1),这就是选择(p-1)*(q-1)作为计算基础的根本原因。
3.C 选择一个α ∈ Z∗n 且阶数为r (mod n), gcd(α, φ(n)) = 1. g ∈ Z∗n such that gλ(n) ≡ 1 (mod n) 这个g认为是生成元。
4.C生成一个私钥随机数s∈Z∗r并确定β = αs(s是次幂) (mod n).(这里是群管理员私钥,我这么理解的)
5.C发布的n、r、α和β是公开的,而元素p、q和s是保密的。
6.C通过生成四个随机数a0, b0, c0, d0来设置其群成员里的私钥。
7.C通过计算确定G的共享公钥
8.C计算整数h, k∈Zr,使h = a0 + sb0 (mod r)和k = c0 + sd0 (mod r)
9.私钥的构成(ai, bi, ci, di) and ai, bi, ci, di ∈ Zr 。四个元素构成的。首先会随机数bi和di。然后通过公式
计算出ai 和 ci。C计算生成了所有群成员的私钥,通过安全通道传递给群成员。
二、参数和密钥的验证
验证群中的每个成员的私钥和共享的公钥有关。
三、群签名
一个消息M,经过哈希函数SHA-2 h(M) = m.群成员对m进行签名。fi = ai + cim (mod r), gi = bi + dim (mod r)。可以发布消息M的群签名,即(f,g)=(fi, gi)。签名使用自己的私钥。
四、验证
任何验证者知道消息M、哈希函数h、群G的公钥(P, Q)和组签名(f, g),可以通过以下计算来检查签名是否有效:
验证过程如下:
如果相等证明这个签名属于群G,否则不属于群G
五、签名用户的查找
针对于要查找群G中的某个成员,需要循环的遍历每个成员。
具体操作如下: