一种对数据进行加密的方法与流程

文档序号:13141838阅读:416来源:国知局
一种对数据进行加密的方法与流程

本发明涉及数据加密领域,尤其是涉及利用地址信息进行加密的方案。



背景技术:

现有的处理器通常不对使用的内存数据进行加密,但是部分处理器可以使用aes等对称加密算法对内存数据进行加密。比如amd的sev方案中,通过对不同的虚拟机使用不同的加密密钥实现对不同虚拟机之间数据逻辑上的隔离以及虚拟机和主机之间数据隔离。即使使用了对称加密算法对内存数据加密,在存在使用相同密钥产生大量被加密数据的前提下,攻击者也可以通过检测密文数据的碰撞,从而找到明文数据之间的相关性。

例如,现有技术中采用的国密sm4算法。图1是采用国密sm4加密算法对数据进行加密的方法流程示意图;在sm4算法中,sm4算法首先利用非线性算法从128比特密钥产生32个32比特的轮密钥。然后加密或解密过程都是一个32轮的非线性变换过程,其中每轮都将一个128比特的输入数据变换为一个128比特的输出数据,上一轮的输出将作为下一轮的输入。而每轮中,不同的轮密钥相当于选择了一个不同的非线性变换函数。算法流程如图1所示,其中虚箭头对应轮密钥初始化过程,向下实心细箭头对应加密过程,向上实心细箭头对应解密过程。如前所述,在采用对称加密算法的情况下,攻击者可以通过检测密文数据的碰撞,从而找到明文数据之间的相关性。

amdzen处理器使用的加密机制,利用地址与明文混淆,然后使用aes对称加密中的ecb模式加密,一定程度上增加了破解难度。但是攻击者仍然可以通过对相同明文在不同地址做加密,找到混淆规律,从而使混淆加密退化为普通的aes-ecb对称加密,最终使用针对普通aes-ecb对称加密的攻击手段进行攻击。



技术实现要素:

本发明的目的在于,在对不同地址数据进行了与地址相关的加密同时,降低加密数据与地址的相关性,从而解决现有技术中加密与地址无关或者容易找到加密规律从而破解加密的问题。

为了使得不同地址下的加密数据之间没有明显相关性,我们提供了一种对数据进行加密的方法,该方法包括:利用非线性算法从初始密钥产生多个轮密钥;利用数据的地址信息对多个轮密钥中的至少一个进行混淆,得到该地址下混淆轮密钥;使用混淆轮密钥对该地址内数据进行加密操作。

优选地,利用数据的地址信息对多个轮密钥中的至少一个进行混淆,得到该地址下混淆轮密钥包括:

对地址信息进行变换,将变换后的地址信息对多个轮密钥中的至少一个进行混淆。

优选地,对地址信息进行变换,将变换后的地址信息对多个轮密钥中的至少一个进行混淆包括:

利用数据的地址信息产生至少一个和轮密钥长度相同的数据,并利用该数据与轮密钥做混淆,得到该地址下混淆轮密钥。

优选地,地址信息为m比特,轮密钥为n比特,对地址信息进行变换包括:

当m>n时,将m比特地址的高n比特与低n比特进行异或运算,得到一个n比特数据。

当m<n时,将m比特地址信息左移n-m位然后与原m比特地址信息进行异或运算,得到一个n比特数据。

进一步优选地,对地址信息进行变换还包括:

对得到的n比特数据进行循环左移运算,或循环右移运算。

优选地,地址信息的地址位数多于轮密钥的地址位数,对地址信息进行变换包括:

从地址信息中直接选取一个和轮密钥长度相同的连续的数据。

优选地,利用非线性算法从初始密钥产生多个轮密钥包括:

利用非线性算法从128比特初始密钥产生32个32比特的轮密钥。

优选地,利用非线性算法从初始密钥产生多个轮密钥包括:

利用非线性算法从128比特初始密钥产生10个128比特的轮密钥。

本发明的有益效果是:本方法将地址信息线性变换后与分块对称加密算法计算过程中生成的轮密钥做混淆,从而使得加密数据与参与混淆的地址信息无明显的线性关系,有效的增加了数据的安全性。对轮密钥做混淆,不同地址的数据仅增加一步对轮密钥的混淆操作,减少了计算时间。

