基于SM9支持大属性集合的秘钥策略属性基加密系统及方法

文档序号:32250541发布日期:2022-11-19 01:12阅读:144来源:国知局
基于SM9支持大属性集合的秘钥策略属性基加密系统及方法
基于sm9支持大属性集合的秘钥策略属性基加密系统及方法
技术领域
1.本发明属于信息安全技术领域,具体涉及一种基于sm9支持大属性集合的秘钥策略属性基加密系统及方法。


背景技术:

2.传统的标识加密只能将加密数据安全的分享给某一个用户,而在大规模分布式计算系统中常常需要将加密数据分享给多个用户,属性基加密作为一个最有前途的密码学原语,可以通过在加密数据或密钥分发时设置访问结构来实现对加密数据的细粒度访问控制。根据访问结构位置的不同,属性基加密可以分为密钥策略属性基加密和密文策略属性基加密。
3.密钥策略属性基加密指用户的密钥对应着一个由密钥分发机构决定的访问结构,加密者加密时指定一个属性集合来加密明文,当且仅当与密文相关联的属性集合满足该用户解密密钥相关联的访问结构时,该用户才能执行正确的解密操作。
4.密钥策略属性基加密系统中,密钥分发机构决定与用户密钥相对应的访问结构,即由密钥分发机构来决定“该用户可以解开具有哪些属性的密文”,适合大量变动用户对静态数据的访问控制,如付费电视系统、视频点播系统、数据库访问等查询类的应用。最重要的应用之一就是处理审计日志,审计日志中因为包含了系统和网络中所有活动的详细记录而成为黑客攻击的主要目标。密钥策略属性基加密为审计日志提供了一个有效的解决办法,将审计日志条目用一组属性表示,例如,用户的名称、用户操作的日期,以及用户修改或访问的数据类型等。密钥生成中心为每一位负责调查的审计员分发一个与访问控制相关联的密钥,决定审计员可以访问哪些日志条目。这样既保护了审计日志的内容,又实现了对审计日志的灵活访问。
5.秘钥策略属性基加密分为支持小属性和大属性。小属性集的密钥策略属性基加密在系统参数设置时就确定了可能的所有属性。如果属性空间设置的过小,随着审计日志、档案资料或者电视节目的增多,需要的属性超过了初始设置的上界时,就需要重置系统,并且重新加密所有的数据,造成大量资源的浪费。如果在系统设置时将属性空间设置的过大,将会造成系统公共参数的增多,从而给其他操作带来不必要的效率负担。因此设计支持大属性集合集的密钥策略属性基加密具有重要的意义。


技术实现要素:

6.有鉴于此,本发明的目的在于提供一种基于sm9支持大属性集合的秘钥策略属性基加密系统及方法,实现对加密数据的细粒度访问。
7.为实现上述目的,本发明采用如下技术方案:
8.一种基于sm9支持大属性集合的秘钥策略属性基加密系统,包括密钥生成中心、加密者、解密者和云服务器;所述密钥生成中心与加密者、解密者分别连接;所述云服务器与加密者、解密者分别连接。
9.一种基于sm9支持大属性集合的秘钥策略属性基加密系统的加密方法,包括以下步骤:
10.步骤s1、密钥生成中心运行sm9算法生成系统参数,并将生成的系统参数公开给系统中的用户;
11.步骤s2、密钥生成中心根据加密的属性集γ中属性个数的最大值 n设置计算属性公钥的函数t(x),并将生成的公共参数公布给系统中的用户,保密主密钥;
12.步骤s3、加密者获取属性集γ,待加密的消息m,以及系统公钥加密消息m获得密文;
13.步骤s4、密钥生成中心获取加密数据的访问结构对应的访问树t,以及系统的主私钥,输出对应于访问树t的解密密钥。
14.步骤s5、接收者获得密文后,当密文的属性集合满足密钥的访问控制树时,即可解密,恢复出消息,否则解密失败。
15.进一步的,所述步骤s1具体为:
16.选择阶为p的加法群g1,g2,乘法群g
t

