一种基于身份的前向安全环签名方法

文档序号:26953172发布日期:2021-10-16 02:33阅读:260来源:国知局
一种基于身份的前向安全环签名方法

1.本发明涉及信息安全技术,具体涉及一种基于身份的前向安全环签名方法。


背景技术:

2.前向安全环签名是一种特殊的环签名,它除了具有普通环签名的不可伪造性和匿名性之外,还可以实现用户私钥的前向安全性,即当用户私钥在某一时刻泄露之后,在该时刻之前的用户签名的安全性都不受影响,因此能够应用于自组织网络的匿名认证中。此外,基于身份的前向安全环签名还可消除公钥证书带来的额外存储开销和计算开销的问题,具有更好的效率。当前,前向安全的环签名方案都基于传统困难问题,导致这些方案不能抵抗量子计算机的攻击,安全性不高。


技术实现要素:

3.本发明是为了解决上述现有技术存在的不足之处,提出一种抗量子攻击的基于身份的前向安全环签名方法,以期能在实现签名前向安全性的前提下,提高用户签名的效率,并能抵抗量子计算机的攻击,从而解决传统前向安全环签名中出现的证书管理问题。
4.本发明为达到上述发明目的,采用如下技术方案:
5.本发明一种基于身份的前向安全环签名方法的特点包括以下步骤:
6.步骤1、参数的设置;
7.步骤1.1、设置安全参数n,并选择素数q≥2、第一整数第二整数m>5nlogq,以及高斯参数ω表示下界参数;
8.步骤1.2、利用陷门生成函数trapgen(q,n)生成随机矩阵及其基b
a
∈z
m
×
m
;表示在集合{0,1,2...q

1}中取值构成维数为n
×
m的矩阵集合;z
m
×
m
表示非负整数组成维数为m
×
m的矩阵的集合;
9.步骤1.3、构建公共参数和主私钥msk=b
a
;h1、h2表示两个将任意长度输入通过散列算法变换成固定长度输出的抗碰撞哈希函数,表示消息空间;
10.步骤2、初始私钥sk
id,0
的提取;
11.步骤2.1、定义用户身份id∈{0,1}
*
,{0,1}
*
表示由0、1组成的任意长度的串的集合,计算用户id的标签矩阵q=h1(id),并构造用户身份矩阵a
id
=[a|q];|表示矩阵a和q连接;
[0012]
步骤2.2、利用格基随机化函数randbasis(extbasis(b
a
,a
id
),s)生成用户身份的基r
id
∈z
(m+1)
×
(m+1)
;z
(m+1)
×
(m+1)
表示维数为(m+1)
×
(m+1)的非负整数矩阵的集合;
[0013]
步骤2.3、对于任一个节点z,确定集合nodes(0

t

1),z∈nodes(0

t

1),其中,
nodes(t

t

1)表示二叉树中包含叶子节点{t,...,t

1}但不包含{0,...,t

1}的所有祖先的最小集合,0

t

1表示从0开始到t

1的时间周期;
[0014]
步骤2.3.1、如果z∈



表示无实质节点存在的一个空集,令用户id在节点z处对应的私钥sk
id
[z]=

;否则,执行步骤2.3.2;
[0015]
步骤2.3.2、用d
z
表示二进制向量z的长度,其中,d
z
≤d,d表示二叉树的深度;
[0016]
步骤2.3.3、构造用户id在对应节点z处的矩阵其中,bin(z)是节点z的二进制表示,bin(z)[d
z
]表示第d
z
个比特位,表示节点z从根到节点z的路径在深度d
z
处的矩阵,表示在集合{0,1,2...q

1}中取值构成的维数为n
×
((d
z
+1)m+1)的矩阵集合;
[0017]
步骤2.3.4、计算用户id在对应节点z处的基令sk
id
[z]=r
id,z


表示生成,randbasis()表示基的随机化,extbasis()表示基的提取,s
dz
表示随机化基时随机选取的高斯参数;
[0018]
步骤2.3.5、令与用户身份id相对应的初始私钥为sk
id,0
={sk
id
[z],z∈nodes(0

t

1)};
[0019]
步骤3、时间段t的私钥sk
id,t
的更新;
[0020]
步骤3.1、令已知时间段t的私钥sk
id,t
={sk
id
[z],z∈nodes(t

t

1)},则对于新的二进制向量z'∈nodes(t+1

t

1)的秘钥演化过程如下:
[0021]
步骤3.1.1、如果z'∈

,令用户id在节点z处对应的私钥sk
id
[z

]=


