发明名称 流密码生成方法
摘要 本发明涉及数字安全认证技术,提供一种适合实际高速数字内容安全传输应用的流密码生成方法,包括生成步骤、混淆步骤、输出步骤,混淆步骤采用2个4进4出的S盒子进行,混淆步骤具体为:a、将混淆步骤的输入结果与反馈回的变换R进行线性压缩,得到变换结果RA;b、对变换结果RA进行非可逆线性变换,得到变换结果I;c、将变换结果I以4bit为一组输入S盒子,对于输入的4bit数组以2bit对应S盒子行,另2bit对应S盒子列,查找输入数组对应的4bit输出,得到变换结果R,并反馈回步骤a;d、将变换结果R通过两次查表运算,得到变换结果S,将变换结果S作为输出步骤的输入。本发明具有良好随机性,适合硬件实现。
申请公布号 CN101355423B 申请公布日期 2011.08.17
申请号 CN200810304456.1 申请日期 2008.09.10
申请人 四川长虹电器股份有限公司 发明人 康红娟;刘贤洪;蔡勇
分类号 H04L9/28(2006.01)I;H04L9/08(2006.01)I 主分类号 H04L9/28(2006.01)I
代理机构 成都虹桥专利事务所 51124 代理人 李顺德
主权项 1.流密码生成方法,其特征在于,包括以下步骤:(1)生成步骤:生成256比特的初始化向量IV,选择其中128比特作为三个线性反馈移位寄存器LFSRα、LFSRβ、LFSRγ的初始化密钥输入,其余128比特的初始化向量IV分为16段IV0、…、IV15,分6次输入到三个变换L、K、N中:第k次输入,k=0,1,2,3,4,5:IV<sub>3k+2</sub>输入到变换L中;IV<sub>3k+1</sub>输入到变换K中;IV<sub>3k</sub>输入到变换N中;初始化向量IV输入完成后,三个线性反馈移位寄存器LFSRα、LFSRβ、LFSRγ进行34步的封闭循环,封闭循环后三个线性移位寄存器LFSRα、LFSRβ、LFSRγ共输出130比特的变换结果V,将变换结果V作为选择步骤的输入结果;其中,三个线性反馈移位寄存器LFSRα、LFSRβ、LFSRγ对应的生成多项式如下:LFSRα:f(x)=x<sup>8</sup>+x<sup>6</sup>+x<sup>5</sup>+x+1LFSRβ:f(x)=x<sup>35</sup>+x<sup>34</sup>+x<sup>31</sup>+x<sup>24</sup>+x<sup>22</sup>+x<sup>21</sup>+x<sup>20</sup>+x<sup>19</sup>+x<sup>16</sup>+x<sup>15</sup>+x<sup>13</sup>+x<sup>12</sup>+x<sup>11</sup>+x<sup>8</sup>+x<sup>5</sup>+x<sup>4</sup>+x<sup>3</sup>+x<sup>2</sup>+1LFSRγ:f(x)=x<sup>31</sup>+x<sup>30</sup>+x<sup>27</sup>+x<sup>26</sup>+x<sup>24</sup>+x<sup>21</sup>+x<sup>15</sup>+x<sup>12</sup>+x<sup>11</sup>+x<sup>10</sup>+x<sup>9</sup>+x<sup>8</sup>+x<sup>7</sup>+x<sup>2</sup>+1其中,LFSRα以字节为单位构成,一共有64比特,LFSRβ和LFSRγ以比特为单位构成,LFSRβ共有35比特,LFSRγ共有31比特;线性反馈移位寄存器LFSRα对应变换L,LFSRβ对应变换K,LFSRγ对应变换N;线性反馈移位寄存器LFSRα在每次脉冲时为变换L的左端贡献8比特输入, 同时右移8比特,LFSRα的左端输入由变换L提供,变换L的输出为:初始化内部状态时:<img file="FDA0000054641470000021.GIF" wi="890" he="58" />k=0,...,5初始化阶段的封闭运行时:<img file="FDA0000054641470000022.GIF" wi="731" he="56" />其它阶段:l>>>3其中,T0、T1、T2是密钥流输出变换T的32比特输出中的低24比特,IV是初始化向量,l为线性反馈移位寄存器LFSRα在每次脉冲时为变换L的左端贡献的8比特输入;线性反馈移位寄存器LFSRβ在每次脉冲时为左端贡献1比特输入,同时右移1比特;在此之后,LFSRβ左端的8比特由变换K更新为:初始化内部状态时:<img file="FDA0000054641470000023.GIF" wi="770" he="58" />k=0,...,5其它阶段:β<sub>34</sub>β<sub>33</sub>β<sub>32</sub>β<sub>31</sub>β<sub>30</sub>β<sub>29</sub>β<sub>28</sub>β<sub>27</sub>其中,β<sub>i</sub>代表LFSRβ中的第i比特;线性反馈移位寄存器LFSRγ在每次脉冲时为左端贡献1比特输入,同时右移1比特;在此之后,LFSRγ左端的8比特由变换N更新为:初始化内部状态时:<img file="FDA0000054641470000024.GIF" wi="675" he="50" />k=0,...,5其它阶段:γ<sub>30</sub>γ<sub>29</sub>γ<sub>28</sub>γ<sub>27</sub>γ<sub>26</sub>γ<sub>25</sub>γ<sub>24</sub>γ<sub>23</sub>其中,γ<sub>i</sub>代表LFSRγ中的第i比特;(2)选择步骤:采用列表D、E、F的方式,从LFSRα、LFSRβ、LFSRγ中分别抽取32比特、24比特、16比特的数据并输出作为混淆步骤的输入结果;列表F输出的16比特还作为输出步骤的输入;列表D从LFSRα中抽取的4字节记为D3D2D1D0:<img file="DEST_PATH_G20081U4456120080910D000043.GIF" wi="1638" he="303" />列表E从LFSRβ中抽取的24比特记为E5E4E3E2E1E0:<img file="FDA0000054641470000032.GIF" wi="2094" he="520" />列表F从LFSRγ中抽取的16比特记为F1F0:<img file="FDA0000054641470000033.GIF" wi="1814" he="217" />(3)混淆步骤:包括变换R和变换Sa)变换R将选择步骤的输入结果与反馈回的上一轮变换R的输出结果进行线性压缩,得到共24比特的结果,字节格式记为RA2,RA1,RA0,并统称为变换结果RA;如无反馈回的变换R输出结果,则默认反馈回的变换R输出结果为0;对变换结果RA进行非可逆线性变换,将RA分成两组,每组12比特,分别输入两个变换矩阵I0、I1,经过两个变换矩阵输出变换结果R1、R2;同时RA2分为高4比特与低4比特后,输入2个四进四出的S盒子,将S盒子的输出赋值于变换结果R0,对于输入的4比特数组,从左到右的顺序,前2比特对应S盒子的行,后2比特对应S盒子的列,查找输入数组对应的4比特输出;所述两个四进四出的S盒子分别为S1盒子、S2盒子;S1盒子如下: <tables num="0001"><table><tgroup cols="4"><colspec colname="c001" colwidth="25%" /><colspec colname="c002" colwidth="25%" /><colspec colname="c003" colwidth="25%" /><colspec colname="c004" colwidth="25%" /><tbody><row><entry morerows="1">  0x5 </entry><entry morerows="1">  0x3 </entry><entry morerows="1">  0xb </entry><entry morerows="1">  0xe </entry></row><row><entry morerows="1">  0x9 </entry><entry morerows="1">  0xa </entry><entry morerows="1">  0x0 </entry><entry morerows="1">  0xd </entry></row><row><entry morerows="1">  0x6 </entry><entry morerows="1">  0x8 </entry><entry morerows="1">  0x1 </entry><entry morerows="1">  0x4 </entry></row><row><entry morerows="1">  0xc </entry><entry morerows="1">  0x7 </entry><entry morerows="1">  0xf </entry><entry morerows="1">  0x2 </entry></row></tbody></tgroup></table></tables>S2盒子如下:<tables num="0002"><table><tgroup cols="4"><colspec colname="c001" colwidth="25%" /><colspec colname="c002" colwidth="25%" /><colspec colname="c003" colwidth="25%" /><colspec colname="c004" colwidth="25%" /><tbody><row><entry morerows="1">  0x0 </entry><entry morerows="1">  0xd </entry><entry morerows="1">  0xf </entry><entry morerows="1">  0xa </entry></row><row><entry morerows="1">  0x9 </entry><entry morerows="1">  0x7 </entry><entry morerows="1">  0x4 </entry><entry morerows="1">  0x1 </entry></row><row><entry morerows="1">  0xc </entry><entry morerows="1">  0xb </entry><entry morerows="1">  0x6 </entry><entry morerows="1">  0x5 </entry></row><row><entry morerows="1">  0x3 </entry><entry morerows="1">  0xe </entry><entry morerows="1">  0x8 </entry><entry morerows="1">  0x2 </entry></row></tbody></tgroup></table></tables>变换结果R2、R1、R0组成24比特的变换R输出结果,将变换R输出结果作为下一轮混淆步骤的输入以及输出步骤的输入;b)变换S将列表E输出的24比特通过两次查表运算,得到16比特的变换结果S,将变换结果S作为输出步骤的输入;(4)输出步骤:将列表F输出的16比特、变换R输出结果与变换结果S进行变换后得到系统输出的32比特密钥流输出变换T,将密钥流输出变换T中低24比特反馈回下一轮的生成步骤作为变换L的一部分输入。 
地址 621000 四川省绵阳市高新区绵兴东路35号