17.e:g1×
g2→gt
是双线性映射;
18.哈希函数一个字节表示的加密生成函数标识符hid;
19.对于集合s和i∈z
p
,定义拉格朗日系数为
20.其中,p:循环群g1,g2,g
t
的阶,且p>2
191
的素数;z
p
:{0,1,2

p-1};g1,g2:阶为素数p的加法循环群;g
t
:阶为素数p的乘法循环群;
21.e:从g1×
g2到g
t
的双线性映射;h1:{0,1}
*
到由密码杂凑函数派生的密码函数;hid:用一个字节表示的加密密钥生成函数识别符,由密钥生成中心选择并公开;s:元素取自的集合;δ
i,s
(x):拉格朗日系数。
22.进一步的,所述步骤s2具体为:
23.随机选择生成元p1∈g1,p2∈g2,其中ψ(p2)=p1,随机选择计算群g2中的元素p
pub
=ap2,群g
t
中的元素g=e(p1,p
pub
);
24.设n={1,2,

,n+1},从g2中随机选择互不相同的n+1个元素t1, t2,...,t
n+1
,定义函数公开参数pk为:mpk={p1,p2,p
pub
,g,t1,t2,

t
n+1
},主私钥为msk=a;
25.其中,p1:群g1的生成元;p2:群g2的生成元;ψ:从群g2到g1的映射;主密钥;p
pub
,ti:群g2中的元素;g:群g
t
中的元素;n:正整数。
26.进一步的,所述步骤s3具体为:
27.输入待加密的明文消息m∈g
t2
,属性集合γ,然后选择一个随机值输出密文e:e=(γ,e'=mgs,{e”i
=s(hip1+ψ(p
pub
)),ei=st(i)}
i∈γ
);
28.其中,m:待加密的消息,属于g
t
中元素;γ:加密时使用的属性集;s:临时变量,属
于z
p
中的元素;ei,e”i
:对应于属性i的属性密文,分别属于g2和g1中的元素;e':部分密文,属于g
t
中元素; e:加密的密文;i:加密时使用的属性集中的属性,属于z
p
中的元素;hi:属性i的哈希值。
29.进一步的,所述步骤s4具体为:
30.首先从根节点r开始自上而下遍历访问树,为每个节点x(包括叶子节点)构建一个多项式q
x
,其中节点x的门限值为k
x
,子节点的个数为num
x
,且0<k
x
≤num
x
,多项式的次数d
x
=k
x-1;
31.当所有节点的多项式都被定义完后,为每个叶子节点x计算秘密值,计算如下:
32.首先计算h
x
=h1(x||hid,n),然后选择随机数r
x
∈z
p
计算
[0033][0034]
最后输出解密密钥为d={d
x
,d
x
};
[0035]
其中,t:访问树;r:根节点;x:节点;att(x):仅当x是叶节点时,返回该节点描述的属性;q
x
:节点x对应的多项式;q
x
(0):节点x对应的多项式的常数项;q
parent(x)
(index(x)):多项式q
parent(x)
在index(x)处的值,其中parent(x)表示节点x的父节点,index(x)表示节点x在兄弟节点中的编号;“i”||hid表示i与hid的拼接,其中i和hid是比特串或字节串;hi:哈希函数在i处的值;h
x
:节点x对应属性的哈希值;r
x
: z
p
中随机选择的对应于每个节点的临时变量;k
x
,num
x
,d
x
:属于整数;t(i):t(x)在i处的值;d
x
,d
x
:节点x所对应的部分私钥,分别属于群g2和g1中的元素;d:访问树结构对应的私钥。
[0036]
进一步的,所述多项式中除常数项以外其他d
x
个系数随机的在中选取,常数项设置如下:
[0037][0038]
其中parent(x)表示节点x的父节点,index(x)表示节点x在兄弟节点中的编号。
[0039]
进一步的,所述步骤s5具体为:
[0040]
输入密文e和解密密钥d,首先定义一个递归算法 decryptnode(e,d,x),其输入为密文e=(γ,e',{e”i
,ei}
i∈γ
)、解密密钥d={d
x
,d
x
} (访问树为t)、t的节点x,输出群g
t
上的元素或


[0041]
令i=attr(x),如果x为叶子节点,计算:
[0042][0043]
如果x为非叶子节点,对x的每个子节点z,调用算法 decryptnode(e,d,z),算法输出记为fz;定义以下两个集合:(1)s
x
:任意一个大小为k
x
且使得fz≠