[0022]
如果存在一个z∈nodes(t

t

1)是z'的前缀,则:
[0023]
若z'=z,则令sk
id
[z

]=sk
id
[z];
[0024]
若z'=z||y,y表示非空的二进制比特串,||表示z和y进行连接,则计算用户在对应节点z'处的基令sk
id
[z']=r
id,z'
;a
id,z'
表示在节点z'提取基时用到的矩阵,且表示随机化基时随机选取的高斯参数;
[0025]
步骤3.1.2、计算时间段t+1的私钥sk
id,t+1
={sk
id
[z

],z

∈nodes(t+1

t

1)};
[0026]
步骤4、签名;
[0027]
步骤4.1、定义最大环为s,待签名消息为μ,当前环为r,时间段t的私钥sk
id,t
所对应的身份id∈r;
[0028]
步骤4.2、定义当前环r为所有用户的身份集合其中,id
s
表示第s个用户身份,表示用户数量,在时间段t第s个用户身份id
s
的私钥为消息μ∈{0,1}
*

[0029]
步骤4.3、假设第s个用户身份id
s
为签名者,则解析时间段t内签名者的私钥获取签名者在节点z处的基其中,z∈nodes(t

t

1),z=bin(t),bin表示整数时间t对应的二进制表示,bin(t)的长度为d
t

[0030]
步骤4.4、构造用户s对环进行签名所要的验证矩阵其中,q
s+1
表示第s+1个用户的身份标签矩阵,表示用户s的身份矩阵,b
t
表示从根出发到节点t的路径矩阵,且表示节点t从根到节点t的路径在深度d
t
处的矩阵;
[0031]
步骤4.5、选择一个随机数τ∈{0,1}
ω(logn)
,{0,1}
ω(logn)
表示由0或1组成的长度为ω(logn)的串的集合,计算哈希值u=h2(r,μ,t,τ);
[0032]
步骤4.6、利用陷门抽样函数产生一个向量其中,e满足高斯分布r表示随机选取的一个高斯参数,表示q模格;
[0033]
步骤4.6、得到时间段t的签名σ
t
=(e,r,t,τ);
[0034]
步骤5、根据消息μ,签名σ
t
,时间段t和环验证消息签名对(μ,σ
t
),如果验证通过,则输出1,否则,输出0;
[0035]
步骤5.1.将签名σ
t
解析为(e,r,t,τ);
[0036]
步骤5.2、根据哈希值u和验证矩阵a
r
,当且仅当(a
r
·
e)modq=h2(r,μ,t,τ)且时,表示验证通过,否则,表示验证失败,其中,o表示时间复杂度,||e||表示向量e的l2范数。
[0037]
与现有技术相比,本发明的有益效果体现在:
[0038]
1.本发明采用基于身份的方法,用户不在需要传统的公钥证书来验证身份,而是将自己的身份直接作为自己的私钥,通过私钥提取算法,利用系统主私钥msk通过身份信息进行提取和随机化基,从而为相应用户导出私钥,消除了传统公钥密码学中公钥证书所带来的额外存储开销和计算开销。
[0039]
2.本发明采用格密码学技术设计前向安全的环签名方案,密码系统整个生命周期被划分为t个时间段,当前时间段t结束,下一时间段t+1开始时,签名者可以通过对当前私钥进行提取和随机化来实现秘钥更新,该过程是一个单向过程,可以解决当前时间段内私钥泄露会暴露过去时间段内私钥信息的问题,保证了即使当前密钥泄露也不会影响过去时间段内签名的有效性。整个过程基于格上小整数解困难假设,使得该方案可以抵抗量子计算机的攻击。
附图说明
[0040]
图1为本发明二叉树结构图;
[0041]
图2为本发明主要实施步骤的流程图;
具体实施方式
[0042]
本实施例中,如图2所示,一种基于身份的前向安全环签名方法是采用格密码技术,首先定义如下两个集合,其中n,m,q均为正整数,
[0043][0044][0045]
定义集合λ上参数为s>0、中心为c∈r
m
的离散高斯分布为:
[0046][0047][0048]
当c=0时,记ρ
s,0
和分别为ρ
s

[0049]
其次,本发明采用二叉树结构来对用户秘钥进行演化。在这个二叉树中,除了叶子节点之外的每个节点都有两个分支,左分支用0表示,右分支用1表示。为了简单起见,在方案中,方案的生命周期分为t=2
d
个时间周期,其中d是一个正整数。每个时间段t∈{0,1,...,t

1}都与一个叶子bin(t)相关联,其中bin(t)是t的比特分解,可以理解成是从根到该节点的路径。对于j=1,...d+1,将时间段t的“深度j处的右兄弟”定义为:
[0050][0051]
定义节点集nodes(t

t

1)={sibling(1,t),...,sibling(d+1,t)}。
[0052]
图1展示了一个时间周期为t=23的二叉树。为了填充集合nodes(t

t

1),首先从叶子bin(t)开始,并将它添加到nodes(t

t

1),如果它的兄弟存在,我们也将它添加到集合节点nodes(t

t

1)中。然后递归向上,将路径上所有父节点的兄弟节点(如果还存在)添加到集合nodes(t

t

1),直到到达根节点。然后停止,输出对应的列表nodes(t

t

1)。以节点(001)为例,从节点ε到叶子节点(001)的路径,有nodes(1

7)={(1),(01),

,(001)}。
[0053]
具体实施中,该前向安全环签名方法包括以下步骤:
[0054]
步骤1、参数的设置;
[0055]
步骤1.1、设置安全参数n,并选择素数q≥2、第一整数第二整数m>5nlogq,以及高斯参数ω表示下界参数,即大于但不等于
[0056]
步骤1.2、利用陷门生成函数trapgen(q,n)生成随机矩阵及其基b
a
∈z
m
×
m
;表示在集合{0,1,2...q

1}中取值构成维数为n
×
m的矩阵集合。z
m
×
m
表示非负整数组成维数为m
×
m的矩阵的集合。其中,trapgen(q,n)算法是指:给定整数n≥1,q≥2,m≥5nlogq该算法输出一个近似均匀随机的矩阵以及格λ

(a)的一个基b
a
∈z
m
×
m
,并且以极大概率满足和||b
a
||≤o(nlogq),其中是b
a
的正交化。
[0057]
步骤1.3、构建公共参数和主私钥msk=b
a
;h1、h2表示两个将任意长度输入通过散列算法变换成固定长度的输出的抗碰撞哈希函数,表示消息空间;
[0058]
步骤2、初始私钥sk
id,0
的提取;
[0059]
步骤2.1、定义用户身份id∈{0,1}
*
,{0,1}
*
表示由0、1组成的任意长度的串的集合,计算用户id的标签矩阵q=h1(id),并构造用户身份矩阵a
id
=[a|q];|表示矩阵a和q连接;
[0060]
步骤2.2、利用格基随机化函数randbasis(extbasis(b
a
,a
id
),s)生成用户身份的基r
id
∈z
(m+1)
×
(m+1)
;z
(m+1)
×
(m+1)
表示维数为(m+1)
×
(m+1)的非负整数矩阵的集合。其中,randbasis(a,s,r)算法是指:输入矩阵格λ

(a)的一个基s和高斯参数该算法输出格λ

(a)的一个新基s',满足并且s'不会泄露关于基s的任何信息。
[0061]
步骤2.3、对于任一个节点z,确定集合nodes(0

t

1),z∈nodes(0

t

1),其中,nodes(t

t

1)表示二叉树中包含叶子节点{t,...,t

1}但不包含{0,...,t

1}的所有祖先的最小集合,0

t

1表示从0开始到t

1的时间周期;
[0062]
步骤2.3.1、如果z∈



表示无实质节点存在的一个空集,令用户id在节点z处对应的私钥sk
id
[z]=

;否则,执行步骤2.3.2;
[0063]
步骤2.3.2、用d
z
表示二进制向量z的长度,其中,d
z
≤d,d表示二叉树的深度;
[0064]
步骤2.3.3、构造用户id在对应节点z处的矩阵其中,bin(z)是z的二进制表示,bin(z)[d
z
]表示第d
z
个比特位,表示节点z从根到节点z的路径在深度d
z
处的矩阵,表示在集合{0,1,2...q

1}中取值构成的维数为n
×
((d
z
+1)m+1)的矩阵集合;
[0065]
步骤2.3.4、计算用户id在对应节点z处的基令sk
id
[z]=r
id,z


表示生成,randbasis()表示基的随机化,extbasis()表示基的提取,表示随机化基时随机选取的高斯参数;其中,extbasis(s0,a=a0||a1)算法是指:输入矩阵格λ

(a0)的一个基s0以及一个矩阵该算法输出格λ

(a)的一个基s∈z
m
×
m
满足其中m=m0+m1。
[0066]
步骤2.3.5、令与用户身份id相对应的初始私钥为sk
id,0
={sk
id
[z],z∈nodes(0

t

1)};
[0067]
步骤3、时间段t的私钥sk
id,t
的更新;
[0068]
步骤3.1、令已知时间段t的私钥sk
id,t
={sk
id
[z],z∈nodes(t

t

1)},则对于新的二进制向量z'∈nodes(t+1

t

1)的秘钥演化过程如下:
[0069]
步骤3.1.1、如果z'∈

