发明名称 HMAC-SM3密码算法的侧信道能量分析方法及装置
摘要 本发明提供了一种HMAC-SM3密码算法的侧信道能量分析方法及装置。所述方法包括:分析获得第一密钥数据K<sub>in</sub>的值;分析获得第二密钥数据K<sub>out</sub>的值;根据所获得的第一密钥数据K<sub>in</sub>的值以及第二密钥数据K<sub>out</sub>的值,生成消息摘要。其中,分析获得第一密钥数据K<sub>in</sub>的值包括:向所述密码模块输入消息组M;采集所述密码模块对所输入的每条消息进行处理的过程中所产生的能量消耗信息;在j=1时,先分别选择<img file="DDA0000691904430000011.GIF" wi="264" he="72" />和<img file="DDA0000691904430000012.GIF" wi="269" he="72" />作为分析对象,分别获得变量B<sub>1</sub>、F<sub>1</sub>的值;再分别选择<img file="DDA0000691904430000013.GIF" wi="400" he="72" />和<img file="DDA0000691904430000014.GIF" wi="415" he="72" />作为分析对象,分别获得变量C<sub>1</sub>、G<sub>1</sub>的值。应用所述方法获得第一密钥数据,可以有效提高破解的成功率。
申请公布号 CN106161001A 申请公布日期 2016.11.23
申请号 CN201510149096.2 申请日期 2015.03.31
申请人 上海复旦微电子集团股份有限公司;国家密码管理局商用密码检测中心 发明人 王立辉;郭丽敏;张志敏;李大为;罗鹏;莫凡
分类号 H04L9/06(2006.01)I 主分类号 H04L9/06(2006.01)I
代理机构 北京集佳知识产权代理有限公司 11227 代理人 潘彦君;骆苏华
主权项 一种HMAC‑SM3密码算法的侧信道能量分析方法,其特征在于,SM3密码算法的压缩函数在第j轮的迭代运算过程中,产生第一变量TT1<sub>j</sub>,第二变量TT2<sub>j</sub>,其中:TT1<sub>j</sub>=FF<sub>j</sub>(A<sub>j</sub>,B<sub>j</sub>,C<sub>j</sub>)+D<sub>j</sub>+SS2<sub>j</sub>+W<sub>j</sub>′,TT2<sub>j</sub>=GG<sub>j</sub>(E<sub>j</sub>,F<sub>j</sub>,G<sub>j</sub>)+H<sub>j</sub>+SS1<sub>j</sub>+W<sub>j</sub>,SS1<sub>j</sub>=((A<sub>j</sub><<<12)+E<sub>j</sub>+(T<sub>j</sub><<<j))<<<7,<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><msub><mrow><mi>SS</mi><mn>2</mn></mrow><mi>j</mi></msub><mo>=</mo><msub><mrow><mi>SS</mi><mn>1</mn></mrow><mi>j</mi></msub><mo>&CirclePlus;</mo><mrow><mo>(</mo><msub><mi>A</mi><mi>j</mi></msub><mo>&lt;</mo><mo>&lt;</mo><mo>&lt;</mo><mn>12</mn><mo>)</mo></mrow><mo>,</mo></mrow>]]></math><img file="FDA0000691904400000011.GIF" wi="653" he="93" /></maths>0≤j≤63,且j为整数,A,B,C,D,E,F,G,H均为基于HMAC‑SM3密码算法的密码模块的寄存器,所述密码模块每次调用SM3密码算法时,第二个压缩函数的初始值均为当前调用SM3密码算法时各个所述寄存器的初始状态值A<sub>0</sub>,B<sub>0</sub>,C<sub>0</sub>,D<sub>0</sub>,E<sub>0</sub>,F<sub>0</sub>,G<sub>0</sub>,H<sub>0</sub>顺序排列所形成的数据序列,FF<sub>j</sub>(A<sub>j</sub>,B<sub>j</sub>,C<sub>j</sub>)为对A<sub>j</sub>,B<sub>j</sub>和C<sub>j</sub>布尔函数求值,GG<sub>j</sub>(E<sub>j</sub>,F<sub>j</sub>,G<sub>j</sub>)为对E<sub>j</sub>,F<sub>j</sub>和G<sub>j</sub>布尔函数求值,W<sub>j</sub>、W<sub>j</sub>′为对消息m<sub>i</sub>的一消息分组进行扩展后生成的字,T<sub>j</sub>为常量;所述密码模块每次调用SM3密码算法的过程中,第p个压缩函数运算后的结果为V<sup>p</sup>,1≤p≤N,p为整数;所述分析方法包括:分析获得第一密钥数据K<sub>in</sub>的值,所述第一密钥数据K<sub>in</sub>为所述密码模块第一次调用SM3密码算法时,第二个压缩函数的初始值,采用如下步骤获得K<sub>in</sub>:向基于HMAC‑SM3密码算法的密码模块输入消息组M={m<sub>0</sub>,m<sub>1</sub>,…,m<sub>i</sub>,…,m<sub>n</sub>},其中,n为正整数,0≤i≤n,且i为整数;采集所述密码模块应用HMAC‑SM3密码算法对所输入的每条消息进行处理的过程中所产生的能量消耗信息,并建立能量消耗矩阵;在j=0时,分别选择第一变量TT1<sub>0</sub>和第二变量TT2<sub>0</sub>作为分析对象,根据所输入的消息以及对应采集到的能量消耗数据,采用侧信道能量分析方法,先分别获得(FF<sub>0</sub>(A<sub>0</sub>,B<sub>0</sub>,C<sub>0</sub>)+D<sub>0</sub>+SS2<sub>0</sub>)和(GG<sub>0</sub>(E<sub>0</sub>,F<sub>0</sub>,G<sub>0</sub>)+H<sub>0</sub>+SS1<sub>0</sub>)的值,再分别获得第一变量TT1<sub>0</sub>和第二变量TT2<sub>0</sub>的值,即变量A<sub>1</sub>和E<sub>1</sub>的值;在j=1时,先分别选择<img file="FDA0000691904400000021.GIF" wi="278" he="78" />和<img file="FDA0000691904400000022.GIF" wi="273" he="78" />作为分析对象,分别根据所述变量A<sub>1</sub>和E<sub>1</sub>的值,以及对应采集到的能量消耗数据,采用侧信道能量分析方法,分别获得变量B<sub>1</sub>、F<sub>1</sub>的值;再分别选择<img file="FDA0000691904400000023.GIF" wi="402" he="78" />和<img file="FDA0000691904400000024.GIF" wi="410" he="79" />作为分析对象,分别根据所获得的变量B<sub>1</sub>、A<sub>1</sub>的值以及变量F<sub>1</sub>和E<sub>1</sub>的值,以及对应采集到的能量消耗数据,采用侧信道能量分析方法,分别获得变量C<sub>1</sub>、G<sub>1</sub>的值;再根据所获得的变量B<sub>1</sub>和C<sub>1</sub>的值,分别获得变量A<sub>0</sub>和B<sub>0</sub>的值;最后根据所获得的变量F<sub>1</sub>和G<sub>1</sub>的值,分别获得变量E<sub>0</sub>和F<sub>0</sub>的值;在j=1时,选择第一变量TT1<sub>1</sub>或(FF<sub>1</sub>(A<sub>1</sub>,B<sub>1</sub>,C<sub>1</sub>)+D<sub>1</sub>)作为分析对象,根据所获得的变量A<sub>1</sub>、B<sub>1</sub>和C<sub>1</sub>的值,以及对应采集到的能量消耗数据,采用侧信道能量分析方法获得变量D<sub>1</sub>的值;选择第二变量TT2<sub>1</sub>或(GG<sub>1</sub>(E<sub>1</sub>,F<sub>1</sub>,G<sub>1</sub>)+H<sub>1</sub>)作为分析对象,根据所获得的变量E<sub>1</sub>、F<sub>1</sub>和G<sub>1</sub>的值,以及对应采集到的能量消耗数据,采用侧信道能量分析方法获得变量H<sub>1</sub>的值;再根据所获得的变量D<sub>1</sub>和H<sub>1</sub>的值,分别获得变量C<sub>0</sub>和G<sub>0</sub>的值;在j=0时,选择(FF<sub>0</sub>(A<sub>0</sub>,B<sub>0</sub>,C<sub>0</sub>)+D<sub>0</sub>+SS2<sub>0</sub>)作为分析对象,根据所获得的变量A<sub>0</sub>、B<sub>0</sub>和C<sub>0</sub>的值,获得变量D<sub>0</sub>的值;选择(GG<sub>0</sub>(E<sub>0</sub>,F<sub>0</sub>,G<sub>0</sub>)+H<sub>0</sub>+SS1<sub>0</sub>)作为分析对象,根据所获得的变量E<sub>0</sub>、F<sub>0</sub>和G<sub>0</sub>的值,获得变量H<sub>0</sub>的值;根据所述变量A<sub>0</sub>、B<sub>0</sub>、C<sub>0</sub>、D<sub>0</sub>、E<sub>0</sub>、F<sub>0</sub>、G<sub>0</sub>和H<sub>0</sub>的值,获得所述第一密钥数据K<sub>in</sub>的值;分析获得第二密钥数据K<sub>out</sub>的值;根据所获得的第一密钥数据K<sub>in</sub>的值以及第二密钥数据K<sub>out</sub>的值,生成消息摘要。
地址 200433 上海市杨浦区国泰路127号复旦国家大学科技园4号楼