的子节点z的集合;(2)s'
x
={index(z):z∈s
x
};若不存在满足上述条件的s
x
,则输出

;否则,计算
[0044][0045]
解密算法从根节点开始调用上述函数,当且仅当密文满足访问树时可得decryptnode(e,d,r)=e(p1,p2)
as
=gs,最后,计算e'/gs得到明文m;
[0046]
其中:拉格朗日系数中x=0的值。
[0047]
本发明与现有技术相比具有以下有益效果:
[0048]
1、本发明解决了sm9标识加密不能解决的对加密数据的细粒度访问控制;
[0049]
2、本发明消除了在系统参数设置时对属性公钥与私钥的计算,解决了后期因增加属性而需要重置系统所造的大量资源的浪费。
附图说明
[0050]
图1是本发明系统架构图
[0051]
图2是本发明系统工作流程图;
[0052]
图3是本发明一实施例中加密方法的流程示意图;
[0053]
图4为本发明一实施例中加密方法的编程实现。
具体实施方式
[0054]
下面结合附图及实施例对本发明做进一步说明。
[0055]
请参照图1,本发明提供一种基于sm9支持大属性集合的秘钥策略属性基加密系统,包括密钥生成中心、加密者、解密者和云服务器;所述密钥生成中心与加密者、解密者分别连接;所述云服务器与加密者、解密者分别连接。
[0056]
本实施例中,还提供一种基于sm9支持大属性集合的秘钥策略属性基加密系统的加密方法,包括以下步骤:
[0057]
步骤s1、密钥生成中心运行sm9算法生成系统参数,并将生成的系统参数公开给系统中的用户;
[0058]
步骤s2、密钥生成中心根据加密的属性集γ中属性个数的最大值 n设置计算属性公钥的函数t(x),并将生成的公共参数公布给系统中的用户,保密主密钥;
[0059]
步骤s3、加密者获取属性集γ,待加密的消息m,以及系统公钥加密消息m获得密文;
[0060]
步骤s4、密钥生成中心获取加密数据的访问结构对应的访问树t,以及系统的主私钥,输出对应于访问树t的解密密钥。
[0061]
步骤s5、接收者获得密文后,当密文的属性集合满足密钥的访问控制树时,即可解
密,恢复出消息,否则解密失败。
[0062]
本实施例中,优选的,步骤s1具体为:
[0063]
选择阶为p的加法群g1,g2,乘法群g
t

