发明名称 一种泄露密钥可追踪的属性基混合加密方法
摘要 一种泄露密钥可追踪的属性基混合加密方法,可信权威:1、输入系数λ,输出系统参数;2、运行随机数生成算法;3、选择一种抗碰撞哈希函数,计算哈希值;4、运行指纹码生成算法Gen<sub>FC</sub>;5、计算双线性对、求幂运算;6、为用户分配指纹码,指定属性集合S;7、运行随机数生成算法、乘法和求幂运算;8、在用户私钥中嵌入指纹码。数据持有者:9、进行AES数据加密;10、生成访问控制矩阵;11、运行属性基加密算法Encapsulate,对AES会话密钥加密;12、运行双线性对和乘、除法计算,得到会话密钥;数据使用者:13、运行AES数据解密算法;可信权威:1*、寻找适应性码字;2*、计算p<sub>j</sub>和Z;3*、计算权值和,输出集合C。
申请公布号 CN104168108B 申请公布日期 2017.04.05
申请号 CN201410362945.8 申请日期 2014.07.28
申请人 北京航空航天大学 发明人 伍前红;邓桦;周云雅;刘建伟;秦波
分类号 H04L9/06(2006.01)I;H04L9/32(2006.01)I;H04L29/08(2006.01)I;G06F21/32(2013.01)I 主分类号 H04L9/06(2006.01)I
代理机构 北京慧泉知识产权代理有限公司 11232 代理人 王顺荣;唐爱华
主权项 一种泄露密钥可追踪的属性基混合加密方法,其特征在于:其作法如下:步骤一:系统初始化步骤:步骤1:可信权威即TA输入系统安全参数λ,运行算法<img file="FDA0001160846420000011.GIF" wi="145" he="63" />输出两个阶数为素数p的群<img file="FDA0001160846420000012.GIF" wi="147" he="61" />和一个双线性映射运算e:<img file="FDA0001160846420000013.GIF" wi="285" he="57" />步骤2:可信权威接下来运行随机数生成算法,随机选择<img file="FDA0001160846420000014.GIF" wi="43" he="53" />群中的某个生成元g,以及Z<sub>p</sub>域中的两个元素a,α;步骤3:可信权威选择一种抗碰撞哈希函数H(·),该函数满足抗碰撞哈希函数的所有特性,输入为任意长度的0、1字符串,输出为映射到<img file="FDA0001160846420000015.GIF" wi="46" he="46" />群中的某一元素;步骤4:可信权威运行指纹码生成算法Gen<sub>FC</sub>,输入整数n和L,整数n表示将要生成的指纹码集合Γ中元素的个数,L表示集合Γ中每个指纹码的长度;算法Gen<sub>FC</sub>输出指纹码集合Γ={ω<sup>(1)</sup>,...,ω<sup>(n)</sup>},其中每个码字的长度为L;步骤5:可信权威经过一次双线性对运算和两次指数运算得到公钥为:PK=(g,g<sup>a</sup>,e(g,g)<sup>α</sup>,H(·))经过一次指数运算得到主密钥为:MSK=g<sup>α</sup>;步骤二:用户录入步骤:步骤6:对于请求加入系统的用户,由可信权威为其分配集合Γ中的某个指纹码ω(ω∈Γ),并根据用户身份条件指定属于该用户的属性集合S;步骤7:可信权威输入主密钥MSK=g<sup>α</sup>,运行随机数生成算法,随机选择Z<sub>p</sub>域中的某个元素r,运行两次指数和一次乘法运算,得到:K<sub>0</sub>=g<sup>α</sup>g<sup>ar</sup>和K<sub>1</sub>=g<sup>r</sup>;步骤8:可信权威输入该用户属性集合S和指纹码ω,对属性集合S中的所有属性x,从1到l,进行级联、哈希函数和指数运算,得到:<maths num="0001"><math><![CDATA[<mfenced open = "" close = ""><mtable><mtr><mtd><mrow><mo>{</mo><msub><mi>D</mi><mrow><mi>x</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>=</mo><mi>H</mi><msup><mrow><mo>(</mo><mi>x</mi><mo>|</mo><mo>|</mo><mi>j</mi><mo>|</mo><mo>|</mo><msub><mi>&omega;</mi><mi>j</mi></msub><mo>)</mo></mrow><mi>r</mi></msup><mo>}</mo></mrow></mtd><mtd><mrow><mo>&ForAll;</mo><mi>x</mi><mo>&Element;</mo><mi>S</mi><mo>,</mo><mi>j</mi><mo>=</mo><mn>1</mn><mo>,</mo><mo>...</mo><mo>,</mo><mi>L</mi></mrow></mtd></mtr></mtable></mfenced>]]></math><img file="FDA0001160846420000021.GIF" wi="821" he="70" /></maths>用户最终分配到的私钥为:<maths num="0002"><math><![CDATA[<mrow><mi>S</mi><mi>K</mi><mo>=</mo><mrow><mo>(</mo><msub><mi>K</mi><mn>0</mn></msub><mo>,</mo><msub><mi>K</mi><mn>1</mn></msub><mo>,</mo><msub><mrow><mo>{</mo><msub><mi>D</mi><mrow><mi>x</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>}</mo></mrow><mrow><mo>&ForAll;</mo><mi>x</mi><mo>&Element;</mo><mi>S</mi><mo>,</mo><mi>j</mi><mo>=</mo><mn>1</mn><mo>,</mo><mo>...</mo><mo>,</mo><mi>L</mi></mrow></msub><mo>)</mo></mrow><mo>;</mo></mrow>]]></math><img file="FDA0001160846420000022.GIF" wi="622" he="78" /></maths>其中,该级联运算“||”表示字符串x,j,ω<sub>j</sub>首尾相接;步骤三:文档建立步骤:步骤9:数据持有者即Data Owner首先运行随机数生成算法,随机选择<img file="FDA0001160846420000028.GIF" wi="59" he="56" />群中的某一元素M作为对称加密的会话密钥;使用会话密钥M对文档进行AES数据加密,加密后的密文CT上传到云端存储器存储;步骤10:数据持有者根据自己的安全需求,制定相应的访问控制策略,该策略由用户属性表示,例如“(属性1AND属性2)OR属性3”,根据访问控制策略后,生成对应的访问控制矩阵(A,ρ),A表示l行n列的矩阵,ρ表示能将矩阵A的一行映射到访问控制策略中的某一属性的映射;步骤11:数据持有者输入公钥PK、访问控制矩阵(A,ρ)和待加密的会话密钥M后,为确保泄露的用户私钥能被追踪到,数据持有者首先随机选择[1,L]区间的某一整数j,对于0和1分别运行属性基加密算法Encapsulate:<maths num="0003"><math><![CDATA[<mfenced open = "{" close = ""><mtable><mtr><mtd><mrow><msub><mi>Hdr</mi><mrow><mi>j</mi><mo>,</mo><mn>0</mn></mrow></msub><mo>&LeftArrow;</mo><mi>E</mi><mi>n</mi><mi>c</mi><mi>a</mi><mi>p</mi><mi>s</mi><mi>u</mi><mi>l</mi><mi>a</mi><mi>t</mi><mi>e</mi><mrow><mo>(</mo><mi>P</mi><mi>K</mi><mo>,</mo><mi>M</mi><mo>,</mo><mo>(</mo><mrow><mi>A</mi><mo>,</mo><mi>&rho;</mi></mrow><mo>)</mo><mo>,</mo><mo>(</mo><mrow><mi>j</mi><mo>,</mo><mn>0</mn></mrow><mo>)</mo><mo>)</mo></mrow></mrow></mtd></mtr><mtr><mtd><mrow><msub><mi>Hdr</mi><mrow><mi>j</mi><mo>,</mo><mn>1</mn></mrow></msub><mo>&LeftArrow;</mo><mi>E</mi><mi>n</mi><mi>c</mi><mi>a</mi><mi>p</mi><mi>s</mi><mi>u</mi><mi>l</mi><mi>a</mi><mi>t</mi><mi>e</mi><mrow><mo>(</mo><mi>P</mi><mi>K</mi><mo>,</mo><mi>M</mi><mo>,</mo><mo>(</mo><mrow><mi>A</mi><mo>,</mo><mi>&rho;</mi></mrow><mo>)</mo><mo>,</mo><mo>(</mo><mrow><mi>j</mi><mo>,</mo><mn>1</mn></mrow><mo>)</mo><mo>)</mo></mrow></mrow></mtd></mtr></mtable></mfenced>]]></math><img file="FDA0001160846420000023.GIF" wi="894" he="142" /></maths>Encapsulate算法的运行如下:首先,数据持有者选择随机的向量<img file="FDA0001160846420000024.GIF" wi="417" he="78" />向量中的s为解密时,数据使用者需要恢复的指数;其他元素υ<sub>2</sub>,…,υ<sub>n</sub>是从Z<sub>p</sub>域中随机选取的,将矩阵A的每一行作为行向量<img file="FDA0001160846420000025.GIF" wi="50" he="78" />与向量<img file="FDA0001160846420000026.GIF" wi="32" he="63" />进行内积运算,得到λ<sub>1</sub>,λ<sub>2</sub>,…,λ<sub>l</sub>:<maths num="0004"><math><![CDATA[<mrow><msub><mi>&lambda;</mi><mi>i</mi></msub><mo>=</mo><mover><msub><mi>A</mi><mi>i</mi></msub><mo>&RightArrow;</mo></mover><mo>&CenterDot;</mo><mover><mi>&upsi;</mi><mo>&RightArrow;</mo></mover><mo>,</mo><mrow><mo>(</mo><mi>i</mi><mo>=</mo><mn>1</mn><mo>,</mo><mo>...</mo><mo>,</mo><mi>l</mi><mo>)</mo></mrow></mrow>]]></math><img file="FDA0001160846420000027.GIF" wi="406" he="71" /></maths>接下来,Encapsulate算法对矩阵A中的每一行i进行ρ(·)映射,得到对应的属性字符串ρ(i)后与j和0、1字符级联;最后分别计算其抗碰撞哈希函数的值:<maths num="0005"><math><![CDATA[<mfenced open = "{" close = ""><mtable><mtr><mtd><mrow><mi>H</mi><mrow><mo>(</mo><mi>&rho;</mi><mo>(</mo><mi>i</mi><mo>)</mo></mrow><mo>|</mo><mo>|</mo><mi>j</mi><mo>|</mo><mo>|</mo><mn>0</mn><mo>)</mo></mrow></mtd></mtr><mtr><mtd><mrow><mi>H</mi><mrow><mo>(</mo><mi>&rho;</mi><mo>(</mo><mi>i</mi><mo>)</mo></mrow><mo>|</mo><mo>|</mo><mi>j</mi><mo>|</mo><mo>|</mo><mn>1</mn><mo>)</mo></mrow></mtd></mtr></mtable></mfenced>]]></math><img file="FDA0001160846420000031.GIF" wi="310" he="135" /></maths>最后,经过(2+2l)次指数和(1+2l)次乘法运算,得到Encapsulate算法的结果:C=Me(g,g)<sup>αs</sup>,C<sub>0</sub>=g<sup>s</sup>,<maths num="0006"><math><![CDATA[<mrow><msub><mi>C</mi><mn>1</mn></msub><mo>=</mo><msup><mi>g</mi><mrow><msub><mi>a&lambda;</mi><mn>1</mn></msub></mrow></msup><mi>H</mi><mrow><mo>(</mo><mi>&rho;</mi><mo>(</mo><mn>1</mn><mo>)</mo><mo>|</mo><mo>|</mo><mi>j</mi><mo>|</mo><mo>|</mo><mn>0</mn><mo>)</mo></mrow><mo>,</mo><msub><mi>C</mi><mn>2</mn></msub><mo>=</mo><msup><mi>g</mi><mrow><msub><mi>a&lambda;</mi><mn>2</mn></msub></mrow></msup><mi>H</mi><mrow><mo>(</mo><mi>&rho;</mi><mo>(</mo><mn>2</mn><mo>)</mo><mo>|</mo><mo>|</mo><mi>j</mi><mo>|</mo><mo>|</mo><mn>0</mn><mo>)</mo></mrow><mo>,</mo><mo>...</mo><mo>,</mo><msub><mi>C</mi><mi>l</mi></msub><mo>=</mo><msup><mi>g</mi><mrow><msub><mi>a&lambda;</mi><mi>l</mi></msub></mrow></msup><mi>H</mi><mrow><mo>(</mo><mi>&rho;</mi><mo>(</mo><mi>l</mi><mo>)</mo><mo>|</mo><mo>|</mo><mi>j</mi><mo>|</mo><mo>|</mo><mn>0</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0001160846420000032.GIF" wi="1613" he="78" /></maths><maths num="0007"><math><![CDATA[<mrow><msubsup><mi>C</mi><mn>1</mn><mo>&prime;</mo></msubsup><mo>=</mo><msup><mi>g</mi><mrow><msub><mi>a&lambda;</mi><mn>1</mn></msub></mrow></msup><mi>H</mi><mrow><mo>(</mo><mi>&rho;</mi><mo>(</mo><mn>1</mn><mo>)</mo><mo>|</mo><mo>|</mo><mi>j</mi><mo>|</mo><mo>|</mo><mn>1</mn><mo>)</mo></mrow><mo>,</mo><msubsup><mi>C</mi><mn>2</mn><mo>&prime;</mo></msubsup><mo>=</mo><msup><mi>g</mi><mrow><msub><mi>a&lambda;</mi><mn>2</mn></msub></mrow></msup><mi>H</mi><mrow><mo>(</mo><mi>&rho;</mi><mo>(</mo><mn>2</mn><mo>)</mo><mo>|</mo><mo>|</mo><mi>j</mi><mo>|</mo><mo>|</mo><mn>1</mn><mo>)</mo></mrow><mo>,</mo><mo>...</mo><mo>,</mo><msubsup><mi>C</mi><mi>l</mi><mo>&prime;</mo></msubsup><mo>=</mo><msup><mi>g</mi><mrow><msub><mi>a&lambda;</mi><mn>1</mn></msub></mrow></msup><mi>H</mi><mrow><mo>(</mo><mi>&rho;</mi><mo>(</mo><mi>l</mi><mo>)</mo><mo>|</mo><mo>|</mo><mi>j</mi><mo>|</mo><mo>|</mo><mn>1</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0001160846420000033.GIF" wi="1598" he="79" /></maths>记为:<maths num="0008"><math><![CDATA[<mfenced open = "{" close = ""><mtable><mtr><mtd><mrow><msub><mi>Hdr</mi><mrow><mi>j</mi><mo>,</mo><mn>0</mn></mrow></msub><mo>=</mo><mrow><mo>(</mo><mi>C</mi><mo>,</mo><msub><mi>C</mi><mn>0</mn></msub><mo>,</mo><mo>{</mo><msub><mi>C</mi><mn>1</mn></msub><mo>,</mo><msub><mi>C</mi><mn>2</mn></msub><mo>,</mo><mo>...</mo><mo>,</mo><msub><mi>C</mi><mi>l</mi></msub><mo>}</mo><mo>)</mo></mrow></mrow></mtd></mtr><mtr><mtd><mrow><msub><mi>Hdr</mi><mrow><mi>j</mi><mo>,</mo><mn>1</mn></mrow></msub><mo>=</mo><mrow><mo>(</mo><mi>C</mi><mo>,</mo><msub><mi>C</mi><mn>0</mn></msub><mo>,</mo><mo>{</mo><msup><msub><mi>C</mi><mn>1</mn></msub><mo>&prime;</mo></msup><mo>,</mo><msup><msub><mi>C</mi><mn>2</mn></msub><mo>&prime;</mo></msup><mo>,</mo><mo>...</mo><mo>,</mo><msup><msub><mi>C</mi><mi>l</mi></msub><mo>&prime;</mo></msup><mo>}</mo><mo>)</mo></mrow></mrow></mtd></mtr></mtable></mfenced>]]></math><img file="FDA0001160846420000034.GIF" wi="637" he="142" /></maths>最终M经Encapsulate算法加密后的密文表示为:Hdr=(j,Hdr<sub>j,0</sub>,Hdr<sub>j,1</sub>);步骤四:文档访问步骤:定义集合I(I={i|ρ(i)∈S}),表示用户属性集合S中所有属性ρ(i)∈S通过映射ρ(·),对应的访问控制矩阵A的行标i的集合;若用户的属性集合S中的属性满足数据持有者加密M时制定的访问控制策略,则一定能找到常数w<sub>i</sub>∈Z<sub>p</sub>,按照下式:<maths num="0009"><math><![CDATA[<mrow><munder><mo>&Sigma;</mo><mrow><mi>i</mi><mo>&Element;</mo><mi>I</mi></mrow></munder><msub><mi>w</mi><mi>i</mi></msub><msub><mi>&lambda;</mi><mi>i</mi></msub><mo>=</mo><mi>s</mi></mrow>]]></math><img file="FDA0001160846420000035.GIF" wi="219" he="102" /></maths>有效恢复出指数s;步骤12:在这一步骤中,数据的使用者即Data Consumer从云端存储器下载需要访问的加密文件CT和Hdr;从步骤11的输出可知,消息Hdr由三部分组成;数据使用用户首先查看自身指纹码的第j位:对于指纹码的第j位是0的情况,属性基解密算法的输入为Hdr的第二部分Hdr<sub>j,0</sub>和该数据使用者的用户私钥SK;对于第j位是1的情况,属性基解密算法的输入为Hdr的第三部分Hdr<sub>j,1</sub>和该数据使用者的用户私钥SK;第j位是0时属性基解密算法按下式运行双线性对和乘、除法计算:<maths num="0010"><math><![CDATA[<mfenced open = "" close = ""><mtable><mtr><mtd><mrow><msup><mi>M</mi><mo>&prime;</mo></msup><mo>=</mo><mfrac><mrow><mi>e</mi><mrow><mo>(</mo><msub><mi>C</mi><mn>0</mn></msub><mo>,</mo><msub><mi>K</mi><mn>0</mn></msub><mo>)</mo></mrow></mrow><mrow><msub><mo>&Pi;</mo><mrow><mi>&rho;</mi><mrow><mo>(</mo><mi>i</mi><mo>)</mo></mrow><mo>&Element;</mo><mi>S</mi></mrow></msub><msup><mrow><mo>(</mo><mi>e</mi><mo>(</mo><mrow><msub><mi>C</mi><mi>i</mi></msub><mo>,</mo><msub><mi>K</mi><mn>1</mn></msub></mrow><mo>)</mo><mo>&CenterDot;</mo><mi>e</mi><mo>(</mo><mrow><msub><mi>C</mi><mn>0</mn></msub><mo>,</mo><msub><mi>D</mi><mrow><mi>&rho;</mi><mrow><mo>(</mo><mi>i</mi><mo>)</mo></mrow><mo>,</mo><mi>j</mi></mrow></msub></mrow><mo>)</mo><mo>)</mo></mrow><msub><mi>w</mi><mi>i</mi></msub></msup></mrow></mfrac></mrow></mtd></mtr><mtr><mtd><mrow><mo>=</mo><mfrac><mrow><mi>e</mi><mrow><mo>(</mo><msup><mi>g</mi><mi>s</mi></msup><mo>,</mo><msup><mi>g</mi><mi>&alpha;</mi></msup><mo>)</mo></mrow><mi>e</mi><mrow><mo>(</mo><msup><mi>g</mi><mi>s</mi></msup><mo>,</mo><msup><mi>g</mi><mrow><mi>a</mi><mi>r</mi></mrow></msup><mo>)</mo></mrow></mrow><mrow><mi>e</mi><msup><mrow><mo>(</mo><msup><mi>g</mi><mi>a</mi></msup><mo>,</mo><msup><mi>g</mi><mi>r</mi></msup><mo>)</mo></mrow><mrow><msub><mo>&Sigma;</mo><mrow><mi>&rho;</mi><mrow><mo>(</mo><mi>i</mi><mo>)</mo></mrow><mo>&Element;</mo><mi>S</mi></mrow></msub><msub><mi>w</mi><mi>i</mi></msub><msub><mi>&lambda;</mi><mi>i</mi></msub></mrow></msup></mrow></mfrac><mo>=</mo><mi>e</mi><msup><mrow><mo>(</mo><mi>g</mi><mo>,</mo><mi>g</mi><mo>)</mo></mrow><mrow><mi>&alpha;</mi><mi>s</mi></mrow></msup></mrow></mtd></mtr></mtable></mfenced>]]></math><img file="FDA0001160846420000041.GIF" wi="798" he="343" /></maths>第j位是1时属性基解密算法按下式运行双线性对和乘、除法计算:<maths num="0011"><math><![CDATA[<mfenced open = "" close = ""><mtable><mtr><mtd><mrow><msup><mi>M</mi><mo>&prime;</mo></msup><mo>=</mo><mfrac><mrow><mi>e</mi><mrow><mo>(</mo><msub><mi>C</mi><mn>0</mn></msub><mo>,</mo><msub><mi>K</mi><mn>0</mn></msub><mo>)</mo></mrow></mrow><mrow><msub><mo>&Pi;</mo><mrow><mi>&rho;</mi><mrow><mo>(</mo><mi>i</mi><mo>)</mo></mrow><mo>&Element;</mo><mi>S</mi></mrow></msub><msup><mrow><mo>(</mo><mi>e</mi><mo>(</mo><mrow><msup><msub><mi>C</mi><mi>i</mi></msub><mo>&prime;</mo></msup><mo>,</mo><msub><mi>K</mi><mn>1</mn></msub></mrow><mo>)</mo><mo>&CenterDot;</mo><mi>e</mi><mo>(</mo><mrow><msub><mi>C</mi><mn>0</mn></msub><mo>,</mo><msub><mi>D</mi><mrow><mi>&rho;</mi><mrow><mo>(</mo><mi>i</mi><mo>)</mo></mrow><mo>,</mo><mi>j</mi></mrow></msub></mrow><mo>)</mo><mo>)</mo></mrow><msub><mi>w</mi><mi>i</mi></msub></msup></mrow></mfrac></mrow></mtd></mtr><mtr><mtd><mrow><mo>=</mo><mfrac><mrow><mi>e</mi><mrow><mo>(</mo><msup><mi>g</mi><mi>s</mi></msup><mo>,</mo><msup><mi>g</mi><mi>&alpha;</mi></msup><mo>)</mo></mrow><mi>e</mi><mrow><mo>(</mo><msup><mi>g</mi><mi>s</mi></msup><mo>,</mo><msup><mi>g</mi><mrow><mi>a</mi><mi>r</mi></mrow></msup><mo>)</mo></mrow></mrow><mrow><mi>e</mi><msup><mrow><mo>(</mo><msup><mi>g</mi><mi>a</mi></msup><mo>,</mo><msup><mi>g</mi><mi>r</mi></msup><mo>)</mo></mrow><mrow><msub><mo>&Sigma;</mo><mrow><mi>&rho;</mi><mrow><mo>(</mo><mi>i</mi><mo>)</mo></mrow><mo>&Element;</mo><mi>S</mi></mrow></msub><msub><mi>w</mi><mi>i</mi></msub><msub><mi>&lambda;</mi><mi>i</mi></msub></mrow></msup></mrow></mfrac><mo>=</mo><mi>e</mi><msup><mrow><mo>(</mo><mi>g</mi><mo>,</mo><mi>g</mi><mo>)</mo></mrow><mrow><mi>&alpha;</mi><mi>s</mi></mrow></msup></mrow></mtd></mtr></mtable></mfenced>]]></math><img file="FDA0001160846420000042.GIF" wi="814" he="343" /></maths>经最后一步除法运算,得到会话密钥M:<maths num="0012"><math><![CDATA[<mrow><mi>M</mi><mo>=</mo><mi>C</mi><mo>/</mo><msup><mi>M</mi><mo>&prime;</mo></msup><mo>=</mo><mfrac><mrow><mi>M</mi><mi>e</mi><msup><mrow><mo>(</mo><mi>g</mi><mo>,</mo><mi>g</mi><mo>)</mo></mrow><mrow><mi>&alpha;</mi><mi>s</mi></mrow></msup></mrow><mrow><mi>e</mi><msup><mrow><mo>(</mo><mi>g</mi><mo>,</mo><mi>g</mi><mo>)</mo></mrow><mrow><mi>&alpha;</mi><mi>s</mi></mrow></msup></mrow></mfrac><mo>;</mo></mrow>]]></math><img file="FDA0001160846420000043.GIF" wi="515" he="142" /></maths>步骤13:数据使用者使用会话密钥M,对加密文件CT运行AES数据解密算法,即能访问所需的明文文件;步骤五:数字取证步骤:该数字取证步骤只在发生用户私钥泄露的情况时才运行,共分3步执行:步骤14:可信权威首先寻找被盗版解码器即PD用来伪造用户私钥的适应性码字:ω<sup>*</sup>;对于j从1到L,每次选择<img file="FDA0001160846420000044.GIF" wi="62" he="55" />群中两个不等的消息<img file="FDA0001160846420000045.GIF" wi="323" he="71" />分别运行Encapsulate算法得到输出:<maths num="0013"><math><![CDATA[<mfenced open = "{" close = ""><mtable><mtr><mtd><mrow><msub><mi>Hdr</mi><mrow><mi>j</mi><mo>,</mo><mn>0</mn></mrow></msub><mo>&LeftArrow;</mo><mi>E</mi><mi>n</mi><mi>c</mi><mi>a</mi><mi>p</mi><mi>s</mi><mi>u</mi><mi>l</mi><mi>a</mi><mi>t</mi><mi>e</mi><mrow><mo>(</mo><mi>P</mi><mi>K</mi><mo>,</mo><msub><mi>M</mi><mi>j</mi></msub><mo>,</mo><mo>(</mo><mrow><mi>A</mi><mo>,</mo><mi>&rho;</mi></mrow><mo>)</mo><mo>,</mo><mo>(</mo><mrow><mi>j</mi><mo>,</mo><mn>0</mn></mrow><mo>)</mo><mo>)</mo></mrow></mrow></mtd></mtr><mtr><mtd><mrow><msub><mi>Hdr</mi><mrow><mi>j</mi><mo>,</mo><mn>1</mn></mrow></msub><mo>&LeftArrow;</mo><mi>E</mi><mi>n</mi><mi>c</mi><mi>a</mi><mi>p</mi><mi>s</mi><mi>u</mi><mi>l</mi><mi>a</mi><mi>t</mi><mi>e</mi><mrow><mo>(</mo><mi>P</mi><mi>K</mi><mo>,</mo><msup><msub><mi>M</mi><mi>j</mi></msub><mo>&prime;</mo></msup><mo>,</mo><mo>(</mo><mrow><mi>A</mi><mo>,</mo><mi>&rho;</mi></mrow><mo>)</mo><mo>,</mo><mo>(</mo><mrow><mi>j</mi><mo>,</mo><mn>1</mn></mrow><mo>)</mo><mo>)</mo></mrow></mrow></mtd></mtr></mtable></mfenced>]]></math><img file="FDA0001160846420000046.GIF" wi="910" he="144" /></maths>将得到的结果作为盗版解码器的输入,该盗版解密器是根据泄露的用户私钥构造的,具有伪造用户私钥、解密数据的功能,输出为解密后的消息M<sub>j</sub><sup>*</sup>,若输出的结果M<sub>j</sub><sup>*</sup>与M<sub>j</sub>相等,则判断适应性码字ω<sup>*</sup>的第j位为0,即ω<sub>j</sub><sup>*</sup>=0;否则,判断为1;j经1遍历到L后,能得到被盗版解码器即PD用来伪造用户私钥的适应性码字:ω<sup>*</sup>=ω<sub>1</sub><sup>*</sup>ω<sub>2</sub><sup>*</sup>…ω<sub>L</sub><sup>*</sup>;步骤15:首先,可信权威需要指定追踪算法Tra<sub>FC</sub>的容错概率ε(表示Tra<sub>FC</sub>算法追踪到的最后结果包含某个无辜用户或是追踪无果的概率),下式中的t表示该指纹码可以抗t人合谋攻击,即超过t人的合谋,该算法便失去了有效性;故该算法需在运行追踪算法之前确定泄密用户的总数不多于t;接下来,分别计算k、k'和阈值Z的值:<img file="FDA0001160846420000051.GIF" wi="1214" he="101" />在得到k'的值后,随机选择区间<img file="FDA0001160846420000052.GIF" wi="215" he="103" />之间的某一随机值<img file="FDA0001160846420000053.GIF" wi="323" he="103" />并计算p<sub>j</sub>=sin<sup>2</sup>r<sub>j</sub>,j从1遍历到L;步骤16:将上一步得到的适应性码字ω<sup>*</sup>=ω<sub>1</sub><sup>*</sup>ω<sub>2</sub><sup>*</sup>…ω<sub>L</sub><sup>*</sup>,分别与指纹码集合Γ={ω<sup>(1)</sup>,...,ω<sup>(n)</sup>}中的所有码字进行对比,按照下式计算每次比较对应码字位的权值:<maths num="0014"><math><![CDATA[<mrow><msubsup><mi>S</mi><mi>i</mi><mi>j</mi></msubsup><mo>=</mo><mfenced open = "{" close = "}"><mtable><mtr><mtd><mrow><mi>&sigma;</mi><mrow><mo>(</mo><msub><mi>p</mi><mi>j</mi></msub><mo>)</mo></mrow></mrow></mtd><mtd><mrow><msup><msub><mi>&omega;</mi><mi>j</mi></msub><mo>*</mo></msup><mo>=</mo><mn>1</mn><mo>,</mo><msup><msub><mi>&omega;</mi><mi>j</mi></msub><mi>i</mi></msup><mo>=</mo><mn>1</mn></mrow></mtd></mtr><mtr><mtd><mrow><mo>-</mo><mi>&sigma;</mi><mrow><mo>(</mo><mn>1</mn><mo>-</mo><msub><mi>p</mi><mi>j</mi></msub><mo>)</mo></mrow></mrow></mtd><mtd><mrow><msup><msub><mi>&omega;</mi><mi>j</mi></msub><mo>*</mo></msup><mo>=</mo><mn>1</mn><mo>,</mo><msup><msub><mi>&omega;</mi><mi>j</mi></msub><mi>i</mi></msup><mo>=</mo><mn>0</mn></mrow></mtd></mtr><mtr><mtd><mrow><mo>-</mo><mi>&sigma;</mi><mrow><mo>(</mo><msub><mi>p</mi><mi>j</mi></msub><mo>)</mo></mrow></mrow></mtd><mtd><mrow><msup><msub><mi>&omega;</mi><mi>j</mi></msub><mo>*</mo></msup><mo>=</mo><mn>0</mn><mo>,</mo><msup><msub><mi>&omega;</mi><mi>j</mi></msub><mi>i</mi></msup><mo>=</mo><mn>0</mn></mrow></mtd></mtr><mtr><mtd><mrow><mi>&sigma;</mi><mrow><mo>(</mo><mn>1</mn><mo>-</mo><msub><mi>p</mi><mi>j</mi></msub><mo>)</mo></mrow></mrow></mtd><mtd><mrow><msup><msub><mi>&omega;</mi><mi>j</mi></msub><mo>*</mo></msup><mo>=</mo><mn>1</mn><mo>,</mo><msup><msub><mi>&omega;</mi><mi>j</mi></msub><mi>i</mi></msup><mo>=</mo><mn>0</mn></mrow></mtd></mtr></mtable></mfenced><mo>,</mo><mi>i</mi><mo>=</mo><mn>1</mn><mo>,</mo><mo>...</mo><mo>,</mo><mi>n</mi><mo>;</mo><mi>j</mi><mo>=</mo><mn>1</mn><mo>,</mo><mo>...</mo><mo>,</mo><mi>L</mi></mrow>]]></math><img file="FDA0001160846420000054.GIF" wi="1174" he="310" /></maths>其中,<img file="FDA0001160846420000055.GIF" wi="414" he="80" />对于每个用户,计算所有位的权值之和:<img file="FDA0001160846420000056.GIF" wi="287" he="78" />并与阈值Z比较,所有权值之和高于Z的用户,其系统标号记入集合C中,可信权威输出追踪结果<img file="FDA0001160846420000057.GIF" wi="294" he="55" />
地址 100191 北京市海淀区学院路37号