发明名称 一种基于身份的分层广播加密方法
摘要 一种基于身份的分层广播加密方法,步骤如下:1、PKG输入系统安全系数,输出初始化参数;2、PKG运行随机数生成算法,选择随机数;3、PKG运行双线性对运算,输出公钥,保留主密钥;4、加密方运行随机数生成算法、乘法和求幂运算,输出部分密文;5、加密方运行抗碰撞哈希函数;6、加密方运行乘法和求幂运算,输出完整密文;7、PKG或上级用户运行随机数生成算法,生成私钥所需的随机数;8、PKG或上级用户运行乘法和求幂运算,输出用户私钥;9、解密方运行抗碰撞哈希函数,验证密文的有效性,有效进行下一步骤,无效输出NULL;10、满足解密条件的用户,由用户私钥计算得到K;11、解密用户根据K,运行双线性对运算和乘法运算,输出明文。
申请公布号 CN103986574A 申请公布日期 2014.08.13
申请号 CN201410209022.9 申请日期 2014.05.16
申请人 北京航空航天大学 发明人 刘建伟;周云雅;伍前红;刘巍然
分类号 H04L9/30(2006.01)I;H04L9/08(2006.01)I 主分类号 H04L9/30(2006.01)I
代理机构 北京慧泉知识产权代理有限公司 11232 代理人 王顺荣;唐爱华
主权项 一种基于身份的分层广播加密方法,其特征在于:该方法包括初始化模块、数据加密模块、私钥生成模块和解密模块,由该四个模块共11个步骤实现基本功能,各模块按照“初始化模块”→“数据加密模块”→“私钥生成模块”→“解密模块”顺序执行,其步骤如下:模块一:初始化模块私钥生成中心即PKG,在这一模块中将系统安全参数λ、用户分层结构的最大深度D和用户数量的最大值n+1作为输入,输出主密钥MSK和公钥PK;公钥PK可以公开,而主密钥MSK则须PKG严格保密;该模块功能的具体实现分为三步:步骤1:PKG首先输入系统安全参数λ,然后运行算法<img file="FDA0000506391960000011.GIF" wi="168" he="77" />输出两个阶数为合数N的群<img file="FDA0000506391960000012.GIF" wi="138" he="66" />和一个双线性映射运算e:<img file="FDA0000506391960000013.GIF" wi="300" he="66" />其中N=p<sub>1</sub>p<sub>2</sub>p<sub>3</sub>,p<sub>1</sub>,p<sub>2</sub>,p<sub>3</sub>分别是N的三个离散的大素数因子;步骤2:PKG运行随机数生成算法,随机选择阶数为p<sub>1</sub>的群<img file="FDA0000506391960000014.GIF" wi="78" he="79" />中的一个生成元g,<img file="FDA0000506391960000015.GIF" wi="84" he="78" />群中的一个元素h,阶数为p<sub>3</sub>的群<img file="FDA0000506391960000016.GIF" wi="84" he="78" />中的一个元素X<sub>3</sub>以及Z<sub>N</sub>:{0,1,...,N‑1}域中的一个元素α作为随机指数;并对包括动态虚拟用户在内的所有n+1个用户随机分配<img file="FDA0000506391960000017.GIF" wi="78" he="79" />群中的一个元素u<sub>i</sub>,i∈[1,n+1];步骤3最后PKG进行一次合数阶双线性对运算,得到<img file="FDA0000506391960000018.GIF" wi="70" he="67" />群中的一个元素e(g,g)<sup>α</sup>;经过上述三个步骤得到的参数(g,h,u<sub>1</sub>,...,u<sub>n+1</sub>,X<sub>3</sub>,e(g,g)<sup>α</sup>)作为公钥能对外公开,g<sup>α</sup>作为主密钥由PKG保管;模块二:数据加密模块加密方在这一模块中将公钥PK和待加密的消息M以及接收密文用户的身份向量集合V作为输入,输出加密消息M后得到的密文CT;该模块功能的实现分三步:步骤4:加密方随机选择Z<sub>N</sub>:{0,1,...,N‑1}域中的一个元素作为指数β,完成1次乘法和2次求幂运算,得到(C<sub>0</sub>,C<sub>2</sub>)←(g<sup>β</sup>,e(g,g)<sup>αβ</sup>·M)对于接收用户的身份向量集合V,我们定义集合<img file="FDA0000506391960000021.GIF" wi="353" he="70" />步骤5:加密方运行抗碰撞哈希函数H{·},计算得到<img file="FDA0000506391960000022.GIF" wi="514" he="69" />其运行抗碰撞哈希函数H{·}的计算方法如下:哈希函数的输入是密文C<sub>0</sub>、C<sub>2</sub>,输出为映射到Z<sub>N</sub>:{0,1,...,N‑1}域中的元素,该哈希函数能从Pairing‑Based Cryptosystems函数包中的库函数中调用得到;步骤6:加密方完成多项式次乘法和求幂运算,得到C<sub>1</sub>,<img file="FDA0000506391960000023.GIF" wi="834" he="190" />最后的密文输出:CT=(C<sub>0</sub>,C<sub>1</sub>,C<sub>2</sub>),该密文是面向用户身份向量集合V∪{(ID<sub>n+1</sub>)}加密的;模块三:私钥生成模块该模块由两部分参与:一部分由PKG承担,模块输入某一用户的身份向量ID和主密钥MSK,生成对应的私钥SK<sub>ID</sub>;另一部分由待生成私钥的用户的上层用户承担,代理PKG完成用户私钥的生成和分发任务;模块输入该上层用户的私钥SK<sub>ID′</sub>和下层用户的身份ID,输出ID对应的私钥SK<sub>ID</sub>;由PKG承担的私钥生成功能具体分为两步实现:步骤7:PKG随机选择Z<sub>N</sub>:{0,1,...,N‑1}域中的一个元素r作为指数,运行随机选择两个<img file="FDA0000506391960000031.GIF" wi="89" he="79" />群中的元素A<sub>0</sub>,A<sub>1</sub>;对于用户的身份向量ID,我们定义集合I={i:ID<sub>i</sub>∈S<sub>ID</sub>},并对所有不在集合I中的用户随机分配<img file="FDA0000506391960000032.GIF" wi="82" he="78" />群中的一个元素U<sub>j</sub>,j∈[1,n+1/I];步骤8:PKG完成多项式次乘法和求幂运算,得到最后的用户私钥<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><msub><mi>SK</mi><mi>ID</mi></msub><mo>&LeftArrow;</mo><mrow><mo>(</mo><msup><mi>g</mi><mi>&alpha;</mi></msup><msup><mrow><mo>(</mo><mi>h</mi><mo>&CenterDot;</mo><munder><mi>&Pi;</mi><mrow><mi>i</mi><mo>&Element;</mo><mi>I</mi></mrow></munder><msubsup><mi>u</mi><mi>i</mi><msub><mi>ID</mi><mi>i</mi></msub></msubsup><mo>)</mo></mrow><mi>r</mi></msup><msub><mi>A</mi><mn>0</mn></msub><mo>,</mo><msup><mi>g</mi><mi>r</mi></msup><msub><mi>A</mi><mn>1</mn></msub><mo>,</mo><msub><mrow><mo>{</mo><msubsup><mi>u</mi><mi>j</mi><mi>r</mi></msubsup><msub><mi>U</mi><mi>j</mi></msub><mo>}</mo></mrow><mrow><mi>j</mi><mo>&Element;</mo><mo>[</mo><mn>1</mn><mo>,</mo><mi>n</mi><mo>+</mo><mn>1</mn><mo>]</mo><mo>/</mo><mi>I</mi></mrow></msub><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000506391960000033.GIF" wi="1109" he="196" /></maths>由上级用户承担的私钥生成功能同样分为两步实现:步骤7<sup>*</sup>:上级用户首先随机选择Z<sub>N</sub>:{0,1,...,N‑1}域中的一个元素t作为指数,运行随机数生成算法随机选择两个<img file="FDA0000506391960000034.GIF" wi="71" he="60" />群中的元素R<sub>0</sub>,R<sub>1</sub>,并对所有不在集合I中的用户随机分配<img file="FDA0000506391960000035.GIF" wi="71" he="60" />群中的一个元素T<sub>j</sub>,j∈[1,n+1]/I;步骤8<sup>*</sup>:上级用户由自身的私钥SK<sub>ID′</sub>出发,令<img file="FDA0000506391960000036.GIF" wi="561" he="150" /><maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><msub><mi>a</mi><mn>1</mn></msub><mo>=</mo><msup><mi>g</mi><msup><mi>r</mi><mo>&prime;</mo></msup></msup><msub><mi>A</mi><msup><mn>1</mn><mo>&prime;</mo></msup></msub><mo>,</mo><msub><mrow><mo>{</mo><msub><mi>b</mi><mi>j</mi></msub><mo>}</mo></mrow><mrow><mi>j</mi><mo>&Element;</mo><mo>[</mo><mn>1</mn><mo>,</mo><mi>n</mi><mo>+</mo><mn>1</mn><mo>]</mo><mo>/</mo><msup><mi>I</mi><mo>&prime;</mo></msup></mrow></msub><mo>=</mo><msub><mrow><mo>{</mo><msubsup><mi>u</mi><mi>j</mi><msup><mi>r</mi><mo>&prime;</mo></msup></msubsup><msub><mi>U</mi><msup><mi>j</mi><mo>&prime;</mo></msup></msub><mo>}</mo></mrow><mrow><mi>j</mi><mo>&Element;</mo><mo>[</mo><mn>1</mn><mo>,</mo><mi>n</mi><mo>+</mo><mn>1</mn><mo>]</mo><mo>/</mo><msup><mi>I</mi><mo>&prime;</mo></msup></mrow></msub><mo>,</mo></mrow>]]></math><img file="FDA0000506391960000037.GIF" wi="1036" he="85" /></maths>经过多项式次乘法和求幂运算能得到用户身份向量ID=(ID′,ID)对应的私钥SK<sub>ID</sub>;模块四:解密模块解密用户在这一模块中,首先运行抗碰撞哈希函数H{·}验证密文的有效性,如果密文是有效的,则将接收密文用户的身份向量集合V∪{(ID<sub>n+1</sub>)}、加密消息M得到的密文CT和用户私钥SK<sub>ID</sub>作为输入;如果满足条件ID∈V,则该模块输出正确的明文消息M;若密文无效则系统输出NULL即无效符号;该模块功能的实现具体分为三步:步骤9:解密方首先验证密文的有效性,运行抗碰撞哈希函数H{·}:<img file="FDA0000506391960000038.GIF" wi="519" he="52" />检测下列等式是否成立:<img file="FDA0000506391960000041.GIF" wi="817" he="168" />若等式成立,进行如下步骤10、11,若不成立,系统输出NULL;其中,所述的“运行抗碰撞哈希函数H{·}”,其运行和计算的方法与步骤5中所述的相同;步骤10:对于满足ID∈Pref(V)条件的用户,由自身的私钥SK<sub>ID</sub>首先计算得到<img file="FDA0000506391960000042.GIF" wi="422" he="91" />步骤11:解密用户根据上步得到的K,进行两次双线性对运算和一次乘法运算,计算输出明文消息M:<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><mi>M</mi><mo>=</mo><msub><mi>C</mi><mn>2</mn></msub><mfrac><mrow><mi>e</mi><mrow><mo>(</mo><msub><mi>C</mi><mn>1</mn></msub><mo>,</mo><msub><mi>a</mi><mn>1</mn></msub><mo>)</mo></mrow></mrow><mrow><mi>e</mi><mrow><mo>(</mo><mi>K</mi><mo>,</mo><msub><mi>C</mi><mn>0</mn></msub><mo>)</mo></mrow></mrow></mfrac></mrow>]]></math><img file="FDA0000506391960000043.GIF" wi="377" he="134" /></maths>特别地,上述方案中解密模块的第一步,能进行公开验证;因为验证的输入为公钥参数和密文,均是对外公开的,因而所述的HIBBE方案能用于构造高级的安全协议;优化模式下的树形用户身份分层结构:所涉及的基于身份的分层广播加密方法,当用户分层结构深度为d时,每个用户私钥包括n‑d+2个元素,密文包括三个群元素;考虑到某些接收密文用户的数据存储能力受限的情况,我们在私钥长度和密文长度之间做出折衷,提出了优化模式下的树形用户身份分层结构;最原始的系统所有用户按照一棵树T的结构组织排列,树节点总数为n;我们对树T进行分割,分割为<img file="FDA0000506391960000044.GIF" wi="43" he="40" />棵子树,每棵子树包含的节点数为n<sub>i</sub>个,<img file="FDA0000506391960000045.GIF" wi="194" he="48" />分割的原则为:①每棵子树的节点数尽量相等,即<img file="FDA0000506391960000046.GIF" wi="232" he="52" />②所有子树尽量分享最少的高层节点;每棵子树均看做独立的HIBBE系统,正常运行本技术方案中的各功能模块;当广播加密密文时,若用户集合来自不同的子树,则向涉及到的所有访问结构树进行广播;通过上述优化,私钥的长度降至<img file="FDA0000506391960000051.GIF" wi="122" he="97" />数量级,密文的长度增加至<img file="FDA0000506391960000052.GIF" wi="113" he="49" />数量级;若我们令<img file="FDA0000506391960000053.GIF" wi="197" he="59" />则密文和私钥的长度均变为<img file="FDA0000506391960000054.GIF" wi="136" he="63" />数量级,大大减少了用户的存储负担。
地址 100191 北京市海淀区学院路37号