,令用户id在节点z处对应的私钥sk
id
[z

]=


[0070]
如果存在一个z∈nodes(t

t

1)是z'的前缀,则:
[0071]
若z'=z,则令sk
id
[z

]=sk
id
[z];
[0072]
若z'=z||y,y表示非空的二进制比特串,||表示z和y进行连接,则计算用户在对应节点z'处的基r
id,z'

randbasis(extbasis(r
id,z
,a
id,z'
),s
dz'
),令sk
id
[z']=r
id,z'
;a
id,z'
表示a
id,z'
表示在节点z'提取基时用到的矩阵,且表示随机化基时随机选取的高斯参数;
[0073]
步骤3.1.2、计算时间段t+1的私钥sk
id,t+1
={sk
id
[z

],z

∈nodes(t+1

t

1)};
[0074]
步骤4、签名;
[0075]
步骤4.1、定义最大环为s,待签名消息为μ,当前环为r,时间段t的私钥sk
id,t
所对应的身份id∈r;
[0076]
步骤4.2、定义当前环r为所有用户的身份集合其中,id
s
表示第s个用户身份,表示用户数量,在时间段t第s个用户id
s
的私钥为消息μ∈{0,1}
*

[0077]
步骤4.3、假设第s个用户身份id
s
为签名者,则解析时间段t内签名者的私钥获取签名者在节点z处的基其中,z∈nodes(t

t

1),z=bin(t),bin表示整数时间t对应的二进制表示,bin(t)的长度为d
t

[0078]
步骤4.4、构造用户s对环进行签名所要的验证矩阵其中,q
s+1
表示第s+1个用户的身份标签矩阵,表示用户s的身份矩阵,b
t
表示从根出发到节点t的路径矩阵,且表示节点t从根到节点t的路径在深度d
t
处的矩阵;
[0079]
步骤4.5、选择一个随机数τ∈{0,1}
ω(logn)
,{0,1}
ω(logn)
表示由0或1组成的长度为ω(logn)的串的集合,计算哈希值u=h2(r,μ,t,τ);
[0080]
步骤4.6、利用陷门抽样函数产生一个向量其中,e满足高斯分布r表示随机选取的一个高斯参数,其中samplepre(a,b
a
,u,r)算法是指:输入矩阵以及格λ

(a)的一个基b
a
,向量以及参数该算法输出统计接近于离散高斯分布的一个向量e∈z
m
,满足ae=ymodq且
[0081]
步骤4.6、得到时间段t的签名σ
t
=(e,r,t,τ);
[0082]
步骤5、根据消息μ,签名σ
t
,时间段t和环验证消息签名对(μ,σ
t
),如果验证通过,则输出1,否则,输出0;
[0083]
步骤5.1.将签名σ
t
解析为(e,r,t,τ);
[0084]
步骤5.2、根据哈希值u和验证矩阵a
r
,当且仅当(a
r
·
e)modq=h2(r,μ,t,τ)且
时,表示验证通过,否则,表示验证失败,其中,o表示时间复杂度,||e||表示向量e的l2范数。
[0085]
方案分析:
[0086]
正确性:首先假设环签名σ
t
=(e,r,t,τ)是严格按照上述方案生成的。假定在t时间段内进行签名,按照方案中私钥提取以及密钥更新算法,从私钥sk
id,t
={sk
id
[z],z∈nodes(t

t

1)}中获取其中z∈nodes(t

t

1),z=bin(t),长度为d
t
。其中,。其中,根据算法extbasis和randbasis的性质,经过重复的提取基和随机化基,得到由于对于u=h2(r,μ,t,τ),根据算法samplepre的性质,u=a
r
e modq成立,将以极大的概率满足因此,该基于身份的前向安全环签名方案是正确的。
[0087]
安全性:对于同一消息μ和环在相同的时间段t,不同签名用户id
b
生成的两个签名σ
0,t
和σ
1,t
在统计上是不可区分的,因此本方案满足匿名性。在上述构造中,由于基就是方案中的私钥,通过调用算法不断地随机化,满足前向安全性,即使敌手获取当前时间段t的私钥,也无法获得在这之前的签名秘钥。此外,找到一个短向量e使得a
r
emodq=0可被规约到小整数解困难问题,所以本方案满足不可伪造性。
[0088]
综上所述,基于身份的前向安全环签名方法,是基于格相关的困难问题,从而有望能抵抗量子计算机的攻击,同时,采用二叉树结构进行用户秘钥演化,在实现签名前向安全性的前提下,提供了较好的效率。此外,由于本发明引入基于身份的密码体制,也解决了传统前向安全环签名中出现的证书管理问题,进一步提高了方案的效率。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1