CN109714152B - 基于大型仿射编码的白盒aes加密方法 - Google Patents
基于大型仿射编码的白盒aes加密方法 Download PDFInfo
- Publication number
- CN109714152B CN109714152B CN201910043431.9A CN201910043431A CN109714152B CN 109714152 B CN109714152 B CN 109714152B CN 201910043431 A CN201910043431 A CN 201910043431A CN 109714152 B CN109714152 B CN 109714152B
- Authority
- CN
- China
- Prior art keywords
- bit
- vector
- bit vector
- transformation function
- affine transformation
- 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
Images
Landscapes
- Compression Or Coding Systems Of Tv Signals (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明公开了一种基于大型仿射编码的白盒AES加密方法,其步骤包括:1.构造外部输入编码;2.构建两个仿射变换函数;3.生成解码表De;4.从高级加密标准AES的状态矩阵中随机选取未选过的一列状态向量;5.构建三个仿射变换函数;6.生成加密表MSK;7.判断是否选完高级加密标准AES的状态矩阵中所有的列向量;8.构建一个仿射变换函数;9.生成移位表SR;10.生成了用来在白盒环境下执行高级加密标准AES一轮加密所需的48张查找表。本发明采用大型仿射编码保护查找表,通过查表进行数据加密,不会泄露中间值,使得本发明在数据加密时具有安全性高,加密效率快的优点。
Description
技术领域
本发明属于信息技术领域,更进一步涉及信息安全技术领域中的一种基于大型仿射编码的白盒高级加密标准AES(Advanced Encryption Standard)加密方法。本发明将白盒AES加密方法应用于不安全终端的加解密中,将密钥嵌入到查找表中,使攻击者不能直接通过内存分析提取密钥,从而避免了攻击者拥有合法用户的所用的功能,保护了合法用户的权利。
背景技术
随着通信及信息安全技术的发展,笔记本、平板电脑等终端产品使用越来越广泛,人们对于视频、音频等数字化信息的需求越来越大,攻击者获取信息的渠道越来越多,甚至可以通过分析内存或电路,直接获取到密钥。这严重损坏了合法用户的权利,因此我们希望得到一种在不安全的终端有效保护密钥方法。而白盒密码模型假设攻击者可以完全访问密码算法的执行过程,获得密码算法执行时全部的细节,甚至改变执行的中间值。为了保护合法用户的权利,如何构造一种安全的白盒加密方法成为了当前白盒密码领域的一大研究重点。
罗瑞等人在其发表的论文“一种应用非线性混淆的基于查找表的白盒AES实现”(上海交通大学硕士毕业论文2015)中公开了一种改进的白盒AES加密方法。该方法将行移位操作转换成查找表,采用了16-32bit的查找表,用32-bit的仿射变换混淆列混合操作的输出,将级联的非线性编码嵌入到查找表中,提供更大的白盒安全性。由于该方法采用了非线性编码来混淆输出,所以该方案引入了异或表进行非线性解码和异或操作。该方法能够抵抗已有的BGE攻击和De Mulder攻击,防止密钥被提取。该方法存在的不足之处是,在查找表组合分析时,嵌入的仿射编码被取消,在进行密钥提取攻击时对组合表的分析变为对16-bit的仿射变换的分析,使攻破该方案所需的计算量大大下降,从而使得安全性降低,并且该方案中异或操作由查找表完成,查找表的次数大大增加,降低了效率。
桂林电子科技大学在其申请的专利文献“一种基于查表的白盒密码非线性编码保护方法”(专利申请号:201510202424.0专利公布号:CN 105591734 A)中公布了一种基于查找表形式的白盒密码的非线性保护方法。该方法将m个变元分成n组,每组16-bit,引入n个非线性变换,将非线性变换以及加密玥、S盒和列混合操作集合在一张表中,为了避免查找表过大,将列混合矩阵拆成2个子矩阵,应用在两张表中。将对应于列混合矩阵的2张查找表的输出直接进行异或,之后对异或后的n/2个输出进行m-bit的非线性编码,得到本轮的输出。该方法存在的不足之处是,使用可逆的非线性变换函数对列混淆后的数据进行扩散,通过计算得到混淆的后的数据,使得加密效率降低。
发明内容
本发明的目的在于针对上述已有技术的不足,提出一种基于大型仿射编码的白盒AES加密方法。
实现本发明目的的思路是,打破AES的10轮加密的轮次界限,将行移位的执行提前到加密钥和字节变换之前,将第一轮的行移位结合到外部编码中,将第二轮至第十轮行移位上移至前一轮,并将AES每轮的操作封装在两种类型的表中,为了保护表的安全性,本发明为每张表增加输入编码和输出编码,输出编码和输入编码均采用大型的仿射变换,为了支持另外两张表,我们引入第三张表用来解码行移位操作的混编码并采用新的不同的级联编码,从而在使用查找表进行加密时,使得加密的中间值被隐藏,加密更安全。
本发明的具体实现步骤如下:
(1)构造外部输入编码:
(1a)将输入的128-bit数据,按每8bits数据为一组,分成16组,依次将每4组数据排成一行,对每行数据进行行移位操作,得到4个32-bit向量,将4个32-bit向量按照行序级联成一个128-bit的向量;
(1b)按照下式,对128-bit的向量进行混淆编码,得到一个128-bit的向量:
(2)构建两个用于输出编码仿射变换函数:
(2a)用随机生成的16个8×8的可逆矩阵组成的128×128对角矩阵,构建第一个仿射变换函数;
(2b)用随机生成的16个8×8的可逆矩阵组成的128×128对角矩阵,构建第二个仿射变换函数;
(3)生成对行移位操作的混淆编码解码和仿射编码的解码表De:
(3a)随机选取高级加密标准AES的状态矩阵中未选过的状态向量;
(3b)构建一个长度为256的数组,将该数组中的每个元素初始化为一个8-bit向量;
(3c)对行移位操作的混淆编码进行解码操作:
从长度为256的数组中的随机选取一个未被选过的8-bit向量,将其作为输入向量,对8-bit输入向量进行解码操作,得到解码后的一个128-bit向量;
(3d)判断状态向量在状态矩阵中的行号是否小于2,若是,则执行步骤(3e),否则,执行步骤(3f);
(3e)用第一个仿射变换函数对128-bit的向量进行仿射编码,得到一个128-bit的向量;
(3f)用第二个仿射变换函数对128-bit的向量进行仿射编码,得到一个128-bit的向量;
(3g)判断是否选完长度为256的数组中的所有8-bit向量,若是,则执行步骤(3h),否则,执行步骤(3c);
(3h)判断是否选完高级加密标准AES的状态矩阵中的每个状态向量,若是,执行步骤(4),否则,执行步骤(3a);
(4)从高级加密标准AES的状态矩阵中,随机选取未选过的一列状态向量;
(5)构建三个用于混淆编码和输出编码的仿射变换函数:
(5a)用随机生成的4个8×8的可逆矩阵组成的32×32对角矩阵,构建第一个仿射变换函数;
(5b)用随机生成的4个8×8的可逆矩阵组成的32×32对角矩阵,构建第二个仿射变换函数;
(5c)将随机生成的32×32的可逆矩阵,作为第三个仿射变换函数的线性部分,将随机生成一个的32-bit的向量作为第三个仿射变换函数的常量部分;
(6)生成用于进行加密钥、字节变换和列混淆操作的加密表MSK:
(6a)从所选的一列状态向量中随机选取一个未被选过的状态向量;
(6b)构建一个长度为65536的数组,数组的每个元素初始化为一个16bit向量;
(6c)对输入向量进行输入解码操作:
从长度为65536的数组中的随机选取一个16-bit向量,将其作为输入向量,用16-bit的仿射变换函数对16-bit输入向量进行解码操作,得到解码后的一个16-bit向量,将16-bit的向量均分成2个8-bit向量,将2个8-bit向量进行异或操作,得到一个8-bit向量;
(6d)对8-bit向量进行加密钥、字节变换和列混淆操作:
将8-bit向量与8-bit轮密钥进行异或操作,得到一个8-bit的向量,将其进行字节变换操作,得到一个8-bit的向量,对其进行列混淆操作,得到一个32-bit的向量,用第三个仿射变换函数对32-bit向量进行混淆编码,得到一个32-bit的向量;
(6e)判断状态向量在状态矩阵列的行号是否小于2,若是,则执行步骤(6f),否则,执行步骤(6g);
(6f)用第一个仿射变换对32-bit的输出向量进行仿射编码,得到一个32-bit的向量;
(6g)用第二个仿射变换对32-bit的输出向量进行仿射编码,得到一个32-bit的向量;
(6h)判断是否选完长度为65536的数组中的所有16-bit向量,若是,则执行步骤(6i),否则,执行步骤(6c);
(6i)判断是否选完所选的一列状态向量中所有的状态向量,若是,则执行步骤(7),否则,执行步骤(6a);
(7)判断是否选完高级加密标准AES的状态矩阵中所有的列向量,若是,则执行步骤(8),否则,执行步骤(4);
(8)构建一个用于混淆编码的仿射变换函数:
随机生成一个128×128的可逆矩阵L,将其作为仿射变换函数的线性部分,随机生成一个128-bit的零向量B,将其作为仿射变换函数的常量部分;
(9)生成用于进行行移位操作移位表SR:
(9a)随机选取高级加密标准AES状态矩阵中的一个状态向量;
(9b)构建一个长度为65536的数组,数组的每个元素初始化一个16-bit向量;
(9c)对输入向量进行输入解码操作:
从长度为65535的数组中的随机选取一个16-bit向量,将其作为输入向量,对16-bit输入向量进行解码操作,得到解码后的一个16-bit向量,将16-bit的向量均分成2个8-bit向量,将2个8-bit向量进行异或操作,得到一个8-bit向量;
(9d)对8-bit向量进行行移位操作:
对8-bit向量进行混淆解码,得到一个32-bit的向量,用一个128×32的矩阵左乘32-bit的向量,得到一个128-bit的向量;
(9e)用仿射变换函数对128-bit的向量进行混淆编码操作,得到一个128-bit的向量,将其写入长度为65536的数组中;
(9f)判断是否选完长度为65536的数组中的所有16-bit向量,若是,则执行步骤(9g),否则,执行步骤(9c);
(9g)判断是否选完状态矩阵中所有的状态向量,若是,则执行步骤(10),否则,执行步骤(9a);
(10)得到用来于在白盒环境下执行高级加密标准AES一轮加密所需的48张查找表。
本发明与现有技术相比具有以下优点:
第一,由于本发明通过构建两个仿射变换函数,用于对生成的解码表De进行128-bit仿射输出编码,克服了现有技术在查找表组合分析时,嵌入的仿射编码被取消,在进行密钥提取攻击时对组合表的分析变为对16-bit的仿射变换的分析,使攻破该方案所需的计算量大大下降,降低安全性的问题,使得本发明构造的三种查找表在进行加密操作时,根据明文密文的对应进行密钥恢复时计算量大大增加,使得本发明所使用密钥具有更安全的优点。
第二,由于本发明生成3种类型的查找表,通过查找3种类型的查找表可用于对明文进行加密,所述3种类型的表分别是对行移位操作的混淆编码解码和仿射编码的解码表De、用于进行加密钥、字节变换和列混淆操作的加密表MSK和用于进行行移位操作移位表SR,克服了现有技术中使用可逆的非线性变换函数对列混淆后的数据进行扩散,通过计算得到混淆的后的数据,加密效率降低的问题,使得本发明,使用3种类型的查找表对明文数据进行加密,只需要查表的时间,不需要计算,具有加密效率高的优点。
附图说明
图1是本发明的流程图;
图2为本发明步骤3生成解码表De的流程图;
图3为本发明步骤3解码表De的结构框图;
图4为本发明步骤6生成加密表MSK的流程图;
图5为本发明步骤6加密表MSK的结构框图;
图6为本发明步骤9生成移位表SR的流程图;
图7为本发明步骤9移位表SR的结构框图;
具体实施方式
下面结合附图对本发明作进一步的描述。
参照附图1,本发明的具体步骤作进一步的描述。
步骤1,构造外部输入编码。
将输入的128-bit数据,按每8bits数据为一组,分成16组,依次将每4组数据排成一行,对每行数据进行行移位操作,得到4个32-bit向量,将4个32-bit向量按照行序级联成一个128-bit的向量。
所述行移位操作是指,改变AES加密的轮次界限,将除第十轮外每轮的加密钥操作下移至下一轮,将第一轮之前的加密钥放到的第一轮,将每轮的行移位提前到加密钥和字节变换之前,将第一轮的行移位结合到外部编码中,将第二轮至第十轮的行移位提前一轮,使得除第十轮外,每轮的操作步骤为加密钥、字节变换、列混合和行移位。由于将行移位提至加密钥和字节变换之前,那么在执行加密钥操作之前,需要将每轮的密钥先进行行移位操作。
按照下式,对128-bit的向量进行混淆编码,得到一个128-bit的向量:
步骤2,构建两个用于输出编码的仿射变换函数。
用随机生成的16个8×8的可逆矩阵组成的128×128对角矩阵,构建第一个仿射变换函数。
用随机生成的16个8×8的可逆矩阵组成的128×128对角矩阵,构建第二个仿射变换函数。
所述的仿射变换函数是指,将随机生成的16个8×8可逆矩阵组建成一个128×128的对角矩阵,作为仿射变换函数的线性部分,将随机生成一个的128-bit的零向量,作为仿射变换函数的常量部分。
步骤3,生成对行移位操作的混淆编码解码和仿射编码的解码表De。
参照附图2,对生成16张解码表De的具体步骤作进一步的描述。
(3.1)随机选取高级加密标准AES的状态矩阵中未选过的状态向量。
所述状态矩阵是指,高级加密标准AES将128-bit的明文输入每8bit为一组,分成16组,将其依次排列成一个4行4列的状态矩阵,将每个8-bit明文称为一个状态向量。
(3.2)构建一个长度为256的数组,将该数组中的每个元素初始化为一个8-bit向量。
(3.3)对行移位操作的混淆编码进行解码操作。
从长度为256的数组中的随机选取一个未被选过的8-bit向量,将其作为输入向量,参照附图3,对8-bit输入向量进行混淆解码操作,得到解码后的一个128-bit向量。
所述解码操作是指,计算混淆编码采用的128-bit的仿射变换函数的逆仿射变换函数,利用矩阵分块的方法将其分成16个8-bit子变换函数,将其作为解码操作的仿射变换函数。
所述矩阵分块操作方法是指,其具体步骤如下:
第1步,将仿射变换函数的线性部分的矩阵每8列为一组,分成16组128×8的子矩阵。
第2步,将仿射变换函数的常量部分的矩阵每8-bit为一组,分成16组8-bit的子向量。
第3步,用一个128×8的子矩阵和一个8-bit的向量组成一个8-bit的子变换函数。
(3.4)判断状态向量在状态矩阵中的行号是否小于2,若是,则执行本步骤的(3.5),否则,执行本步骤的(3.6)。
(3.5)用第一个仿射变换函数对解码后的128-bit的向量进行级联仿射编码,得到如图3所示的16个8-bit的向量。
所述的仿射编码是指,用仿射变换函数对128-bit的向量进行编码,得到一个128-bit的向量,将其与随机生成的128-bit向量S进行异或操作,得到一个128-bit的向量,将该向量写入长度为256的数组中,将128-bit向量S与该仿射变换函数的常数部分进行异或操作,将异或操作后的128-bit向量写入该仿射变换函数的常数部分的向量中。其中向量S是随机生成的,它与128-bit向量异或其实是在改变仿射编码的常量部分,使得对应状态矩阵的前2行的8张De表的仿射编码具有相同的线性部分,不同的常量部分。仿射变换的常量部分的向量在循环的过程中不断变化,循环结束时,变为前8张表仿射编码的常量部分的异或结果,也是加密表MSK的输入数据的前128-bit的仿射解码的常量部分。
(3.6)用第二个仿射变换函数对解码后的128-bit的向量进行级联仿射编码,得到如图3所示的16个8-bit的向量。
仿射变换的常量部分的向量在循环过程中是不断变化的,循环结束时,仿射变换常量部分的向量是后8张表仿射编码的常量部分向量的异或结果,也是加密表MSK的输入数据的后128-bit的仿射解码的常量部分。
(3.7)判断是否选完长度为256的数组中的所有8-bit向量,若是,则执行本步骤的(3.8),否则,执行本步骤的(3.3)。
(3.8)判断是否选完状态矩阵中的每个状态向量,若是,执行步骤4,否则,执行本步骤的(3.1)。
参照附图3,解码表De是一张8-bit输入,128-bit输出的用来对行移位操作的混淆进行解码操作的查找表。本发明对16张解码表De的输出采用两种不同的128-bit仿射编码,在加密时,对每8张采用相同仿射编码的De表输出直接进行异或操作,得到两个128-bit的输入,由于2个128-bit的数据的仿射编码的线性部分不同,所以不可以直接异或,从而保证攻击者无法获得加密过程中的有效中间值,使得在查找表组合分析时,128-bit的仿射编码无法被取消。
步骤4,从高级加密标准AES的状态矩阵中随机选取未选过的一列状态向量。
步骤5,构建三个用于混淆编码和输出编码的仿射变换函数。
用随机生成的4个8×8的可逆矩阵组成的32×32对角矩阵,构建第一个仿射变换函数。用于对应于状态矩阵前两行的加密表MSK的输出做级联的仿射编码。
用随机生成的4个8×8的可逆矩阵组成的32×32对角矩阵,构建第二个仿射变换函数。用于对应于状态矩阵后两行的加密表MSK的输出做级联的仿射编码。
所述的仿射变换函数是指,将随机生成的4个8×8可逆矩阵组建成一个32×32的对角矩阵,作为仿射变换函数的线性部分,将随机生成一个的32-bit的零向量作为仿射变换函数的常量部分。用于对应于状态矩阵后两行的加密表MSK的输出做级联的仿射编码。
将随机生成的32×32的可逆矩阵,作为第三个仿射变换函数的线性部分,将随机生成一个的32-bit的向量作为第三个仿射变换函数的常量部分。用于对列混淆操作的输出数据进行混淆。
步骤6,生成用于进行加密钥、字节变换和列混淆操作的加密表MSK。
参照附图4,对生成16张加密表MSK的具体步骤作进一步的描述。
(6.1)从所选的一列状态向量中随机选取一个未被选过的状态向量。
(6.2)构建一个长度为65536的数组,数组的每个元素初始化为一个16bit向量。其中16-bit向量为数组下标的二进制表示。
(6.3)对输入向量进行输入解码操作。
从长度为65536的数组中的随机选取一个16-bit向量,将其作为输入向量,用16-bit的仿射变换函数对16-bit输入向量进行解码操作,得到解码后的一个16-bit向量,将16-bit的向量均分成2个8-bit向量,将2个8-bit向量进行异或操作,得到一个8-bit向量。
所述的16-bit的仿射变换函数是指,其具体执行步骤为如下:
第1步,利用矩阵分块的方法将第一个128-bit仿射变换函数的逆函数分成16个子变换函数1,将其依次排列。
第2步,利用矩阵分块的方法将第二个128-bit仿射变换函数的逆函数分成16个子变换函数2,将其依次排列。
第3步,从两组16个子变换函数中分别选取位次相同的一个子变换函数。
第4步,将所选的子变换函数1的线性部分的矩阵去掉全零块得到一个8×8的矩阵,将所选的子变换函数2的线性部分的矩阵去掉全零块得到一个8×8的矩阵,将两个8×8矩阵组成一个16×16的矩阵,将两个子变换函数的常量部分的8-bit向量链接成一个16-bit向量。
第5步,将16×16的矩阵与16-bit向量组成一个16-bit的仿射变换函数。
(6.4)对8-bit向量进行加密钥、字节变换和列混淆操作。
将解码后的8-bit向量与8-bit轮密钥进行异或操作,得到一个8-bit的向量,将其进行字节变换操作,得到一个8-bit的向量,对其进行列混淆操作,得到一个32-bit的向量,用第三个仿射变换函数对32-bit向量进行混淆编码,得到一个32-bit的向量。
所述列混淆操作是指,在第1轮至第9轮本发明使用一个32×32的可逆矩阵来表示列混淆操作,由于高级加密标准AES的第10轮加密中没有列混淆操作,所以采用一个的单位矩阵代替列混淆操作。
(6.5)判断状态向量在状态矩阵列的行号是否小于2,若是,则执行本步骤的(6.6),否则,执行本步骤的(6.7)。
(6.6)用第一个仿射变换对32-bit的输出向量进行仿射编码,得到如图5所示的4个8-bit的向量。
(6.7)用第二个仿射变换对32-bit的输出向量进行仿射编码,得到如图5所示的4个8-bit的向量。
所述的仿射编码是指,用仿射变换对32-bit的向量进行仿射编码,得到一个32-bit的向量,将其与随机选择的32-bit向量s进行异或操作,得到一个32-bit向量,将其写入长度为65536的数组中,将32-bit向量s与该仿射变换函数的常数部分进行异或操作,将异或操作后的32-bit向量写入该仿射变换函数的常数部分的向量。
(6.8)判断是否选完长度为65536的数组中的所有16-bit向量,若是,则执行本步骤的(6.9),否则,执行本步骤的(6.3)。
(6.9)判断是否选完所选的一列状态向量中所有的状态向量,若是,则执行步骤7,否则,执行本步骤的(6.1)。
参照附图5,加密表MSK是一张16-bit输入,32-bit输出的用来进行加密钥、字节变换和列混淆操作的查找表。
步骤7,判断是否选完状态矩阵中所有的列向量,若是,则执行步骤8,否则,执行步骤4。
步骤8,构建一个用于混淆编码的仿射变换函数。
随机生成一个128×128的可逆矩阵L,将其作为仿射变换函数的线性部分,随机生成一个128-bit的零向量B,将其作为仿射变换函数的常量部分。将其用于对行移位操作的输出数据做混淆编码。
步骤9,生成用于进行行移位操作移位表SR。
参照附图6,对生成16张移位表SR的具体步骤作进一步的描述。
(9.1)随机选取高级加密标准AES状态矩阵中的一个状态向量。
(9.2)构建一个长度为65536的数组,数组的每个元素初始化一个16-bit向量;
(9.3)对输入向量进行解码操作。
从长度为65535的数组中的随机选取一个16-bit向量,将其作为输入向量,参照附图7,对16-bit输入向量进行解码操作,得到解码后的一个16-bit向量,将16-bit的向量均分成2个8-bit向量,将2个8-bit向量进行异或操作,得到一个8-bit向量。
(9.4)对8-bit向量进行行移位操作。
对8-bit向量进行混淆解码,得到一个32-bit的向量,用一个128×32的矩阵左乘32-bit的向量,得到一个如图7所示的128-bit的向量。
所述行移位操作是指,在加密的第一轮至第9轮,本发明用一个128×128的矩阵来表示行移位操作,在第十轮,由于本发明将高级加密标准AES第10轮加密的行移位操作上移至第9轮完成,所以第10轮行移位操作用128×128单位矩阵表示。
(9.5)用仿射变换函数对128-bit的向量进行混淆编码操作,得到一个如图7所示的16个8-bit的向量,将其连接成一个128-bit的向量,将其写入长度为65536的数组中。
(9.6)判断是否选完长度为65536的数组中的所有16-bit向量,若是,则执行本步骤的(9.7),否则,执行本步骤的(9.3)。
(9.7)判断是否选完状态矩阵中所有的状态向量,若是,则执行步骤10,否则,执行本步骤的(9.1)。
参照附图7,移位表SR是一张16-bit输入,128-bit输出的用来进行行移位操作的查找表。
步骤10,生成了用来在白盒环境下执行高级加密标准AES一轮加密所需的48张查找表。
重复执行步骤2至步骤10共九次,生成用来在白盒环境下执行高级加密标准AES所需的480张查找表。
下面通过使用480张查找表,对128bit的明文进行高级加密标准AES加密的过程作进一步的描述。
第1步,对128-bit明文执行步骤1,得到编码后的128-bit向量Y。
第2步,将128-bit向量Y组成一个状态矩阵,每个状态向量都是一个8bit子向量。以每个状态向量为De表的输入,查找相应的输出向量。将得到的16个128-bit的向量进行异或操作,得到两个128-bit的向量S1和S2。
第3步,将向量S1和向量S2分别组成2个状态矩阵,两个状态矩阵中具有相同行和列位置的状态向量一一对应。将一一对应的2个状态向量连接成一个16bit的向量,将其作为加密表MSK的输入,查找对应的加密表MSK得到相应的32bit输出向量,将得到的16个32-bit的向量进行异或以及级联操作,得到2个128-bit的向量S3和S4。
第4步,将向量S3和向量S4分别组成2个状态矩阵,两个状态矩阵中具有相同行和列位置的状态向量一一对应。将一一对应的2个状态向量连接成一个16bit的向量,将其作为移位表SR的输入,查找对应的加密表MSK得到相应的32bit输出向量,将得到的16个128-bit的向量进行异或操作,得到1个128-bit的向量Y。
第5步,重复第2步至第4步9次得到最终的128-bit密文Y。
Claims (10)
1.一种基于大型仿射编码的白盒AES加密方法,其特征在于,将高级加密标准AES每轮的操作封装在加密表MSK和移位表SR中,为每张加密表MSK和移位表SR设置输入编码和输出编码,输出编码和输入编码均采用大型仿射变换,构造解码表De对行移位操作的混淆编码解码和仿射编码,该方法的步骤包括如下:
(1)构造外部输入编码:
(1a)将输入的128-bit数据,按每8bits数据为一组,分成16组,依次将每4组数据排成一行,对每行数据进行行移位操作,得到4个32-bit向量,将4个32-bit向量按照行序级联成一个128-bit的向量;
(1b)按照下式,对128-bit的向量进行混淆编码,得到一个128-bit的向量:
(2)构建两个用于输出编码仿射变换函数:
(2a)用随机生成的16个8×8的可逆矩阵组成的128×128对角矩阵,构建第一个仿射变换函数;
(2b)用随机生成的16个8×8的可逆矩阵组成的128×128对角矩阵,构建第二个仿射变换函数;
(3)生成对行移位操作的混淆编码解码和仿射编码的解码表De:
(3a)随机选取高级加密标准AES的状态矩阵中未选过的状态向量;
(3b)构建一个长度为256的数组,将该数组中的每个元素初始化为一个8-bit向量;
(3c)对行移位操作的混淆编码进行解码操作:
从长度为256的数组中随机选取一个未被选过的8-bit向量,将其作为输入向量,对8-bit输入向量进行解码操作,得到解码后的一个128-bit向量;
(3d)判断状态向量在状态矩阵中的行号是否小于2,若是,则执行步骤(3e),否则,执行步骤(3f);
(3e)用第一个仿射变换函数对步骤(3c)解码后的128-bit的向量进行仿射编码,得到一个128-bit的向量;
(3f)用第二个仿射变换函数对步骤(3c)解码后的128-bit的向量进行仿射编码,得到一个128-bit的向量;
(3g)判断是否选完长度为256的数组中的所有8-bit向量,若是,则执行步骤(3h),否则,执行步骤(3c);
(3h)判断是否选完高级加密标准AES的状态矩阵中的每个状态向量,若是,执行步骤(4),否则,执行步骤(3a);
(4)从高级加密标准AES的状态矩阵中,随机选取未选过的一列状态向量;
(5)构建三个用于混淆编码和输出编码的仿射变换函数:
(5a)用随机生成的4个8×8的可逆矩阵组成的32×32对角矩阵,构建第一个仿射变换函数;
(5b)用随机生成的4个8×8的可逆矩阵组成的32×32对角矩阵,构建第二个仿射变换函数;
(5c)将随机生成的32×32的可逆矩阵,作为第三个仿射变换函数的线性部分,将随机生成一个的32-bit的向量作为第三个仿射变换函数的常量部分;
(6)生成用于进行加密钥、字节变换和列混淆操作的加密表MSK:
(6a)从所选的一列状态向量中随机选取一个未被选过的状态向量;
(6b)构建一个长度为65536的数组,数组的每个元素初始化为一个16bit向量;
(6c)对输入向量进行输入解码操作:
从长度为65536的数组中随机选取一个16-bit向量,将其作为输入向量,用16-bit的仿射变换函数对16-bit输入向量进行解码操作,得到解码后的一个16-bit向量,将16-bit的向量均分成2个8-bit向量,将2个8-bit向量进行异或操作,得到一个8-bit向量;
(6d)对步骤(6c)得到的8-bit向量进行加密钥、字节变换和列混淆操作:
将步骤(6c)得到的8-bit向量与8-bit轮密钥进行异或操作,得到一个8-bit的向量,将其进行字节变换操作,得到一个8-bit的向量,对其进行列混淆操作,得到一个32-bit的向量,用第三个仿射变换函数对32-bit向量进行混淆编码,得到一个32-bit的向量;
(6e)判断状态向量在状态矩阵列的行号是否小于2,若是,则执行步骤(6f),否则,执行步骤(6g);
(6f)用步骤(5a)构建的第一个仿射变换函数对32-bit的输出向量进行仿射编码,得到一个32-bit的向量;
(6g)用步骤(5b)构建的第二个仿射变换函数对32-bit的输出向量进行仿射编码,得到一个32-bit的向量;
(6h)判断是否选完长度为65536的数组中的所有16-bit向量,若是,则执行步骤(6i),否则,执行步骤(6c);
(6i)判断是否选完所选的一列状态向量中所有的状态向量,若是,则执行步骤(7),否则,执行步骤(6a);
(7)判断是否选完高级加密标准AES的状态矩阵中所有的列向量,若是,则执行步骤(8),否则,执行步骤(4);
(8)构建一个用于混淆编码的仿射变换函数:
随机生成一个128×128的可逆矩阵L,将其作为仿射变换函数的线性部分,随机生成一个128-bit的零向量B,将其作为仿射变换函数的常量部分;
(9)生成用于进行行移位操作移位表SR:
(9a)随机选取高级加密标准AES状态矩阵中的一个状态向量;
(9b)构建一个长度为65536的数组,数组的每个元素初始化一个16-bit向量;
(9c)对输入向量进行输入解码操作:
从长度为65535的数组中随机选取一个16-bit向量,将其作为输入向量,对16-bit输入向量进行解码操作,得到解码后的一个16-bit向量,将16-bit的向量均分成2个8-bit向量,将2个8-bit向量进行异或操作,得到一个8-bit向量;
(9d)对8-bit向量进行行移位操作:
对8-bit向量进行混淆解码,得到一个32-bit的向量,用一个128×32的矩阵左乘32-bit的向量,得到一个128-bit的向量;
(9e)用仿射变换函数对128-bit的向量进行混淆编码操作,得到一个128-bit的向量,将其写入长度为65536的数组中;
(9f)判断是否选完长度为65536的数组中的所有16-bit向量,若是,则执行步骤(9g),否则,执行步骤(9c);
(9g)判断是否选完状态矩阵中所有的状态向量,若是,则执行步骤(10),否则,执行步骤(9a);
(10)得到用来于在白盒环境下执行高级加密标准AES一轮加密所需的48张查找表。
2.根据权利要求1所述的基于大型仿射编码的白盒AES加密方法,其特征在于,步骤(2a)、步骤(2b)中所述的仿射变换函数是指,将随机生成的16个8×8可逆矩阵组建成一个128×128的对角矩阵,作为仿射变换函数的线性部分,将随机生成一个的128-bit的零向量,作为仿射变换函数的常量部分。
3.根据权利要求1所述的基于大型仿射编码的白盒AES加密方法,其特征在于,步骤(3a)、步骤(4)、步骤(9a)中所述的状态矩阵是指,高级加密标准AES将128-bit的明文输入每8bit为一组,分成16组,将其依次排列成一个4行4列的状态矩阵,将每个8-bit明文称为一个状态向量。
4.根据权利要求1所述的基于大型仿射编码的白盒AES加密方法,其特征在于,步骤(3c)中所述解码操作是指,计算混淆编码采用的128-bit的仿射变换函数的逆仿射变换函数,利用矩阵分块的方法将其分成16个8-bit子变换函数,将其作为解码操作的仿射变换函数。
5.根据权利要求1所述的基于大型仿射编码的白盒AES加密方法,其特征在于,步骤(3e)、步骤(3f)中所述的仿射编码是指,用仿射变换函数对128-bit的向量进行编码,得到一个128-bit的向量,将其与随机生成的128-bit向量S进行异或操作,得到一个128-bit的向量,将该向量写入长度为256的数组中,将128-bit向量S与该仿射变换函数的常数部分进行异或操作,将异或操作后的128-bit向量写入该仿射变换函数的常数部分的向量中。
6.根据权利要求4所述的基于大型仿射编码的白盒AES加密方法,其特征在于,所述矩阵分块操作方法是指,其具体步骤如下:
第一步,将仿射变换函数的线性部分的矩阵每8列为一组,分成16组128×8的子矩阵;
第二步,将仿射变换函数的常量部分的矩阵每8-bit为一组,分成16组8-bit的子向量;
第三步,用一个128×8的子矩阵和一个8-bit的子向量组成一个8-bit的子变换函数。
7.根据权利要求1所述的基于大型仿射编码的白盒AES加密方法,其特征在于,步骤(5a)、步骤(5b)中所述的仿射变换函数是指,将随机生成的4个8×8可逆矩阵组建成一个32×32的对角矩阵,作为仿射变换函数的线性部分,将随机生成一个的32-bit的零向量作为仿射变换函数的常量部分。
8.根据权利要求1所述的基于大型仿射编码的白盒AES加密方法,其特征在于,步骤(6c)中所述的16-bit的仿射变换函数是指,其具体步骤为如下:
第一步,利用矩阵分块的方法将第一个128-bit仿射变换函数的逆函数分成16个子变换函数1,将其依次排列;
第二步,利用矩阵分块的方法将第二个128-bit仿射变换函数的逆函数分成16个子变换函数2,将其依次排列;
第三步,从两组16个子变换函数中分别选取位次相同的一个子变换函数;
第四步,将所选的子变换函数1的线性部分的矩阵去掉全零块得到一个8×8的矩阵,将所选的子变换函数2的线性部分的矩阵去掉全零块得到一个8×8的矩阵,将两个8×8矩阵组成一个16×16的矩阵,将两个子变换函数的常量部分的8-bit向量链接成一个16-bit向量;
第五步,将16×16的矩阵与16-bit向量组成一个16-bit的仿射变换函数。
9.根据权利要求1所述的基于大型仿射编码的白盒AES加密方法,其特征在于,步骤(6f)、步骤(6g)中所述的仿射编码是指,用仿射变换对32-bit的向量进行仿射编码,得到一个32-bit的向量,将其与随机选择的32-bit向量s进行异或操作,得到一个32-bit向量,将其写入长度为65536的数组中,将32-bit向量s与该仿射变换函数的常数部分进行异或操作,将异或操作后的32-bit向量写入该仿射变换函数的常数部分的向量。
10.根据权利要求1所述的基于大型仿射编码的白盒AES加密方法,其特征在于,步骤(9e)中所述的混淆编码是指,用仿射变换函数对128-bit的向量进行编码,得到一个128-bit的向量,将其与随机生成的128-bit向量S进行异或操作,得到一个128-bit的向量,将128-bit向量S与仿射变换函数的常数部分的128-bit向量B进行异或操作,将异或操作后的128-bit向量替换仿射变换函数的常数部分的向量B。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910043431.9A CN109714152B (zh) | 2019-01-17 | 2019-01-17 | 基于大型仿射编码的白盒aes加密方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910043431.9A CN109714152B (zh) | 2019-01-17 | 2019-01-17 | 基于大型仿射编码的白盒aes加密方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109714152A CN109714152A (zh) | 2019-05-03 |
CN109714152B true CN109714152B (zh) | 2020-04-07 |
Family
ID=66262174
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910043431.9A Active CN109714152B (zh) | 2019-01-17 | 2019-01-17 | 基于大型仿射编码的白盒aes加密方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109714152B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116155620B (zh) * | 2023-04-14 | 2023-07-18 | 深圳市聚力得电子股份有限公司 | 一种刷卡器交易数据安全传输方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018010843A1 (de) * | 2016-07-12 | 2018-01-18 | Giesecke+Devrient Mobile Security Gmbh | White box aes implementierung |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2443786A1 (en) * | 2009-06-19 | 2012-04-25 | Irdeto B.V. | White-box cryptographic system with configurable key using intermediate data modification |
JP6502945B2 (ja) * | 2013-12-20 | 2019-04-17 | コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. | 安全なデータ変換 |
US9692592B2 (en) * | 2015-06-05 | 2017-06-27 | Apple Inc. | Using state reordering to protect against white box attacks |
-
2019
- 2019-01-17 CN CN201910043431.9A patent/CN109714152B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018010843A1 (de) * | 2016-07-12 | 2018-01-18 | Giesecke+Devrient Mobile Security Gmbh | White box aes implementierung |
Non-Patent Citations (2)
Title |
---|
一种应用非线性混淆的基于查找表的白盒AES实现;罗睿;《中国优秀硕士学位论文全文数据库 信息科技辑》;20160715;全文 * |
白盒攻击环境下的任务规划***安全传输方法;崔西宁等;《计算机应用》;20170210;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN109714152A (zh) | 2019-05-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Kumar et al. | Development of modified AES algorithm for data security | |
Benvenuto | Galois field in cryptography | |
US20120170739A1 (en) | Method of diversification of a round function of an encryption algorithm | |
JP6406350B2 (ja) | 暗号処理装置、および暗号処理方法、並びにプログラム | |
US20120121083A1 (en) | Encryption apparatus and method | |
KR101393806B1 (ko) | 다단계 물리적 복제 불가 함수 시스템 | |
CN108964872B (zh) | 一种基于aes的加密方法及装置 | |
CN110071794B (zh) | 一种基于aes算法的信息加密方法、***及相关组件 | |
CN111555862B (zh) | 基于掩码保护的随机冗余轮函数的白盒aes实现方法 | |
JP2015191106A (ja) | 暗号処理装置、および暗号処理方法、並びにプログラム | |
CN105099666A (zh) | 混淆轮边界的白盒密码***和方法 | |
Agrawal et al. | Elliptic curve cryptography with hill cipher generation for secure text cryptosystem | |
RU2124814C1 (ru) | Способ шифрования блоков цифровых данных | |
CN105184115A (zh) | 用于将隐式完整性或可信性检查包括到白箱实现中的方法 | |
Gabidulin et al. | On improving security of GPT cryptosystems | |
WO2015146430A1 (ja) | 暗号処理装置、および暗号処理方法、並びにプログラム | |
CN109714152B (zh) | 基于大型仿射编码的白盒aes加密方法 | |
Xu et al. | A white-box AES-like implementation based on key-dependent substitution-linear transformations | |
CN116796345A (zh) | 加解密方法、装置、设备及存储介质 | |
CN115987490A (zh) | 一种适用于arx结构的轻量级分组密码算法白盒化构造方法 | |
CN107493164B (zh) | 一种基于混沌***的des加密方法和*** | |
Kumar et al. | Implementation of AES algorithm using VHDL | |
RU2188513C2 (ru) | Способ криптографического преобразования l-битовых входных блоков цифровых данных в l-битовые выходные блоки | |
KR100350207B1 (ko) | 디지털 데이터의 엘-비트 입력 블록들을 엘-비트 출력비트들로 암호 변환하는 방법 | |
CN114254372B (zh) | 数据加密处理方法、***及电子设备 |
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 |