[发明专利]一种密码芯片上的固定位宽密钥产生方法有效
申请号: | 201710200373.7 | 申请日: | 2017-03-30 |
公开(公告)号: | CN107124267B | 公开(公告)日: | 2020-04-17 |
发明(设计)人: | 廖澴桓;张跃军;丁代鲁;潘钊 | 申请(专利权)人: | 宁波大学 |
主分类号: | H04L9/08 | 分类号: | H04L9/08 |
代理公司: | 宁波奥圣专利代理事务所(普通合伙) 33226 | 代理人: | 方小惠 |
地址: | 315211 浙*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种密码芯片上的固定位宽密钥产生方法,通过将n位二进制数据结构的初始密码数据按照串行的方式从低位到高位输入到密码芯片中并保存在密码芯片的内部存储器中,然后从初始密码数据中截取1600位二进制数据作为中间密码数据,接着将中间密码数据按照从低位到高位的顺序进行划分,每64位二进制数据划分为一组,得到25组64位二进制数据,然后在密码芯片中设定六个64位中间寄存器,将24组64位二进制数据按照查找表的方式依次进行变换,最后随机选择四组二进制数据拼接为256位二进制数据作为固定位宽的密钥输出;优点是占用的硬件资源少,速度快,且随着被攻击的轮数的增加,安全性不会随之降低,安全性较高。 | ||
搜索关键词: | 一种 密码 芯片 固定 密钥 产生 方法 | ||
【主权项】:
一种密码芯片上的固定位宽密钥产生方法,其特征在在于包括以下步骤:a.将n位二进制数据结构的初始密码数据按照串行的方式从低位到高位输入到密码芯片并保存在密码芯片的内部存储器中,其中n为大于等于1的整数;b.获取初始密码数据的位数,如果初始密码数据的位数大于1600,则从最低位开始向高位截取1600位二进制数据作为中间密码数据;如果初始密码数据的位数等于1600,则从最低位开始向高位截取1600位二进制数据作为中间密码数据,如果初始密码数据的位数小于1600,则在其高位补0到1600位二进制数据作为中间密码数据;c.将中间密码数据按照从低位到高位的顺序进行划分,每64位二进制数据划分为一组,得到25组64位二进制数据,将第k组64位二进制数据记为Mk,k=1,2,3,…,25,25组64位二进制数据按划分先后顺序依次存储到密码芯片的内部存储器中;d.将24组64位二进制数据M1‑M24按照查找表的方式依次进行变换,将当前变换的轮数记为nr_round,nr_round=1,2,…,24,将Mt变换后的值记为M”t,t=1,2,…,24,在密码芯片中设定六个64位中间寄存器,六个64位中间寄存器分别记为r1_out、r2_out、r3_out、rho_out、iota_out和chi_out;第1轮‑第22轮变换的具体过程为:d‑1.将64位二进制数据Mj的值赋给r1_out,j=nr_round,nr_round=1,2,…,22;d‑2.将64位二进制数据Mj+1与r1_out按位进行异或运算,得到异或运算逻辑值,并将该异或运算逻辑值赋给r1_out对r1_out进行更新,得到更新后的r1_out;d‑3.将64位二进制数据Mj+2的最高位移到其最低位的右边,然后整体左移1位得到64位二进制数据M'j+2;d‑4.将64位二进制数据M'j+2与步骤d‑2中更新后的r1_out按位进行异或运算,得到异或运算逻辑值,并将该异或运算逻辑值赋给r2_out;d‑5.将64位二进制数据Mj+3与步骤d‑2中更新后的r1_out按位进行异或运算,得到异或运算逻辑值,并将该异或运算逻辑值赋给r3_out。d‑6.设定轮常数为iota,iota用16进制数据表示如下:当nr_round=1时,iota=0000000000000001;当nr_round=2时,iota=0000000000008082;当nr_round=3时,iota=800000000000808A;当nr_round=4时,iota=8000000080008000;当nr_round=5时,iota=000000000000808B;当nr_round=6时,iota=0000000080000001;当nr_round=7时,iota=8000000080008081;当nr_round=8时,iota=8000000000008009;当nr_round=9时,iota=000000000000008A;当nr_round=10时,iota=0000000000000088;当nr_round=11时,iota=0000000080008009;当nr_round=12时,iota=000000008000000A;当nr_round=13时,iota=000000008000808B;当nr_round=14时,iota=800000000000008B;当nr_round=15时,iota=8000000000008089;当nr_round=16时,iota=8000000000008003;当nr_round=17时,iota=8000000000008002;当nr_round=18时,iota=8000000000000080;当nr_round=19时,iota=000000000000800A;当nr_round=20时,iota=800000008000000A;当nr_round=21时,iota=8000000080008081;当nr_round=22时,iota=8000000000008080;d‑7.将步骤d‑2中更新后的r1_out的最高位移除并在其最低位的右边补一个0后,然后整体左移1位的得到的64位二进制数据赋值给rho_out;d‑8.将当前轮的轮常数iota转换为64位二进制数据后与rho_out相加后的值赋值给iota_out;d‑9.将r2_out进行非运算后,与步骤d‑2中更新后的r1_out进行异或运算,然后再与r3_out进行异或运算,得到的值赋值给chi_out;d‑10.当步骤d‑2中更新后的r1_out的从低位到高位方向的第3位值为“1”时,将rho_out的值赋给M”j,当步骤d‑2中更新后的r1_out的从低位到高位方向的第2位值为“1”时,将chi_out的值赋给M”j,当步骤d‑2中更新后的r1_out的从低位到高位方向的第1位值为“1”时,将chi_out与rho_out进行异或运算后的值赋给M”j;第23轮变换的具体过程为:d‑11.将64位二进制数据Mj的值赋给r1_out,j=nr_round,nr_round=23;d‑12.将64位二进制数据Mj+1与r1_out按位进行异或运算,得到异或运算逻辑值,并将该异或运算逻辑值赋给r1_out对r1_out进行更新,得到更新后的r1_out;d‑13.将64位二进制数据Mj+2的最高位移到其最低位的右边,然后整体左移1位得到64位二进制数据M'j+2;d‑14.将64位二进制数据M'j+2与步骤d‑12中更新后的r1_out按位进行异或运算,得到异或运算逻辑值,并将该异或运算逻辑值赋给r2_out;d‑15.将64位二进制数据M1与步骤d‑12中更新后的r1_out按位进行异或运算,得到异或运算逻辑值,并将该异或运算逻辑值赋给r3_out;d‑16.设定轮常数为iota,iota用16进制数据表示如下:当nr_round=23时,iota=0000000080000001;d‑17.将步骤d‑12中更新后的r1_out的最高位移除并在其最低位的右边补一个0后,然后整体左移1位得到的64位二进制数据赋值给rho_out;d‑18.将当前轮的轮常数iota转换为64位二进制数据后与rho_out相加后的值赋值给iota_out;d‑19.将r2_out进行非运算后,与步骤d‑12中更新后的r1_out进行异或运算,然后再与r3_out进行异或运算,得到的混合逻辑值赋值给chi_out;d‑20.当步骤d‑12中更新后的r1_out的从低位到高位方向的第3位值为“1”时,将rho_out的值赋给M”j,当步骤d‑12中更新后的r1_out的从低位到高位方向的第2位值为“1”时,将chi_out的值赋给M”j,当步骤d‑12中更新后的r1_out的从低位到高位方向的第1位值为“1”时,将chi_out与rho_out进行异或运算后的值赋给M”j;第24轮变换的具体过程为:d‑21.将64位二进制数据Mj的值赋给r1_out,j=nr_round,nr_round=24;d‑22.将64位二进制数据Mj+1与r1_out按位进行异或运算,得到异或运算逻辑值,并将该异或运算逻辑值赋给r1_out对r1_out进行更新,得到更新后的r1_out;d‑23.将64位二进制数据M1的最高位移到其最低位的右边,然后整体左移1位得到64位二进制数据M'1;d‑24.将64位二进制数据M'1与更新后的r1_out按位进行异或运算,得到异或运算逻辑值,并将该异或运算逻辑值赋给r2_out;d‑25.将64位二进制数据M2与更新后的r1_out按位进行异或运算,得到异或运算逻辑值,并将该异或运算逻辑值赋给r3_out;d‑26.设定轮常数为iota,iota用16进制数据表示如下:当nr_round=24时,iota=8000000080008008;d‑27.将步骤d‑22中更新后的r1_out的最高位移除并在其最低位的右边补一个0后,然后整体左移1位得到的64位二进制数据值赋给rho_out;d‑28.将当前轮的轮常数iota转换为64位二进制数据后与rho_out相加后的值赋值给iota_out;d‑29.将r2_out进行非运算后,与步骤d‑22中更新后的r1_out进行异或运算,然后再与r3_out进行异或运算,得到混合逻辑值赋值给chi_out;d‑30.当步骤d‑22中更新后的r1_out的从低位到高位方向的第3位值为“1”时,将rho_out的值赋给M”j,当步骤d‑22中更新后的r1_out的从低位到高位方向的第2位值为“1”时,将chi_out的值赋给M”j,当步骤d‑22中更新后的r1_out的从低位到高位方向的第1位值为“1”时,将chi_out与rho_out进行异或运算后的值赋给M”j;e.从步骤d中得到的M1‑M24和M25这25组二进制数据中随机选择四组二进制数据拼接为256位二进制数据作为固定位宽的密钥输出。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于宁波大学,未经宁波大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201710200373.7/,转载请声明来源钻瓜专利网。