[发明专利]一种基于Camellia算法的防御逆向工程加密方法有效
申请号: | 201810383818.4 | 申请日: | 2018-04-26 |
公开(公告)号: | CN108768624B | 公开(公告)日: | 2021-03-02 |
发明(设计)人: | 杜世民;杨润萍;殷金曙;钟志光 | 申请(专利权)人: | 宁波大学科学技术学院 |
主分类号: | H04L9/08 | 分类号: | H04L9/08;H04L9/00 |
代理公司: | 宁波奥圣专利代理有限公司 33226 | 代理人: | 方小惠 |
地址: | 315212 浙江省*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种基于Camellia算法的防御逆向工程加密方法,通过构建混淆有限状态机后加载到Camellia算法中,然后向Camellia算法中输入与混淆有限状态机中设置的4位二进制授权密钥Key相同的授权秘钥使Camellia算法中的混淆有限状态机输出64位二进制数Ot,并基于64位二进制数Ot对待加密电路的待加密数据进行三次迭代加密运算得到加密数据;优点是当攻击者通过逆向工程来提取电路中被加密数据时,由于攻击者不知道正确的授权秘钥以及正确授权秘钥对应的64位二进制数Ot,会使解密过程出错,从而解密出不正确数据,由此本发明可以有效阻止逆向工程等攻击,提高了硬件知识产权的保护力度。 | ||
搜索关键词: | 一种 基于 camellia 算法 防御 逆向 工程 加密 方法 | ||
【主权项】:
1.一种基于Camellia算法的防御逆向工程加密方法,其特征在于包括以下步骤:①在Camellia算法中添加一个用于输入4位二进制授权密钥Key的输入端口,Camellia算法采用硬件电路结构实现;②构建用于加载到Camellia算法中的混淆有限状态机,具体过程为:②‑1将待构建的混淆有限状态机的混淆状态的数量记为G,G满足条件:G+N=2n,n为正整数且n大于等于Camellia算法中原始有限状态机的有效状态的二进制编码的位宽,N为Camellia算法中的原始有限状态机的有效状态个数,N为常数11;②‑2计算Camellia算法中原始有限状态机的N个有效状态的二进制编码对应的十进制数,从0~2n‑1这2n个十进制数中去除原始有限状态机的N个有效状态的二进制编码对应的十进制数,得到G个位于0~2n‑1之间的十进制数,将这G个0~2n‑1之间的十进制数与混淆有限状态机中G个混淆状态一一对应,将各个混淆状态对应的十进制数转换为n位的二进制编码赋予该混淆状态,并分别定义混淆有限状态机的各混淆状态的名称;②‑3将G个混淆状态的名称以及G个混淆状态的二进制编码作为Kruskal算法的输入,确定汉明距离之和最小情况下的各混淆状态的连接关系,具体过程为:a.采用Kruskal算法自动计算每两个混淆状态的二进制编码之间的汉明距离以及各混淆状态与自身的汉明距离,将计算得到的G×G个汉明距离的值存放在G×G的邻接矩阵中,该邻接矩阵具有对称性,该邻接矩阵的主对角线上存放的汉明距离的值全为零;b.设定一个空的边集合E,选取邻接矩阵上三角部分或下三角部分,先从其内找到汉明距离最小的值以及它对应的两个混淆状态,将这两混淆状态形成的边放入边集合E中,然后找到除已经找到的汉明距离以外剩余汉明距离中最小的值以及它对应的两个混淆状态,判断这两个混淆状态形成的边与前一次放入边集合E中的边是否会形成回路,如果是则舍弃该边,如果否的话将该边也放入边集合E中,以此类推,直至连通所有混淆状态,此时边集合E中含有G‑1条边;c.输出邻接矩阵和G‑1条边确定的各混淆状态之间的连接关系;d.将各混淆状态之间的连接关系定义为双向连接,同时定义其中一个混淆状态为初始状态,设定4位二进制授权密钥Key,并设定向Camellia算法中输入的授权秘钥与混淆有限状态机中设置的4位二进制授权密钥Key相同时,混淆有限状态机输出值为64位二进制数据Ot,向Camellia算法中输入的授权秘钥与混淆有限状态机中设置的4位二进制授权密钥Key不相同时,混淆有限状态机输出值为不同于Ot的64位二进制数据;②‑4混淆有限状态机构建完成;③将构建得到的混淆有限状态机加载到Camellia算法中,使Camellia算法工作在混淆有限状态机的状态,通过输入端口向Camellia算法中输入授权秘钥,该授权秘钥与混淆有限状态机中设置的4位二进制授权密钥Key相同,此时混淆有限状态机生成与4位二进制授权密钥Key匹配的64位二进制数据Ot;④随机生成128位二进制加密主密钥K,采用128位二进制加密主密钥K产生26个子密钥,26个子密钥均为64位二进制数,分别记为kw1~kw4、kl1~kl4、k1~k18,具体过程如下:④‑1.设定两个中间参数KL和KR,令KL=K,KR为所有位均为0的128位二进制数,将KL与KR按位进行XOR操作,得到K1,将K1的第65位~第128位作为一个64位二进制数,记为K1l,K1的第1位~第64位作为另一个64位二进制数,记为K1r,将K1l与十六进制数据A09E667F3BCC908B作为Feistel网络的F函数的输入数据输入到Feistel网络的F函数中得到第一个Feistel网络的F函数输出数据,第一个Feistel网络的F函数输出数据为64位二进制数,将第一个Feistel网络的F函数输出数据与K1r按位进行XOR操作得到K2r,将K2r与十六进制数据B67AE8584CAA73B2为Feistel网络的F函数的输入数据输入到Feistel网络的F函数中得到第二个Feistel网络的F函数输出数据,将第二个Feistel网络的F函数输出数据与K1l按位XOR操作后得到K2l,将K2l与K2r拼接得到一个128位二进制数K2,K2l为K2的高64位,K2r为K2的低64位,将KL与K2按位进行XOR操作得到K3,将K3的第65位~第128位作为一个64位二进制数,记为K3l,K3的第1位~第64位作为另一个64位二进制数,记为K3r,将K3l与十六进制数据C6EF372FE94F82BE作为Feistel网络的F函数的输入数据输入到Feistel网络的F函数中得到第三个Feistel网络的F函数输出数据,第三个Feistel网络的F函数输出数据为64位二进制数,将第三个Feistel网络的F函数输出数据与K3r按位XOR操作后得到K4r,将K4r与十六进制数据54FF53A5F1D36F1C作为Feistel网络的F函数的输入数据输入到Feistel网络的F函数中得到第四个Feistel网络的F函数输出数据,第四个Feistel网络的F函数输出数据为64位二进制数,将第四个Feistel网络的F函数输出数据与K3l按位XOR操作后得到K4l,将K4l与K4r拼接得到一个128位二进制数据KA,K4l为KA的高64位,K4r为KA的低64位;④‑2.将KL循环左移0位得到的128位二进制数的高64位二进制数据记为kw1,低64位二进制数据记为kw2,将KL循环左移15位得到的128位二进制数的高64位二进制数据记为k3,低64位二进制数据记为k4,将KL循环左移45位得到的128位二进制数的高64位二进制数据记为k7,低64位二进制数据记为k8,将KL循环左移60位得到的128位二进制数的低64位二进制数据记为k10,将KL循环左移77位得到的128位二进制数的高64位二进制数据记为kl3,低64位二进制数据记为kl4,将KL循环左移94位得到的128位二进制数的高64位二进制数据记为k13,低64位二进制数据记为k14,将KL循环左移111位得到的128位二进制数的高64位二进制数据记为k17,低64位二进制数据记为k18,将KA循环左移0位得到的128位二进制数的高64位二进制数据记为k1,低64位二进制数据记为k2,将KA循环左移15位得到的128位二进制数的高64位二进制数据记为k5,低64位二进制数据记为k6,将KA循环左移30位得到的128位二进制数的高64位二进制数据记为kl1,低64位二进制数据记为kl2,将KA循环左移45位得到的128位二进制数的高64位二进制数据记为k9,将KA循环左移60位得到的128位二进制数的高64位二进制数据记为k11,低64位二进制数据记为k12,将KA循环左移94位得到的128位二进制数的高64位二进制数据记为k15,低64位二进制数据记为k16,将KA循环左移111位得到的128位二进制数的高64位二进制数据记为kw3,低64位二进制数据记为kw4;⑤获取待加密电路中需要加密的二进制数据的位数,该需要加密的二进制数据的位数不超过128,如果该集成电路中待加密的二进制数据的位数不足128位,则在其高位补0,使需要加密的二进制数据的位数为128,将128位的需要加密的二进制数据记为M;将M的高64位二进制数据作为一个64位二进制数记为M0l,将M的低64位二进制数据作为一个64位二进制数记为M0r;将M0l与子密钥kw1进行按位XOR操作得到的64位二进制数与64位二进制数据Ot进行按位XOR操作后得到64位二进制数据M1l;将M0r与子密钥kw2进行按位XOR操作得到64位二进制数M1r;⑥进行第一次加密迭代运算:将M1l与k1一起输入Feistel网络的F函数中,Feistel网络的F函数输出64位二进制数M2l与M1r进行按位XOR运算,得到64位二进制数M2r;将M2r与k2一起输入Feistel网络的F函数中,Feistel网络的F函数输出64位二进制数M2r'与M1l进行按位XOR运算,得到64位二进制数M2l;将M2l与k3一起输入Feistel网络的F函数中,Feistel网络的F函数输出64位二进制数M2l'与M2r进行按位XOR运算,得到64位二进制数M3r;将M3r与k4一起输入Feistel网络的F函数中,Feistel网络的F函数输出64位二进制数M3r'与M2l进行按位XOR运算,得到64位二进制数据M3l;将M3l与k5一起输入Feistel网络的F函数中,Feistel网络的F函数输出64位二进制数M3l'与M3r进行按位XOR运算,得到64位二进制数M4r;将M4r与k6一起输入Feistel网络的F函数中,Feistel网络的F函数输出64位二进制数M4r'与M3l进行按位XOR运算,得到64位二进制数据M4l;将M4r与kl1一起进行FL变换,FL变换后输出64位二进制数M5r,将M4l与kl2一起进行FL‑1变换,FL‑1变换后输出64位二进制数M5l;⑦进行第二次加密迭代运算:将M5r与k7一起输入Feistel网络的F函数中,Feistel网络的F函数输出64位二进制数M6r与M5l进行按位XOR运算,得到64位二进制数M6l;将M6l与k8一起输入Feistel网络的F函数中,Feistel网络的F函数输出64位二进制数M6l'与M5r进行按位XOR运算,得到64位二进制数M6r;将M6r与k9一起输入Feistel网络的F函数中,Feistel网络的F函数输出64位二进制数M6r'与M6l进行按位XOR运算,得到64位二进制数据M7l;将M7l与k10一起输入Feistel网络的F函数中,Feistel网络的F函数输出64位二进制数M7l'与M6r进行按位XOR运算,得到64位二进制数据M7r;将M7r与k11一起输入Feistel网络的F函数中,Feistel网络的F函数输出64位二进制数M7r'与M7l进行按位XOR运算,得到64位二进制数据M8l;将M8l与k12一起输入Feistel网络的F函数中,Feistel网络的F函数输出64位二进制数M8l'与M7r进行按位XOR运算,得到64位二进制数据M8r;将M8l与kl3一起进行FL变换,FL变换后输出64位二进制数M9l,将M8r与kl4一起进行FL‑1变换,FL‑1变换后输出64位二进制数M9r;⑧将步骤③生成的64位二进制数Ot循环右移16位得到64位二进制数Ot',⑨进行第三次加密迭代运算:将M9l与k13一起输入Feistel网络的F函数中,Feistel网络的F函数输出64位二进制数M10l与M9r进行按位XOR运算,得到64位二进制数据M10r;将M10r与k14一起输入Feistel网络的F函数中,Feistel网络的F函数输出64位二进制数M10r'与M9l进行按位XOR运算,得到64位二进制数据M10l;将M10l与k15一起输入Feistel网络的F函数中,Feistel网络的F函数输出64位二进制数M10l'与M10r进行按位XOR运算,得到64位二进制数据M11r;将M11r与k16一起输入Feistel网络的F函数中,Feistel网络的F函数输出64位二进制数M11r'与M10l进行按位XOR运算,得到64位二进制数据M11l;将M11l与k17一起输入Feistel网络的F函数中,Feistel网络的F函数输出64位二进制数M11l'与M11r进行按位XOR运算,得到64位二进制数据M12r;将M12r与k18一起输入Feistel网络的F函数中,Feistel网络的F函数输出64位二进制数M12r'与M11l进行按位XOR运算,得到64位二进制数据M12l;将64位二进制数M12l与kw3进行按位XOR操作,得到的64位二进制数与Ot'进行按位XOR操作,输出64位二进制数M12l',64位二进制数M12r与kw4进行按位XOR操作,得到的64位二进制数与Ot'进行按位XOR操作,得到64位二进制数M12r',将M12l'和M12r'拼接起来,M12l'为高64位,M12r'为低64位,得到加密后的128位二进制数C,加密完成。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于宁波大学科学技术学院,未经宁波大学科学技术学院许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201810383818.4/,转载请声明来源钻瓜专利网。