附图说明

图1为现有技术的一种国密sm4加密算法对数据进行加密的方法流程示意图;

图2为本发明实施例提供的一种对数据进行加密的方法流程示意图;

图3为本发明实施例提供的一种对sm4轮密钥地址混淆加密流程示意图。

具体实施方式

下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。

在本发明中,为了使得不同地址下的加密数据之间没有明显相关性,我们首先利用原来的算法产生全局的轮密钥,接下来根据加解密数据的地址信息对轮密钥做线性变换,得到此地址下使用的混淆过的新的轮密钥,最后使用新的轮密钥对此地址内数据进行加解密操作。具体过程如图2所示。

图2为本发明实施例提供的一种对数据进行加密的方法流程示意图;如图2所示,该方法包括:

步骤s101:利用非线性算法从初始密钥产生多个轮密钥;

步骤s102:利用数据的地址信息对所述多个轮密钥中的至少一个进行混淆,得到该地址下混淆轮密钥;

具体地,利用数据的地址信息对多个轮密钥中的至少一个进行混淆,得到该地址下混淆轮密钥包括:

对地址信息进行变换,将变换后的地址信息对多个轮密钥中的至少一个进行混淆。

进一步具体地,对地址信息进行变换,将变换后的地址信息对多个轮密钥中的至少一个进行混淆包括:

利用数据的地址信息产生至少一个和轮密钥长度相同的数据,并利用该数据与轮密钥做混淆,得到该地址下混淆轮密钥。

更进一步具体地,地址信息为m比特,对地址信息进行变换包括:

当m>n时,将m比特地址的高n比特与低n比特进行异或运算,得到一个n比特数据。

当m<n时,将m比特地址信息左移n-m位然后与原m比特地址信息进行异或运算,得到一个n比特数据。

当m<n时,对地址信息进行变换还包括:

对地址信息左移若干位,或者高位取固定值形成和轮密钥长度相同的数据。

基于上述运算,对地址信息进行变换还包括:

对得到的n比特数据进行循环左移运算,或循环右移运算。

当m>n时,对地址信息进行变换还包括:

从地址信息中直接选取一个和轮密钥长度相同的连续的数据。

步骤s103:使用所述混淆轮密钥对该地址内数据进行加密操作。

下面结合图3进行描述。图3为本发明实施例提供的一种sm4轮密钥地址混淆加密流程示意图。

在图3的实施例中,我们以国密sm4算法为例进行描述。在步骤s101,国密sm4算法首先利用非线性算法从128比特密钥产生32个32比特的轮密钥。

接下来在步骤s102,根据加解密数据的地址信息对产生的轮密钥中的至少一个进行混淆,得到此地址下使用的混淆过的新的轮密钥,最后在步骤s103使用新的轮密钥对此地址内数据进行加解密操作,

新的算法流程如图3所示,其中新增加的混淆函数,使用原来算法产生的轮密钥和加解密数据的地址作为输入,产生新的轮密钥,其中虚箭头对应轮密钥初始化过程,向下的细的实箭头对应加密过程,向上的细的实箭头对应解密过程,向下的粗的实箭头对应地址的混淆过程。

在该实施例中,设加密数据是64位地址,采用国密sm4算法产生的是32位轮密钥,我们需要利用加密数据产生一个至少一个和轮密钥长度相同的数据,即产生32位的数据,我们可以采取如下变换:

设加密数据64位地址ad=(ad0,ad1),

首先在步骤s101,sm4算法计算出的全局轮密钥enrk=(rk0,rk1,…,rk31),derk=(rk31,rk30,…,rk0),其中,rki为第i轮计算使用的轮密钥。

在步骤s102,用地址信息对至少一个轮密钥进行混淆。在一个例子中,首先对64位地址ad高32比特与低32比特数据做异或,生成32位地址相关的key,记作ak,ak=ad0⊕ad1,

接下来,循环左移ak,并令aki=ak<<<i,i=0,1,…,31。在另一例子中,也可以对ak进行循环右移。

利用sm4生成的轮密钥rki与aki计算新的轮密钥rk’i,

得到了新的轮密钥enrk’=(rk’0,rk’1,…,rk’31)与derk’=(rk’31,rk’30,…,rk’0),

