CN107124267B - 一种密码芯片上的固定位宽密钥产生方法 - Google Patents
一种密码芯片上的固定位宽密钥产生方法 Download PDFInfo
- Publication number
- CN107124267B CN107124267B CN201710200373.7A CN201710200373A CN107124267B CN 107124267 B CN107124267 B CN 107124267B CN 201710200373 A CN201710200373 A CN 201710200373A CN 107124267 B CN107124267 B CN 107124267B
- Authority
- CN
- China
- Prior art keywords
- bit
- binary data
- round
- iota
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0861—Generation of secret information including derivation or calculation of cryptographic keys or passwords
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Image Processing (AREA)
Abstract
本发明公开了一种密码芯片上的固定位宽密钥产生方法,通过将n位二进制数据结构的初始密码数据按照串行的方式从低位到高位输入到密码芯片中并保存在密码芯片的内部存储器中,然后从初始密码数据中截取1600位二进制数据作为中间密码数据,接着将中间密码数据按照从低位到高位的顺序进行划分,每64位二进制数据划分为一组,得到25组64位二进制数据,然后在密码芯片中设定六个64位中间寄存器,将24组64位二进制数据按照查找表的方式依次进行变换,最后随机选择四组二进制数据拼接为256位二进制数据作为固定位宽的密钥输出;优点是占用的硬件资源少,速度快,且随着被攻击的轮数的增加,安全性不会随之降低,安全性较高。
Description
技术领域
本发明涉及一种密码芯片上的密钥产生方法,尤其是涉及一种密码芯片上的固定位宽密钥产生方法。
背景技术
集成电路和信息技术的日益发展、互联网的迅速普及,为人们日常生活、学习和工作带来极大便利,如支付宝、淘宝、网银以及微信等。大量的信息共享与方便的同时,也出现信息被泄露与篡改的威胁,如网上银行账户被盗、个人隐私泄露以及棱镜门事件等等。如何保证数据信息的安全在密码学中显得尤为突出。密码算法在信息安全领域发挥着至关重要的作用,是保证信息安全传送最有效的方法,其中分组密码和流密码是应对现代通信中信息安全威胁最有效最常用的方法。分组密码是对固定长度的消息进行加密操作,高级加密标准(AES)因其复杂的数学结构,是目前安全性最高的分组密码算法,广泛应于到各种加密系统当中。而流密码则是比特级的加密操作,将产生的具有特定位宽的密钥与需要进行加密的明文数据进行逐比特的异或操作,其安全强度取决于密钥的生成算法。因此,在密码芯片对数据进行安全处理的过程中,固定位宽密钥的产生与选择对安全性有着举足轻重的影响。
Hash函数又称哈希函数或者杂凑函数,是现代密码学中最基本的模块之一,该函数以任意长度的消息值作为输入,生成固定长度的输出数据,具有将任意长度数据转换为固定位宽数据的功能。自从2004年密码学家王小云教授宣布攻破常用的Hash算法以来,网络信息安全问题进一步凸显。美国国家标准与技术研究所(NIST)于2007年公开征集杂凑函数新标准(SHA-3算法)的活动,并于2012年10月2日将Keccak杂凑算法定位新一代杂凑函数标准,其具有新颖的Sponge迭代结构、较强的安全性能以及良好的实现方法。文献(李建瑞,汪鹏君,张跃军,李刚.基于SHA-3算法的图像密钥生成方法.华东理工大学学报(自然科学版),Vol.41No.5,P693-P697,2015.10)提出采用SHA-3算法将任意长度的图像数据转换为固定位宽的密钥产生方法。该密钥产生方法具体过程如下:首先,将待处理图像转换为BMP格式图像,并将BMP格式图像转换为n位十六进制数据;然后,将n位十六进制数据由低位到高位依次进行分组,每64位作为一组十六进制数据,如果一组十六进制数据不足64位,则其高位用0补充;其次,通过Keccak-f[b]为迭代置换函数进行12轮的压缩迭代,每一轮的置换函数f都是作用在一个三维矩阵上的五步迭代置换;最后,得到Keccak杂凑算法输出数据作为图像密钥。但是,该密钥产生方法存在以下几个方面的问题:1、由于采用三维矩阵的压缩迭代,电路实现所占用的硬件资源较大;2、图像数据的转换速度太慢,且五步迭代置换算法所需处理的时间较长,在实际应用中必须进一步优化;3、由于需要进行12轮的迭代运算,存在轮攻击的数量会较多,其安全性也可能随之降低。
鉴此,设计一种占用的硬件资源较少,速度快,且安全性较高的密码芯片上的固定位宽密钥产生方法,在密码芯片的实际应用方面具有重要意义。
发明内容
本发明所要解决的技术问题是提供一种占用的硬件资源少,速度快,且随着被攻击的轮数的增加,安全性不会随之降低,安全性较高的密码芯片上的固定位宽密钥产生方法。
本发明解决上述技术问题所采用的技术方案为:一种密码芯片上的固定位宽密钥产生方法,包括以下步骤:
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中得到的M"1-M"24和M25这25组二进制数据中随机选择四组二进制数据拼接为256位二进制数据作为固定位宽的密钥输出。
与现有技术相比,本发明的优点在于通过将n位二进制数据结构的初始密码数据按照串行的方式从低位到高位输入到密码芯片中并保存在密码芯片的内部存储器中,然后获取初始密码数据的位数,如果初始密码数据的位数大于1600,则从最低位开始向高位截取1600位二进制数据作为中间密码数据;如果初始密码数据的位数等于1600,则从最低位为开始向高位截取1600位二进制数据作为中间密码数据,如果初始密码数据的位数小于1600,则在其高位补0到1600位二进制数据作为中间密码数据,接着将中间密码数据按照从低位到高位的顺序进行划分,每64位二进制数据划分为一组,得到25组64位二进制数据,将第k组64位二进制数据记为Mk,k=1,2,3,…,25,25组64位二进制数据按划分先后顺序依次存储到密码芯片的内部存储器中,然后在密码芯片中设定六个64位中间寄存器,六个64位中间寄存器分别记为r1_out、r2_out、r3_out、rho_out、iota_out和chi_out,将24组64位二进制数据M1-M24按照查找表的方式依次进行变换,得到M"1-M"24,最后从M"1-M"24和M25这25组二进制数据中随机选择四组二进制数据拼接为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中得到的M"1-M"24和M25这25组二进制数据中随机选择四组二进制数据拼接为256位二进制数据作为固定位宽的密钥输出。
Claims (1)
1.一种密码芯片上的固定位宽密钥产生方法,其特征在在于包括以下步骤:
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中得到的M"1-M"24和M25这25组二进制数据中随机选择四组二进制数据拼接为256位二进制数据作为固定位宽的密钥输出。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710200373.7A CN107124267B (zh) | 2017-03-30 | 2017-03-30 | 一种密码芯片上的固定位宽密钥产生方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710200373.7A CN107124267B (zh) | 2017-03-30 | 2017-03-30 | 一种密码芯片上的固定位宽密钥产生方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107124267A CN107124267A (zh) | 2017-09-01 |
CN107124267B true CN107124267B (zh) | 2020-04-17 |
Family
ID=59717455
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710200373.7A Active CN107124267B (zh) | 2017-03-30 | 2017-03-30 | 一种密码芯片上的固定位宽密钥产生方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107124267B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107612684B (zh) * | 2017-10-20 | 2020-09-15 | 中博龙辉装备集团股份有限公司 | 基于国产化处理器平台专有指令集的数据对称加密方法 |
CN109872161B (zh) * | 2019-03-01 | 2021-05-04 | 山东大学 | 一种加速iota子链交易验证过程的芯片及系统 |
CN116303308B (zh) * | 2022-12-30 | 2023-12-08 | 北京海泰方圆科技股份有限公司 | 秘密数据分享方法、装置、电子设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1921382A (zh) * | 2006-09-06 | 2007-02-28 | 华为技术有限公司 | 一种基于aes算法的加解密方法及加解密器 |
CN103748986B (zh) * | 2008-07-14 | 2009-08-12 | 中国科学院数据与通信保护研究教育中心 | 一种单向密码杂凑值生成方法和装置 |
WO2011119606A2 (en) * | 2010-03-25 | 2011-09-29 | Altera Corporation | Look up table structure supporting quaternary adders |
CN103946796A (zh) * | 2011-12-13 | 2014-07-23 | 英特尔公司 | 处理keccak安全散列算法的方法和设备 |
-
2017
- 2017-03-30 CN CN201710200373.7A patent/CN107124267B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1921382A (zh) * | 2006-09-06 | 2007-02-28 | 华为技术有限公司 | 一种基于aes算法的加解密方法及加解密器 |
CN103748986B (zh) * | 2008-07-14 | 2009-08-12 | 中国科学院数据与通信保护研究教育中心 | 一种单向密码杂凑值生成方法和装置 |
WO2011119606A2 (en) * | 2010-03-25 | 2011-09-29 | Altera Corporation | Look up table structure supporting quaternary adders |
CN103946796A (zh) * | 2011-12-13 | 2014-07-23 | 英特尔公司 | 处理keccak安全散列算法的方法和设备 |
Non-Patent Citations (2)
Title |
---|
Efficient High Speed Implementation of Secure Hash Algorithm-3;Muzaffar Rao等;《2014 17th Euromicro Conference on Digital System Design》;20141020;全文 * |
基于SHA-3算法的图像密钥生成方法;李建瑞等;《华东理工大学学报(自然科学版)》;20151110;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN107124267A (zh) | 2017-09-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
USRE44594E1 (en) | Method and circuit for data encryption/decryption | |
US20060126843A1 (en) | Method and apparatus for increasing the speed of cryptographic processing | |
Feng et al. | Cryptanalysis and improvement of the image encryption scheme based on Feistel network and dynamic DNA encoding | |
Gamido et al. | Modified AES for text and image encryption | |
US11258579B2 (en) | Method and circuit for implementing a substitution table | |
CN107124267B (zh) | 一种密码芯片上的固定位宽密钥产生方法 | |
CN112199696A (zh) | 基于白盒分组密码的加解密方法 | |
CN110336661B (zh) | Aes-gcm数据处理方法、装置、电子设备及存储介质 | |
US6301361B1 (en) | Encoding and decoding information using randomization with an alphabet of high dimensionality | |
TW595183B (en) | Crypto-system with an inverse key evaluation circuit | |
Abdulraheem et al. | Secure iot model based on present lightweight modified and chaotic key generator | |
CN114826560B (zh) | 一种轻量级分组密码cref实现方法及系统 | |
US20050147244A1 (en) | Method for cryptographic transformation of binary data blocks | |
CN116318669A (zh) | 一种基于窄带物联网的轻量级加密方法 | |
US20040096059A1 (en) | Encryption apparatus with parallel Data Encryption Standard (DES) structure | |
Bajaj et al. | AES algorithm for encryption | |
CN112737767B (zh) | 抗差分功耗分析与时间攻击的消息认证码生成方法及系统 | |
CN115811398A (zh) | 基于动态s盒的分组密码算法、装置、系统及存储介质 | |
US20090022310A1 (en) | Cryptographic device and method for generating pseudo-random numbers | |
EP3832945A1 (en) | System and method for protecting memory encryption against template attacks | |
Muhalhal et al. | A hybrid modified lightweight algorithm for achieving data integrity and confidentiality | |
Kristianti et al. | Finding an efficient FPGA implementation of the DES algorithm to support the processor chip on smartcard | |
Dalakoti et al. | Hardware efficient AES for image processing with high throughput | |
Hameed et al. | SMX algorithm: A novel approach to avalanche effect on advanced encryption standard AES | |
US7142673B1 (en) | Method for the cryptographic conversion of L-bit input blocks of digital data into L-bit output blocks |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
EE01 | Entry into force of recordation of patent licensing contract | ||
EE01 | Entry into force of recordation of patent licensing contract |
Application publication date: 20170901 Assignee: SANMEN SANYOU TECHNOLOGY Inc. Assignor: Ningbo University Contract record no.: X2022330000855 Denomination of invention: A Fixed Bit Width Key Generation Method on Cryptographic Chip Granted publication date: 20200417 License type: Common License Record date: 20221226 |