[0064]
e:g1×
g2→gt
是双线性映射;
[0065]
哈希函数一个字节表示的加密生成函数标识符hid;
[0066]
对于集合s和i∈z
p
,定义拉格朗日系数为
[0067]
其中,p:循环群g1,g2,g
t
的阶,且p>2
191
的素数;z
p
:{0,1,2

p-1};{1,2

p-1};g1,g2:阶为素数p的加法循环群;g
t
:阶为素数p的乘法循环群;
[0068]
e:从g1×
g2到g
t
的双线性映射;h1:{0,1}
*
到由密码杂凑函数派生的密码函数;hid:用一个字节表示的加密密钥生成函数识别符,由密钥生成中心选择并公开;s:元素取自的集合;δ
i,s
(x):拉格朗日系数。
[0069]
本实施例中,优选的,步骤s2具体为:
[0070]
随机选择生成元p1∈g1,p2∈g2,其中ψ(p2)=p1,随机选择计算群g2中的元素p
pub
=ap2,群g
t
中的元素g=e(p1,p
pub
);
[0071]
设n={1,2,

,n+1},从g2中随机选择互不相同的n+1个元素t1, t2,...,t
n+1
,定义函数公开参数pk为: mpk={p1,p2,p
pub
,g,t1,t2,

t
n+1
},主私钥为msk=a;
[0072]
其中,p1:群g1的生成元;p2:群g2的生成元;ψ:从群g2到g1的映射;主密钥;p
pub
,ti:群g2中的元素;g:群g
t
中的元素;n:正整数。
[0073]
本实施例中,优选的,步骤s3具体为:
[0074]
输入待加密的明文消息m∈g
t2
,属性集合γ,然后选择一个随机值输出密文e:e=(γ,e'=mgs,{e”i
=s(hip1+ψ(p
pub
)),ei=st(i)}
i∈γ
);
[0075]
其中,m:待加密的消息,属于g
t
中元素;γ:加密时使用的属性集;s:临时变量,属于z
p
中的元素;ei,e”i
:对应于属性i的属性密文,分别属于g2和g1中的元素;e':部分密文,属于g
t
中元素; e:加密的密文;i:加密时使用的属性集中的属性,属于z
p
中的元素;hi:属性i的哈希值。
[0076]
本实施例中,优选的,步骤s4具体为:
[0077]
首先从根节点r开始自上而下遍历访问树,为每个节点x(包括叶子节点)构建一个多项式q
x
,其中节点x的门限值为k
x
,子节点的个数为num
x
,且0<k
x
≤num
x
,多项式的次数d
x
=k
x-1;
[0078]
当所有节点的多项式都被定义完后,为每个叶子节点x计算秘密值,计算如下:
[0079]
首先计算h
x
=h1(x||hid,n),然后选择随机数r
x
∈z
p
计算
[0080]dx
=r
x
(h
x
p1+ψ(p
pub
)),i=att(x)
[0081]
最后输出解密密钥为d={d
x
,d
x
};
[0082]
其中,t:访问树;r:根节点;x:节点;att(x):仅当x是叶节点时,返回该节点描述的属性;q
x
:节点x对应的多项式;q
x
(0):节点x对应的多项式的常数项;q
parent(x)
(index(x)):多项式q
parent(x)
在index(x)处的值,其中parent(x)表示节点x的父节点,index(x)表示节点x在兄弟节点中的编号;“i”||hid表示i与hid的拼接,其中i和hid是比特串或字节串;hi:哈希函数在i处的值;h
x
:节点x对应属性的哈希值;r
x
: z
p
中随机选择的对应于每个节点的临时变量;k
x
,num
x
,d
x
:属于整数;t(i):t(x)在i处的值;d
x
,d
x
:节点x所对应的部分私钥,分别属于群g2和g1中的元素;d:访问树结构对应的私钥。
[0083]
本实施例中,优选的,多项式中除常数项以外其他d
x
个系数随机的在z
p*
中选取,常数项设置如下:
[0084][0085]
其中parent(x)表示节点x的父节点,index(x)表示节点x在兄弟节点中的编号。
[0086]
本实施例中,优选的,步骤s5具体为:
[0087]
输入密文e和解密密钥d(包含访问树t),首先定义一个递归算法decryptnode(e,d,x),其输入为密文e=(γ,e',{e”i
,ei}
i∈γ
)、解密密钥 d={d
x
,d
x
}(访问树为t)、t的节点x,输出群g
t
上的元素或


[0088]
令i=attr(x),如果x为叶子节点,计算:
[0089][0090]
如果x为非叶子节点,对x的每个子节点z,调用算法 decryptnode(e,d,z),算法输出记为fz;定义以下两个集合:(1)s
x
:任意一个大小为k
x
且使得fz≠

的子节点z的集合;(2)s'
x
={index(z):z∈s
x
};若不存在满足上述条件的s
x
,则输出

;否则,计算
[0091][0092]
解密算法从根节点开始调用上述函数,当且仅当密文满足访问树时可得decryptnode(e,d,r)=e(p1,p2)
as
=gs,最后,计算e'/gs得到明文m;
[0093]
其中:拉格朗日系数中x=0的值。
[0094]
参考图4,本实施例中,基于sm9的支持大属性集合的秘钥策略属性基加密方法,在两个生活实例下进行了编程实现,实例1:假设一个学校有25个学院,每个学院有4个专业,
教务系统发布了一则通知,要求只有研究生二年级的学生才可以访问;实例2;在电视广播系统中,我们通过节目播出的频道,类型,时间来加密每个节目,现在假设有30个频道,每个频道有3种节目,每个节目分上下午播出,现某人同时购买了5个频道的任意两个节目的上下午场。编程结果如图4所示,结果显示,在实际应用中,本发明能够有效实现加密应用。
[0095]
以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1