在步骤s103,最后,利用新的轮密钥enrk’与derk’对数据进行加解密运算。

在上述实施例中,对于步骤s102,我们还可以采取另一种方式对地址信息进行变换:

当地址信息的地址位数多于轮密钥的地址位数,可以从地址信息中直接选取一段和轮密钥长度相同的连续的数据,例如取64位中的bit38-bit7。

对上述和轮密钥长度相同的连续的数据,我们可以继续进行多种变换,例如循环左移运算或者循环右移运算,产生一段和轮密钥长度相同的连续的新数据。

在其他实施例中,国密sm4算法还可以换成aes-128算法,在aes-128算法中,首先利用非线性算法从128比特密钥产生10个128比特的轮密钥。其余过程与国密sm4算法相同,此处不在赘述。

下面我们对本发明方案进行验证。

假设物理内存地址0x8ea1a0处存放的为攻击者需要获取的用户数据,并假设数据明文为16进制的01,23,45,67,89,ab,cd,ef,fe,dc,ba,98,76,54,32,10,假设攻击者可以读取用户物理内存地址存储的数据,并且可以操作物理内存地址0xdcfae0,对比现有方案与采用上述实施例轮密钥混淆地址实的方案,可以得到表1用户物理内存地址数据与攻击者物理内存地址数据的关系:

表1用户密文数据与攻击者密文数据关系

上面表格包含三个部分,其中第一部分代表攻击者观测到的用户物理内存在不同加密方案下的数据,其中加密方案分别采用现有的“未加密”,“未混合地址信息的直接ecb模式”,“将地址信息混合入明文后的ecb加密模式”以及本方案“将地址信息混合入轮密钥后的ecb加密模式”共4种;第二部分代表攻击者明文与用户明文相同时在4种加密方案下攻击者观测到的物理内存数据;第三部分代表攻击者物理内存数据与用户物理内存数据相同时,攻击者可以获取的明文数据。

对比表格内容,可以得出结论:

(1)当cpu不对数据进行加密保护,攻击者可以直接从物理内存获取用户数据;

(2)当cpu对数据直接采用sm4的ecb模式进行加密保护,这时攻击者可以通过分析密文,采集密文中的碰撞信息(不同区域出现相同密文)来猜测用户数据之间的关系,甚至可以通过将自己操控的物理内存数据改为用户物理内存数据,从而直接得到用户的明文数据;

(3)当cpu对明文数据与地址简单混淆,并采用sm4的ecb模式进行加密保护。攻击者可以将自己操控的物理内存数据改为用户物理内存数据,获取带有简单变化后的用户明文数据,通过猜测明文数据以及地址关系,仍然可以还原完整的用户数据;

(4)当cpu对数据采用混合了地址信息的sm4轮密钥的ecb模式进行加密保护,攻击者即使将自己操控的物理内存数据改为用户物理内存数据,获取的对应明文与真正的用户明文数据也没有任何明显的线性关系,证明了本方法的加密方式优于现有的内存数据保护机制。

为了进一步证明该方法的安全性,使用nist(国家标准与技术研究所)工具分析地址混淆方案对整体安全性的影响。nist工具是一个统计包,可测试由用作保密随机或伪随机数发生器的硬件和软件产生的任意长的二进制序列的随机性。

我们按递增规律生成从0到999,999共计1,000,000组加解密数据,每组128比特,总长度128,000,000比特,其中变化规律有以下6种:

(1)明文有规律变化不使用地址混淆加密

(2)明文有规律变化同时使用地址混淆加密

(3)密文有规律变化不使用地址混淆解密

(4)密文有规律变化同时使用地址混淆解密

(5)明文不变使用有规律变化地址混淆加密

(6)密文不变使用有规律变化地址混淆加密

测试两个随机密钥下的随机性结果,测试结果如下表:

表2key={0x01234567,0x89abcdef,0xfedcba98,0x76543210}nist统计结果

表3key={0x102496aa,0x56444c70,0x5dae977a,0xc8c5c229}nist统计结果

根据nist文档,当计算结果p>0.01时,判定序列是随机的。以上9个测试项目的计算结果在进行地址混淆加密前后都是大于0.01,证明和地址混淆加密方案整体安全性不低于原有不混淆地址加密的方案。

以上的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1