发明名称 基于双重困难的数据加密方法
摘要 可验证的公开密钥加密方法,包括初始化、加密、解密的步骤。在安全上,它同时具有双重困难度的数学假设,分别为分解因数与Diffie-Hellman问题,换句话说,如果要破解这种加密方法,攻击者必需同时解决这两种计算上的数学难题。这加密方法利用部分暗门单向函数的概念所设计出来的,它具有语意安全能抵抗选择明文攻击与选择密文攻击,具有良好的实用价值。
申请公布号 CN105049208A 申请公布日期 2015.11.11
申请号 CN201510331229.8 申请日期 2015.06.15
申请人 浙江金大科技有限公司;浙江工商大学 发明人 赵毅;潘红涛;刘东升;郭飞鹏;王蓓;周怡
分类号 H04L9/32(2006.01)I;H04L9/08(2006.01)I 主分类号 H04L9/32(2006.01)I
代理机构 杭州天正专利事务所有限公司 33201 代理人 王兵;黄美娟
主权项 基于双重困难的数据加密方法,包括如下步骤:步骤1,初始化;首先选择一个安全参数L,将L位元的参数输入生成函数F(·)生成函数F(1<sup>L</sup>)产生Enc和Dec两个算法,分别为加密算法与解密算法,所使用的参数生成方式如下:Step11令n为一个Williams整数,n=p×q,其中p=3 mod 8,q=7 mod 8,且p=2p′+1,q=2q′+1,长度为<img file="FDA0000738217900000011.GIF" wi="145" he="107" />其中p、q、p′和q′均为大质数,以|n|=k表示n的位元长度;Step12令G=&lt;g&gt;是乘法群<img file="FDA0000738217900000012.GIF" wi="64" he="58" />最大的循环子群,g为循环子群的生成元,G的秩λ(n)=lcm(p‑1,q‑1)=2p′q′为Carmichael′s函数,<img file="FDA0000738217900000013.GIF" wi="57" he="58" />的定义如下;Step13选择一个整数<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><mi>x</mi><msub><mo>&Element;</mo><mi>R</mi></msub><msubsup><mi>Z</mi><mi>n</mi><mo>*</mo></msubsup><mo>=</mo><mo>{</mo><mn>0</mn><mo>&lt;</mo><mi>x</mi><mo>&lt;</mo><mi>n</mi><mo>|</mo><mi>g</mi><mi>c</mi><mi>d</mi><mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>n</mi><mo>)</mo></mrow><mo>=</mo><mn>1</mn><mo>}</mo></mrow>]]></math><img file="FDA0000738217900000014.GIF" wi="950" he="72" /></maths>当密钥,并计算对应的公钥y=g<sup>x</sup>mod n,0<x<n;Step14设置公开参数r<sub>1</sub>、r<sub>2</sub>、r<sub>3</sub>、r<sub>4</sub>,令r<sub>1</sub>=1∈Z<sub>(1,1)</sub>、r<sub>2</sub>=‑1∈Z<sub>(‑1,‑1)</sub>、r<sub>3</sub>=2∈Z<sub>(‑1,1)</sub>和r<sub>4</sub>=‑2∈Z<sub>(1,‑1)</sub>,Z<sub>(1,1)</sub>、Z<sub>(‑1,‑1)</sub>、Z<sub>(‑1,1)</sub>、Z<sub>(1,‑1)</sub>为<img file="FDA0000738217900000015.GIF" wi="64" he="58" />分成的四个等价类集,定义如下:<maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><msub><mi>Z</mi><mrow><mo>(</mo><mrow><mn>1</mn><mo>,</mo><mn>1</mn></mrow><mo>)</mo></mrow></msub><mo>=</mo><mo>{</mo><mi>x</mi><mo>&Element;</mo><msubsup><mi>Z</mi><mi>n</mi><mo>*</mo></msubsup><mo>|</mo><mfrac><mi>x</mi><mi>p</mi></mfrac><mo>=</mo><mn>1</mn><mo>,</mo><mfrac><mi>x</mi><mi>q</mi></mfrac><mo>=</mo><mn>1</mn><mo>}</mo></mrow>]]></math><img file="FDA0000738217900000016.GIF" wi="748" he="132" /></maths><maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><msub><mi>Z</mi><mrow><mo>(</mo><mo>-</mo><mn>1</mn><mo>,</mo><mo>-</mo><mn>1</mn><mo>)</mo></mrow></msub><mo>=</mo><mo>{</mo><mi>x</mi><mo>&Element;</mo><msubsup><mi>Z</mi><mi>n</mi><mo>*</mo></msubsup><mo>|</mo><mfrac><mi>x</mi><mi>p</mi></mfrac><mo>=</mo><mo>-</mo><mn>1</mn><mo>,</mo><mfrac><mi>x</mi><mi>q</mi></mfrac><mo>=</mo><mo>-</mo><mn>1</mn><mo>}</mo></mrow>]]></math><img file="FDA0000738217900000017.GIF" wi="896" he="131" /></maths><maths num="0004" id="cmaths0004"><math><![CDATA[<mrow><msub><mi>Z</mi><mrow><mo>(</mo><mo>-</mo><mn>1</mn><mo>,</mo><mn>1</mn><mo>)</mo></mrow></msub><mo>=</mo><mo>{</mo><mi>x</mi><mo>&Element;</mo><msubsup><mi>Z</mi><mi>n</mi><mo>*</mo></msubsup><mo>|</mo><mfrac><mi>x</mi><mi>p</mi></mfrac><mo>=</mo><mo>-</mo><mn>1</mn><mo>,</mo><mfrac><mi>x</mi><mi>q</mi></mfrac><mo>=</mo><mo>-</mo><mn>1</mn><mo>}</mo></mrow>]]></math><img file="FDA0000738217900000018.GIF" wi="822" he="131" /></maths><maths num="0005" id="cmaths0005"><math><![CDATA[<mrow><msub><mi>Z</mi><mrow><mo>(</mo><mn>1</mn><mo>,</mo><mo>-</mo><mn>1</mn><mo>)</mo></mrow></msub><mo>=</mo><mo>{</mo><mi>x</mi><mo>&Element;</mo><msubsup><mi>Z</mi><mi>n</mi><mo>*</mo></msubsup><mo>|</mo><mfrac><mi>x</mi><mi>p</mi></mfrac><mo>=</mo><mn>1</mn><mo>,</mo><mfrac><mi>x</mi><mi>q</mi></mfrac><mo>=</mo><mo>-</mo><mn>1</mn><mo>}</mo></mrow>]]></math><img file="FDA0000738217900000019.GIF" wi="822" he="131" /></maths>Step15公开参数(n,r<sub>1</sub>,r<sub>2</sub>,r<sub>3</sub>,r<sub>4</sub>)与公钥y,保留密钥x与参数(p,q);设加密算法里有一个Hash函数H<sub>1</sub>和一个生成函数H<sub>2</sub>,定义如下:<maths num="0006" id="cmaths0006"><math><![CDATA[<mrow><msub><mi>H</mi><mn>1</mn></msub><mo>:</mo><msup><mrow><mo>{</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo>}</mo></mrow><mrow><mi>k</mi><mo>+</mo><msub><mi>k</mi><mn>0</mn></msub></mrow></msup><mo>&RightArrow;</mo><msup><mrow><mo>{</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo>}</mo></mrow><mi>k</mi></msup></mrow>]]></math><img file="FDA0000738217900000021.GIF" wi="547" he="67" /></maths><maths num="0007" id="cmaths0007"><math><![CDATA[<mrow><msub><mi>H</mi><mn>2</mn></msub><mo>:</mo><msup><mrow><mo>{</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo>}</mo></mrow><mi>k</mi></msup><mo>&RightArrow;</mo><msup><mrow><mo>{</mo><mn>0</mn><mo>,</mo><mn>1</mn><mo>}</mo></mrow><mrow><mi>k</mi><mo>+</mo><msub><mi>k</mi><mn>0</mn></msub></mrow></msup></mrow>]]></math><img file="FDA0000738217900000022.GIF" wi="546" he="67" /></maths>这里k<sub>0</sub><k为一安全参数,接下来利用这些参数与两个函数进行明文的加解密运算;步骤2,加密;Step21利用Jacobi符号来检验明文m的信息,分成四种情况讨论并计算参数R的值:Case1如果<maths num="0008" id="cmaths0008"><math><![CDATA[<mrow><mi>J</mi><mrow><mo>(</mo><mfrac><mi>m</mi><mi>n</mi></mfrac><mo>)</mo></mrow><mo>=</mo><mn>1</mn><mi>a</mi><mi>n</mi><mi>d</mi><mn>0</mn><mo>&le;</mo><mi>m</mi><mo>&lt;</mo><mfrac><mi>n</mi><mn>2</mn></mfrac><mo>,</mo></mrow>]]></math><img file="FDA0000738217900000023.GIF" wi="656" he="101" /></maths>令R=r<sub>1</sub>m<sup>2</sup> mod nCase2如果<maths num="0009" id="cmaths0009"><math><![CDATA[<mrow><mi>J</mi><mrow><mo>(</mo><mfrac><mi>m</mi><mi>n</mi></mfrac><mo>)</mo></mrow><mo>=</mo><mn>1</mn><mi>a</mi><mi>n</mi><mi>d</mi><mfrac><mi>n</mi><mn>2</mn></mfrac><mo>&le;</mo><mi>m</mi><mo>&lt;</mo><mi>n</mi><mo>,</mo></mrow>]]></math><img file="FDA0000738217900000024.GIF" wi="663" he="101" /></maths>令R=r<sub>2</sub>m<sup>2</sup> mod nCase3如果<maths num="0010" id="cmaths0010"><math><![CDATA[<mrow><mi>J</mi><mrow><mo>(</mo><mfrac><mi>m</mi><mi>n</mi></mfrac><mo>)</mo></mrow><mo>=</mo><mo>-</mo><mn>1</mn><mi>a</mi><mi>n</mi><mi>d</mi><mn>0</mn><mo>&le;</mo><mi>m</mi><mo>&lt;</mo><mfrac><mi>n</mi><mn>2</mn></mfrac><mo>,</mo></mrow>]]></math><img file="FDA0000738217900000025.GIF" wi="695" he="101" /></maths>令R=r<sub>3</sub>m<sup>2</sup> mod nCase4如果<maths num="0011" id="cmaths0011"><math><![CDATA[<mrow><mi>J</mi><mrow><mo>(</mo><mfrac><mi>m</mi><mi>n</mi></mfrac><mo>)</mo></mrow><mo>=</mo><mo>-</mo><mn>1</mn><mi>a</mi><mi>n</mi><mi>d</mi><mfrac><mi>n</mi><mn>2</mn></mfrac><mo>&le;</mo><mi>m</mi><mo>&lt;</mo><mi>n</mi><mo>,</mo></mrow>]]></math><img file="FDA0000738217900000026.GIF" wi="709" he="101" /></maths>令R=r<sub>4</sub>m<sup>2</sup> mod nr<sub>1</sub>、r<sub>2</sub>、r<sub>3</sub>、r<sub>4</sub>为上述四个公开参数;Step22随机选取两个数v与s,<img file="FDA0000738217900000027.GIF" wi="225" he="68" />|v|字串长度为k,|s|字串长度为k<sub>0</sub>(k<sub>0</sub><k),两个数皆为安全参数;Step23计算参数d=H<sub>1</sub>(R||s);Step24计算a=g<sup>d</sup> mod n、b=y<sup>d</sup>·vmod n和<img file="FDA0000738217900000028.GIF" wi="505" he="59" />得到密文(a,b,c);步骤3,解密;Step31利用密钥x,计算随机参数v=a<sup>‑x</sup>b mod n;Step32计算检验参数<maths num="0012" id="cmaths0012"><math><![CDATA[<mrow><mi>M</mi><mo>=</mo><mi>R</mi><mo>|</mo><mo>|</mo><mi>s</mi><mo>=</mo><mi>c</mi><mo>&CirclePlus;</mo><msub><mi>H</mi><mn>2</mn></msub><mrow><mo>(</mo><mi>v</mi><mo>)</mo></mrow><mo>;</mo></mrow>]]></math><img file="FDA0000738217900000031.GIF" wi="584" he="59" /></maths>Step33验证<img file="FDA0000738217900000032.GIF" wi="277" he="78" />是否成立;如果成立,取M的前k位元得到R值;否则,密文(a,b,c)不合法;Step34解二次剩余方程式Z<sup>2</sup>=r<sup>‑1</sup>R mod n,参数r={r<sub>1</sub>,r<sub>2</sub>,r<sub>3</sub>,r<sub>4</sub>},得到四根z<sub>1</sub>,z<sub>2</sub>,z<sub>3</sub>,z<sub>4</sub>;Step35由参数r值来确定四根中的明文m。
地址 310003 浙江省杭州市下城区建国北路276号东联大厦14楼