发明名称 一种轮输出为布尔掩码的ZUC序列密码算法掩码防护方法
摘要 本发明公开了一种轮输出为布尔掩码的ZUC序列密码算法掩码防护方法,该方法包括:(1)选择需要掩码的轮数,初始化前N轮,分别与掩码m<sub>0,1</sub>=m<sub>1</sub>、m<sub>0,2</sub>=m<sub>2</sub>异或作为输入;(2)异或运算通过转换函数h(x,y)转化成加法运算;(3)加法运算通过转化函数为g(x,y)转化成异或运算;(4)移位及对应分别进行L<sub>1</sub>线性L<sub>2</sub>线性运算;(5)对左、右S盒进行运算形成新的S<sub>L</sub>′及S<sub>R</sub>′;(6)对于F函数的W输出运算。本申请的技术方案设计的掩码防护方法运算中每个节点所带的掩码值均不相同,每轮S盒输出的掩码值也不相同,可抵抗汉明重量和汉明距离的一阶分析,此外,二阶分析也无法找到任何可利用的泄漏点。
申请公布号 CN104852795A 申请公布日期 2015.08.19
申请号 CN201510221466.9 申请日期 2015.05.05
申请人 国家密码管理局商用密码检测中心 发明人 罗鹏;李大为;曹伟琼;张翌维;刘鹏飞
分类号 H04L9/00(2006.01)I;H04L9/06(2006.01)I 主分类号 H04L9/00(2006.01)I
代理机构 北京东正专利代理事务所(普通合伙) 11312 代理人 刘瑜冬
主权项 一种轮输出为布尔掩码的ZUC序列密码算法掩码防护方法,其特征在于,该方法包括如下步骤:(1)选择需要掩码的轮数,初始化前N轮,1≤N≤32,r∈{0,1,L,N‑1}为当前轮数,随机选取2个32位随机数m<sub>1</sub>、m<sub>2</sub>,每轮随机选取2个32位随机数m<sub>r,3</sub>、m<sub>r,4</sub>,在N轮中各不相同;若是第0轮,对于第1轮F函数的输入R<sub>1</sub>=0、R<sub>2</sub>=0,分别与掩码m<sub>0,1</sub>=m<sub>1</sub>、m<sub>0,2</sub>=m<sub>2</sub>异或作为输入;若是第r(r∈{1,L,N‑1})轮的R<sub>1</sub>、R<sub>2</sub>输入,无需再异或掩码值;(2)将<img file="FSA0000116357620000011.GIF" wi="170" he="58" />的异或运算通过转换函数h(x,y)转化成加法运算R<sub>1</sub>+m<sub>r,1</sub>,转化函数为h(x,y)定义为:<img file="FSA0000116357620000012.GIF" wi="403" he="51" />(3)R<sub>1</sub>+m<sub>r,1</sub>与X<sub>1</sub>‑m<sub>r,1</sub>+m<sub>r,3</sub>相加得R<sub>1</sub>+X<sub>1</sub>+m<sub>r,3</sub>,右边<img file="FSA0000116357620000013.GIF" wi="183" he="59" />与<img file="FSA0000116357620000014.GIF" wi="326" he="59" />异或得<img file="FSA0000116357620000015.GIF" wi="572" he="59" />再将已知的R<sub>1</sub>+X<sub>1</sub>+m<sub>r,3</sub>、m<sub>r,3</sub>中R<sub>1</sub>+X<sub>1</sub>+m<sub>r,3</sub>的加法运算通过转化函数g(x,y)转化成异或运算<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><mrow><mo>(</mo><msub><mi>X</mi><mn>1</mn></msub><mo>+</mo><msub><mi>R</mi><mn>1</mn></msub><mo>)</mo></mrow><mo>&CirclePlus;</mo><msub><mi>m</mi><mrow><mi>r</mi><mo>,</mo><mn>3</mn></mrow></msub><mo>=</mo><msub><mi>W</mi><mn>1</mn></msub><mo>&CirclePlus;</mo><msub><mi>m</mi><mrow><mi>r</mi><mo>,</mo><mn>3</mn></mrow></msub><mo>,</mo></mrow>]]></math><img file="FSA0000116357620000016.GIF" wi="571" he="83" /></maths>转换函数g(x,y)定义为:<maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><mi>x</mi><mo>&CirclePlus;</mo><mi>r</mi><mo>=</mo><mi>g</mi><mrow><mo>(</mo><mi>x</mi><mo>+</mo><mi>r</mi><mo>,</mo><mi>r</mi><mo>)</mo></mrow><mo>;</mo></mrow>]]></math><img file="FSA0000116357620000017.GIF" wi="389" he="83" /></maths>(4)通过移位后,左边的<img file="FSA0000116357620000018.GIF" wi="182" he="58" />及右边<img file="FSA0000116357620000019.GIF" wi="189" he="60" />变换为<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><mrow><mo>(</mo><msub><mi>W</mi><mrow><mn>1</mn><mo>,</mo><mi>L</mi></mrow></msub><mo>|</mo><mo>|</mo><msub><mi>W</mi><mrow><mn>2</mn><mo>,</mo><mi>H</mi></mrow></msub><mo>)</mo></mrow><mo>&CirclePlus;</mo><mrow><mo>(</mo><msub><mi>m</mi><mrow><mi>r</mi><mo>,</mo><mn>3</mn><mo>,</mo><mi>L</mi></mrow></msub><mo>|</mo><mo>|</mo><msub><mi>m</mi><mrow><mi>r</mi><mo>,</mo><mn>4</mn><mo>,</mo><mi>H</mi></mrow></msub><mo>)</mo></mrow><mo>,</mo><mrow><mo>(</mo><msub><mi>W</mi><mrow><mn>2</mn><mo>,</mo><mi>L</mi></mrow></msub><mo>|</mo><mo>|</mo><msub><mi>W</mi><mrow><mn>1</mn><mo>,</mo><mi>H</mi></mrow></msub><mo>)</mo></mrow><mo>&CirclePlus;</mo><mrow><mo>(</mo><msub><mi>m</mi><mrow><mi>r</mi><mo>,</mo><mn>4</mn><mo>,</mo><mi>L</mi></mrow></msub><mo>|</mo><mo>|</mo><msub><mi>m</mi><mrow><mi>r</mi><mo>,</mo><mn>3</mn><mo>,</mo><mi>H</mi></mrow></msub><mo>)</mo></mrow></mrow>]]></math><img file="FSA00001163576200000110.GIF" wi="1282" he="59" /></maths>在对应分别进行L<sub>1</sub>线性运算,左边转化成<img file="FSA00001163576200000111.GIF" wi="711" he="59" />L<sub>2</sub>线性运算,右边转化成<img file="FSA00001163576200000112.GIF" wi="765" he="58" />其中,L<sub>1</sub>(m<sub>r,3,L</sub>||m<sub>r,4,H</sub>)=(a<sub>0</sub>,a<sub>1</sub>,a<sub>2</sub>,a<sub>3</sub>),L<sub>2</sub>(m<sub>r,4,L</sub>||m<sub>r,3,H</sub>)=(b<sub>0</sub>,b<sub>1</sub>,b<sub>2</sub>,b<sub>3</sub>);(5)对左、右S盒进行运算形成新的S<sub>L</sub>′及S<sub>R</sub>′;运算方法是通过S盒预计算查表获得或通过公式在算法运算中通过S盒掩码计算获得;(6)对于F函数的W输出,对每1轮的X<sub>0</sub>加掩码防护得到<maths num="0004" id="cmaths0004"><math><![CDATA[<mrow><msub><mi>X</mi><mn>0</mn></msub><mo>&CirclePlus;</mo><msub><mi>m</mi><mrow><mi>r</mi><mo>+</mo><mn>1,1</mn></mrow></msub><mo>&CirclePlus;</mo><mrow><mo>(</mo><mo>-</mo><msub><mi>m</mi><mrow><mi>r</mi><mo>+</mo><mn>1,2</mn></mrow></msub><mo>)</mo></mrow><mo>,</mo></mrow>]]></math><img file="FSA00001163576200000113.GIF" wi="477" he="76" /></maths>则<maths num="0005" id="cmaths0005"><math><![CDATA[<mrow><msub><mi>R</mi><mn>1</mn></msub><mo>&CirclePlus;</mo><msub><mi>m</mi><mrow><mi>r</mi><mo>+</mo><mn>1</mn><mo>,</mo><mn>1</mn></mrow></msub><mo>&CirclePlus;</mo><msub><mi>X</mi><mn>0</mn></msub><mo>&CirclePlus;</mo><msub><mi>m</mi><mrow><mi>r</mi><mo>+</mo><mn>1</mn><mo>,</mo><mn>1</mn></mrow></msub><mo>&CirclePlus;</mo><mrow><mo>(</mo><mo>-</mo><msub><mi>m</mi><mrow><mi>r</mi><mo>+</mo><mn>1,2</mn></mrow></msub><mo>)</mo></mrow><mo>=</mo><msub><mi>R</mi><mn>1</mn></msub><mo>&CirclePlus;</mo><msub><mi>X</mi><mn>0</mn></msub><mo>&CirclePlus;</mo><mrow><mo>(</mo><mo>-</mo><msub><mi>m</mi><mrow><mi>r</mi><mo>+</mo><mn>1,2</mn></mrow></msub><mo>)</mo></mrow><mo>;</mo></mrow>]]></math><img file="FSA00001163576200000114.GIF" wi="1190" he="76" /></maths>由于<img file="FSA00001163576200000115.GIF" wi="417" he="68" />m<sub>r+1,2</sub>为已知,可将<img file="FSA00001163576200000116.GIF" wi="429" he="57" />的异或运算转化成加法运算为<img file="FSA0000116357620000021.GIF" wi="436" he="76" />由于<img file="FSA0000116357620000022.GIF" wi="239" he="67" />m<sub>r+1,2</sub>为已知,可对<img file="FSA0000116357620000023.GIF" wi="215" he="59" />的异或运算转化成加法运算为R<sub>2</sub>+m<sub>r+1,2</sub>;则<img file="FSA0000116357620000024.GIF" wi="311" he="58" />加上R<sub>2</sub>+m<sub>r+1,2</sub>即为正确的W输出。
地址 100036 北京市丰台区靛厂路7号