1.一种抗密钥暴露属性加密的SDN跨域访问控制方法,其特征在于:基于属性权威、SDN控制器、加密者和解密者四部分构成的控制系统,属性权威和SDN控制器位于控制层,加密者和解密者位于数据层,属性权威是一个可信的权威机构,负责所有属性的认证以及公钥、私钥的发布;SDN控制器负责收集、存储和管理SDN流表、路由以及数据量信息,SDN采用多控制设置,将SDN划分为多个SDN域,每一个域内部署唯一的SDN控制器,每个SDN控制器管理各自域内的重要信息,同时负责与其他域的SDN控制器交互;加密者是数据的初始拥有者,包括路由器、服务器、PC机和交换机构成的用户或SDN设备,用户或SDN设备能够上传自己的数据并根据自己的意愿或需求自由制定相应的访问策略;解密者是试图获取SDN控制器内信息的用户或者设备,其身份用一个属性集合来表示,解密者拥有一个与其属性集合相对应的私钥,并通过私钥来解密密文,解密者包括路由器、loT传感器、手机和交换机;包括以下步骤:第一步:启动访问控制系统,属性权威调用初始化算法,输入一个安全参数k,生成公钥PK和主密钥MSK,公钥PK向全网公开,主密钥MSK由属性权威秘密保存;
第二步:解密者向属性权威发起私钥生成请求,输入自己唯一的MAC地址AMAC、属性集合S、公钥PK以及主密钥MSK,获得属性权威验证,属性权威调用私钥生成算法生成私钥SK,并将解密者的属性集合S和MAC地址AMAC嵌入到私钥SK当中,最终输出与解密者MAC地址以及属性集合相对应的私钥SK;
第三步:属性权调用预计算算法中的预处理子算法,预处理子算法输入公钥PK,根据公钥PK产生n个群 和 上的元素集合 并存储在列表L当中,其中attj为全局属性集合Ω当中任意的属性,j表示该属性的唯一索引号,e表示从加法循环群 映射到乘法循环群 的双线性映射,P为 的一个生成元,H1为哈希函数将任意一串二进制数组映射为群 中的元素,α为主密钥MSK当中的一个元素,ri为一个随机的整数,其中i∈{1,2,...,n},然后基于拓展图技术产生一个常数c(ε),其中0<ε<1,利用常数c(ε)计算一个新的常数ne=c(ε)log2(p),其中p为群 和 的大素数阶,然后生成另外ne个群和 上的元素集合 并存储在列表L′当中,其中di为随机数,i∈{1,2,...,ne};
第四步:加密者产生一组消息明文M,同时制定了相应的访问树Γ,调用预计算算法中的元组生成子算法生成与访问树Γ相对应的两个元组Tuple1和Tuple2;
第五步:加密者调用快速加密算法,输入一个访问树Γ、公钥PK以及消息明文M,然后调用预处理子算法,在不执行任何指数运算的情况下通过元组Tuple1和Tuple2快速的生成关于消息明文M以及访问树Γ的密文CT,最后将密文CT上传至域内的SDN控制器;
第六步:解密者向当前域的SDN控制器发送关于消息明文M的跨域访问请求,SDN控制器通过SDN域间传输交互获取密文CT,然后转发给解密者;
第七步:解密者调用解密算法,输入私钥SK、自己的MAC地址AMAC以及获取的密文CT,如果解密者的属性集合S满足密文CT当中的访问树Γ,而且其MAC地址AMAC与私钥SK当中嵌入的MAC地址信息一致,才能获取消息明文M,反之则无法获取任何有用的信息。
2.根据权利要求1所述的抗密钥暴露属性加密的SDN跨域访问控制方法,其特征在于:所述初始化算法的流程为:输入全局的属性集合Ω={att1,att2,att3,…,attn}以及一个安全参数k,其中attj是本发明中的解密者的任意属性,j∈{1,2,...,n}是该属性的唯一索引号,假设加法循环群 和乘法循环群 是阶为大素数p的双线性群,其中大素数p的比特位数由参数k决定,令P是 的一个生成元, 是群 到群 的双线性映射,然后定义一个拉格朗日函数 使得一个索引集合S当中的任意一个索引i满足
定义两个哈希函数 和H2:{0,1}48→Zp,其中H1将任意一串二进制数组映射为群 中的元素,H1将48bit的MAC地址映射为Zp上的元素,选择两个随机数α,β∈Zp,最后生成公钥:PK={p,P,e,Ω,e(P,P)α,H=βP,T=(1/β)P,H1,H2},同时保存主密钥:MSK={αP,β};
预处理子算法输入公钥PK,根据公钥PK产生n个群 和 上的元素集合并存储在列表L当中,其中其中attj为全局属性集合Ω当中任意的属性,j表示该属性的唯一索引号,e表示从加法循环群 映射到乘法循环群 的双线性映射,P为 的一个生成元,H1为哈希函数将任意一串二进制数组映射为群 中的元素,α为主密钥MSK当中的一个元素,ri为一个随机的整数,其中i∈{1,2,...,n},然后基于拓展图技术产生一个常数c(ε),其中0<ε<1,利用常数c(ε)计算一个新的常数ne=c(ε)log2(p),其中p为群 和 的大素数阶,然后生成另外ne个群 和 上的元素集合并存储在列表L′当中,其中di为随机数,i∈{1,2,...,ne}。
3.根据权利要求1所述的抗密钥暴露属性加密的SDN跨域访问控制方法,其特征在于:所述私钥生成算法的流程为:首先输入公钥PK、主密钥MSK、一个属性集合S以及一个MAC地址AMAC,其次选择一个随机数r∈Zp,然后计算D=((α+rH2(AMAC))/β)P,对于任意一个属性attj∈S选择一个随机数rj∈Zp并计算Dj=(rP)·(rjH1(attj))和D′j=rjP,最后输出关于属性集合S的私钥:
4.根据权利要求1所述的抗密钥暴露属性加密的SDN跨域访问控制方法,其特征在于:所述预处理子算法和元组生成子算法共同组成预计算算法;
变量定义:Y代表访问树Γ的叶节点集合,Ux代表子树Γx包含的属性的集合,Sx代表节点x的子节点集合,S′x代表节点x的子节点索引集合,c(ε)代表ε拓展图常数;
4.1预处理子算法:
1)生成n个随机数r1,r2,…,rn∈Zp;
2)对于 计算 riP以及
3)生成一张空列表L,对于 将 添加到列表L当
中;
4)计算ne=c(ε)log2(p)并生成ne个随机数
5)对于 计算 diP以及
6)生成一张空列表L′,对于 将 添加到列表L′当中;
7)随机选择di,初始化参数t=di、 T2=diP以及
4.2元组生成子算法:
元组生成算法输入一个访问树Γ,输出与访问树Γ相关的两个元组Tuple1和Tuple2;该算法由A1和A2两个算法组成,算法执行流程如下:(1)对于访问树Γ的根节点,执行A1算法:
1)在列表L′当中随机选择一组元素
2)重新赋值 T2=T2+diP以及
3)随机提取一个集合 使得|S|=k;
4)从列表L当中随机地抽取一组元素
5)声明并初始化变量 如果e(P,P)αs是群 的单位元则立即返回流程(1)当中的1)重新计算;
6)声明并初始化变量sP=T2+∑i∈SriP以及 最终返回元组:
(2)对于访问树中的任意节点x,继续执行A2算法:
1)声明并初始化常量d=kx-2;
2)从列表L′中随机选择一组元素
3)重新赋值变量T2=T2+diP以及
4)随机提取一个集合 使得|Sd|=k;
5)从列表L中随机选择一组元素
6)声明并初始化变量 若cdP是群 中的单位元则立即返回流程(2)当中的1)重新计算;
7)从列表L′当中随机选择一组元素
8)对于 重新赋值变量T2=T2+diP;
9)对于 重新赋值变量
10)随机选择一个集合 使得|Su|=k;
11)在列表L当中随机选择一组元素
12)对于 声明并赋值变量
13)对于 声明并赋值变量 返回元组:
5.根据权利要求1或4所述的抗密钥暴露属性加密的SDN跨域访问控制方法,其特征在于:所述快速加密算法流程如下:为了生成消息明文M与访问树Γ相对应的密文,快速加密算法需要对访问树Γ当中任意一个节点x产生一个次数为kx-1的随机多项式,为了减小加密的计算负担,利用预计算算法来生成每个节点的随机多项式,根据访问树Γ的结构,采用一种自上而下的迭代方式:对于访问树的根节点R,快速加密算法调用A1算法获取元组Tuple1:如果kR-1≠0,则继续调用A2算法获取元组Tuple2:利用获取的以上两个元组,同时声明并初始化常量dR=kR-2,然后定义一个次数为dR的多项式:随后,关于根节点R的完整多项式为:
qR(X)=r(X)·X+s
对于 计算:
对于访问树Γ当中的任意节点x,调用A2算法获取元组Tuple2:声明并初始化常量dx=kx-2,利用上式中的系数ci定义一个次数为dx的多项式:然后生成关于节点x的完整多项式:
qx(X)=r(X)·X+qparent(x)(index(x))对于 计算:
因此对于任意的叶节点x,快速加密算法通过迭代得到了qx(0)P和qx(0)H1(att(x)),最终生成如下的密文:
6.根据权利要求1所述的抗密钥暴露属性加密的SDN跨域访问控制方法,其特征在于:所述解密算法流程如下:
(1)首先定义一个迭代函数DecryptNode,该函数的输入为密文私钥 以及访问树Γ当中的一个节点x,该算法的迭代过程如下:如果x是叶节点,则令atti=att(x)并进行如下的判断与计算:
1)若atti∈S则计算并输出以下结果:
2)若 则输出以下结果表示放弃该节点的计算:
DecryptNode(CT,SK,x)=⊥
如果x是非叶节点,那么对于其任意子节点z调用函数DecryptNode并记其返回结果为Fz,然后进行如下的判断与计算:
3)判断是否存在关于节点x的包含kx子节点的集合Sx,使得 成立,若不存在,那么输出以下结果表示放弃该节点的计算:
4)若存在集合Sx,计算并输出以下结果:
(2)进一步定义解密算法,分为两步:
1)首先从访问树Γ的叶节点开始调用函数DecyrptNode,如果属性集合S满足访问树Γ,就能够通过层层迭代获取隐藏在根节点R当中的秘密,记为:
2)通过如下计算就可以得到消息明文M:
如果属性集合S不能满足访问树Γ,那么将无法在多项式时间内恢复出根节点R当中的秘密,并且如果当前的MAC地址信息与私钥SK当中的MAC地址信息不吻合,即使恢复出根节点R当中的秘密也无法通过进一步的计算得到消息明文M,因此1)和2))只要任何一步不满足条件,都将导致解密算法退出执行。