本发明涉及集成电路芯片领域,具体涉及一种数据加密方法、解密方法、保护装置、片内存储器及芯片。
背景技术:
随着信息化的不断进步,信息安全成为事关国家安全和人们生活的一个重要话题.芯片作为电子信息产品中的基础设施,以提供运算、控制、安全等服务为主要功能,越来越广的应用于信息系统的各个领域。
芯片内一般包含一个或多个基于集成电路技术的非易失性存储器(如ram、eeprom、flash)用以保存用户的个人敏感信息,包括用户个人身份信息、用于身份识别和通讯保密的密钥等。如何保护这些敏感信息不被非法获取是保护用户权益,保障相应信息系统正常运行的基本要求。
当前,针对存储器攻击的方法主要有半侵入式和侵入式攻击,通过直接使用扫描电镜(sem)进行观测,尝试从图像上辨别不同存储状态的单元并且定位单个存储器单元位置,或是直接探测存储器数据输出口数据,通过探针探测焊盘(pad)信号从而读取存储器内容。
技术实现要素:
针对存储器的攻击手段,本发明通过设计专门的保护装置,使进入存储器中的数据都进行加密处理,这样存储器中的数据都是密文,即使这些密文被攻击者非法获得,这些加密后的数据对攻击者来说是无法解密的,使攻击失去了意义。更具体的,本发明提出了一种基于非线性变化的加密方法,通过非线性转换、密钥生成、数据变换、异或等处理,使存储器的数据为密文,这样增加了攻击的难度.从而大大提高了芯片的安全性。本发明实现数据加密、解密的技术方案如下。
根据第一方面,一种实施例中提供一种数据加密方法,
对各组数据进行变换;
将变换后的各组数据通过对应组的非线性转换算法进行转换,得到非线性输出数据;
将n位数据密钥与片内存储器地址进行处理后生成n位中间密钥;
将n位中间密钥每4位为一组划分为n/4个组,对各组中间密钥进行变换,将变换后的中间密钥通过对应组的非线性转换算法进行转换得到非线性输出密钥;
将非线性输出数据与非线性输出密钥进行异或得到加密数据。
一种实施例中,所述将变换后的各组数据通过对应组的非线性转换算法进行转换,具体为:n位数据中,低位数据[n/2-1:0]所对应的各组分别采用不同类型的非线性转换算法,高位数据[n-1:n/2]所对应的各组分别采用不同类型的非线性转换算法。
一种实施例中,所述非线性转换算法为4位非线性转换算法。
一种实施例中,所述n为32。
一种实施例中,所述非线性转换算法的类型为4种,分别为第一非线性转换、第二非线性转换、第三非线性转换和第四非线性转换。
一种实施例中,32位数据的高16位数据和低16位数据所对应各组分别采用的非线性转换算法的类型为:低[3:0]位数据和高[19:16]位数据均采用第一非线性转换,低[7:4]位数据和高[23:20]位数据均采用第二非线性转换,低[11:8]位数据和高[27:24]位数据均采用第三非线性转换,低[15:12]位数据和高[31:28]位数据均采用第四非线性转换。
根据第二方面,一种实施例中提供一种对上述的加密方法进行解密的解密方法,包括步骤:
读取片内存储器的n位密文数据,将n位密文数据与非线性输出密钥进行异或操作,获得n位异或数据;
将n位异或数据每4位为一组划分为n/4个组,将各组数据通过对应组的非线性逆转换算法进行数据逆转换,得到逆转换数据;
将逆转换数据进行逆变换得到解密数据。
一种实施例中,所述将各组数据通过对应组的非线性逆转换算法进行数据逆转换,具体为:n位异或数据中,低位数据[n/2-1:0]所对应的各组分别采用不同类型的非线性逆转换算法,高位数据[n-1:n/2]所对应的各组分别采用不同类型的非线性逆转换算法。
一种实施例中,所述非线性逆转换算法为4位非线性逆转换算法。
一种实施例中,所述n为32。
一种实施例中,所述非线性逆转换算法的类型为4种,分别为第一逆非线性转换、第二逆非线性转换、第三逆非线性转换和第四逆非线性转换。
一种实施例中,32位异或数据的高16位数据和低16位数据所对应各组分别采用的非线性逆转换算法的类型为:低[3:0]位数据和高[19:16]位数据均采用第一逆非线性转换,低[7:4]位数据和高[23:20]位数据均采用第二逆非线性转换,低[11:8]位数据和高[27:24]位数据均采用第三逆非线性转换,低[15:12]位数据和高[31:28]位数据均采用第四逆非线性转换。
根据第三方面,一种实施例中提供一种片内存储器的保护装置,包括加密单元和解密单元;
所述加密单元采用上述的非线性加密方法对n位数据先进行加密,再将加密数据存储于片内存储器中;
所述解密单元采用上述的解密方法对读取片内存储器的n位密文数据进行解密。
根据第四方面,一种实施例中提供一种片内存储器,包括上述的保护装置,所述保护装置用于对进入片内存储器中的数据进行加密处理,及用于对读取片内存储器中的密文数据进行解密处理。
根据第五方面,一种实施例中提供一种芯片,包括上述的一个或多个片内存储器,用以存储敏感信息。
本发明通过基于非线性变化的加密方法对写入存储器的数据进行非线性转换、密钥生成、数据变换、异或等处理,使存储器的数据为密文,增加了存储器攻击的难度。
附图说明
图1为实施例一的加密示意图;
图2为实施例二的解密示意图;
图3为实施例四的片内存储器原理示意图。
具体实施方式
下面通过具体实施方式结合附图对本发明作进一步详细说明。
实施例一:
本例提供一种数据加密方法,通过该加密方法将n位数据存储于片内存储器之前先对该n位数据进行加密处理,这样,片内存储器中的数据都是密文,即使这些密文被攻击者非法获得,这些加密后的数据对攻击者来说是无法解密的,使攻击失去了意义。
本例提供的数据加密方法先将n位数据每4位为一组划分为n/4个组,对各组数据进行加密,再将加密数据存储于片内存储器中,其中,对各组数据进行加密包括如下步骤:
s1:对各组数据进行变换。
s2:将变换后的各组数据通过对应组的非线性转换算法进行转换,得到非线性输出数据。
其中,将变换后的各组数据通过对应组的非线性转换算法进行转换的过程中,针对n位数据,低位数据[n/2-1:0]所对应的各组分别采用不同类型的非线性转换算法,高位数据[n-1:n/2]所对应的各组分别采用不同类型的非线性转换算法,其中,非线性转换算法为4位非线性转换算法。
s3:将n位数据密钥与片内存储器地址进行处理后生成n位中间密钥。
s4:将n位中间密钥每4位为一组划分为n/4个组,对各组中间密钥进行变换,将变换后的中间密钥通过对应组的非线性转换算法进行转换得到非线性输出密钥。
s5:将非线性输出数据与非线性输出密钥进行异或得到加密数据。
下面以n为32举例说明上述步骤s1-s5具体实现的过程,加密示意图如图1所示。
针对32位数据以8位为单位进行加密,则32位数据分成了4大组:[7:0]、[15:8]、[23:16]和[31:24],然后再将每组中数据以4位为一组,也即是,将32位数据每4位为一组划分为8个组,对各组数据进行加密,具体过程如下。
步骤1:对各组数据进行变换,该步骤中各组数据通过变换操作t1、变换操作t2、变换操作t3和变换操作t4的变换过程如下:
因32位数据wdata[31:0],每四位为一组,共分为8组,其中,每一种变换操作对应两组数据的变换,变换如下,变换后的数据记为si[31:0]:
变换操作t1的变换过程如下:
si[3:0]={wdata[0],wdata[3]^wdata[6],wdata[5],wdata[2]};
si[7:4]={wdata[5]^wdata[1],wdata[7],wdata[4],wdata[6]};
变换操作t2的变换过程如下:
si[11:8]={wdata[9],wdata[12],wdata[13],wdata[15]^wdata[10]};
si[15:12]={wdata[14],wdata[8]^wdata[13],wdata[10],wdata[11]};
变换操作t3的变换过程如下:
si[19:16]={wdata[18]^wdata[22],wdata[20],wdata[23],wdata[17]};
si[23:20]={wdata[19],wdata[16],wdata[21]^wdata[17],wdata[22]};
变换操作t4的变换过程如下:
si[27:24]={wdata[26],wdata[27],wdata[30]^wdata[25],wdata[29]};
si[31:28]={wdata[25],wdata[24]^wdata[29],wdata[28],wdata[31]};
步骤2:将变换后的各组数据通过对应组的非线性转换算法进行转换,得到非线性输出数据。
本例设计了4位非线性转换算法,为了提高加密的强度,本例设计了4种类型的4位非线性转换算法,分别为第一非线性转换、第二非线性转换、第三非线性转换和第四非线性转换。
其中,第一非线性转换(s1)、第二非线性转换(s2)、第三非线性转换(s3)和第四非线性转换(s4)各对应的非线性转换算法表分别如下所示:
s1
s2
s3
s4
将变换后的各组数据通过对应组的非线性转换算法进行转换的过程,本例的32位数据的高16位数据和低16位数据所对应各组分别采用的非线性转换算法的类型为:低[3:0]位数据和高[19:16]位数据均采用第一非线性转换,低[7:4]位数据和高[23:20]位数据均采用第二非线性转换,低[11:8]位数据和高[27:24]位数据均采用第三非线性转换,低[15:12]位数据和高[31:28]位数据均采用第四非线性转换。
输入数据si[31:0]经过非线性转换后对应的8个组输出为so[31:0],即:
si[3:0]经过s1最终输出结果为so[3:0];
si[7:4]经过s2最终输出结果为so[7:4];
si[11:8]经过s3最终输出结果为so[11:8];
si[15:12]经过s4最终输出结果为so[15:12];
si[19:16]经过s1最终输出结果为so[19:16];
si[23:20]经过s2最终输出结果为so[23:20];
si[27:24]经过s3最终输出结果为so[27:24];
si[31:28]经过s4最终输出结果为so[31:28]。
为了保证同一明文地址不同得到密文不同,本例通过以下步骤3和步骤4生成密钥。
步骤3:将32位数据密钥与片内存储器地址进行处理后生成32位中间密钥key_temp。
具体的,输入key_i[31:0]要与地址addr_in[16:0]进行相应处理生成32位中间密钥key_temp,其中,地址addr_in[16:0]对应存储器中的地址addr[18:2],处理方法如下:
key_temp[7]=key_i[6]^key_i[0]^addr_in[10];
key_temp[6]=key_i[1]^addr_in[9]^addr_in[11];
key_temp[5]=key_i[3]^addr_in[8]^addr_in[7];
key_temp[4]=key_i[7]^addr_in[6]^addr_in[5];
key_temp[3]=key_i[4]^key_i[2]^addr_in[2];
key_temp[2]=key_i[0]^addr_in[3]^addr_in[12];
key_temp[1]=key_i[5]^addr_in[4]^addr_in[13];
key_temp[0]=key_i[2]^addr_in[1]^addr_in[0];
key_temp[15]=key_i[13]^addr_in[0]^addr_in[9];
key_temp[14]=key_i[11]^key_i[9]^addr_in[8]^addr_in[10];
key_temp[13]=key_i[10]^addr_in[3]^addr_in[14];
key_temp[12]=key_i[8]^addr_in[4]^addr_in[7];
key_temp[11]=key_i[9]^addr_in[2]^addr_in[15];
key_temp[10]=key_i[12]^key_i[8]^addr_in[5];
key_temp[9]=key_i[15]^addr_in[6]^addr_in[16];
key_temp[8]=key_i[14]^addr_in[1]^addr_in[11];
key_temp[23]=key_i[16]^addr_in[10]^addr_in[13];
key_temp[22]=key_i[17]^addr_in[4]^addr_in[8];
key_temp[21]=key_i[19]^key_i[21]^addr_in[2]^addr_in[6];
key_temp[20]=key_i[18]^addr_in[3]^addr_in[7];
key_temp[19]=key_i[20]^addr_in[5]^addr_in[16];
key_temp[18]=key_i[22]^addr_in[1]^addr_in[14];
key_temp[17]=key_i[23]^key_i[18]^addr_in[0];
key_temp[16]=key_i[21]^addr_in[9]^addr_in[10];
key_temp[31]=key_i[24]^addr_in[1]^addr_in[4];
key_temp[30]=key_i[28]^addr_in[7]^addr_in[5];
key_temp[29]=key_i[27]^addr_in[3]^addr_in[2];
key_temp[28]=key_i[25]^key_i[31]^addr_in[0]^addr_in[6];
key_temp[27]=key_i[31]^addr_in[8]^addr_in[12];
key_temp[26]=key_i[26]^addr_in[9]^addr_in[11];
key_temp[25]=key_i[30]^addr_in[10]^addr_in[15];
key_temp[24]=key_i[29]^key_i[24]^addr_in[5]^addr_in[16]。
步骤4:将32位中间密钥每4位为一组划分为8个组,对各组中间密钥进行变换,将变换后的中间密钥ki[31:0]通过对应组的非线性转换算法进行转换得到非线性输出密钥key_o[31:0]。
其中,上述32位中间密钥key_temp[31:0]每四位为一组,共分为8组,进行数据变换得到变换后的中间密钥ki[31:0]的过程如下:
ki[3:0]={key_temp[0],key_temp[7],key_temp[5],key_temp[2]};
ki[7:4]={key_temp[1],key_temp[3],key_temp[4],key_temp[6]};
ki[11:8]={key_temp[9],key_temp[11],key_temp[13],key_temp[15]};
ki[15:12]={key_temp[14],key_temp[8],key_temp[10],key_temp[12]};
ki[19:16]={key_temp[18],key_temp[20],key_temp[22],key_temp[17]};
ki[23:20]={key_temp[19],key_temp[16],key_temp[21],key_temp[23]};
ki[27:24]={key_temp[26],key_temp[24],key_temp[30],key_temp[29]};
ki[31:28]={key_temp[25],key_temp[27],key_temp[28],key_temp[31]}。
ki[31:0]经过非线性转换后对应的8个组输出为key_o[31:0],即:
ki[3:0]经过s1最终输出结果为key_o[3:0];
ki[7:4]经过s2最终输出结果为key_o[7:4];
ki[11:8]经过s3最终输出结果为key_o[11:8];
ki[15:12]经过s4最终输出结果为key_o[15:12];
ki[19:16]经过s1最终输出结果为key_o[19:16];
ki[23:20]经过s2最终输出结果为key_o[23:20];
ki[27:24]经过s3最终输出结果为key_o[27:24];
ki[31:28]经过s4最终输出结果为key_o[31:28]。
步骤5:将非线性输出数据so[31:0]与非线性输出密钥key_o[31:0]进行异或得到加密数据wdata_i[31:0],即:wdata_i[31:0]=so[31:0]^key_o[31:0]。
实施例二:
基于实施例一,本例提供一种对实施例一的加密方法进行解密的解密方法,具体包括以下步骤,对应的流程图如图2所示。
s100:读取片内存储器的n位密文数据,将n位密文数据与非线性输出密钥进行异或操作,获得n位异或数据。
本步骤中,非线性输出密钥的生成过程请参考实施例一的步骤s3和步骤s4,此处不作赘述。
s200:将n位异或数据每4位为一组划分为n/4个组,将各组数据通过对应组的非线性逆转换算法进行数据逆变换,得到逆变换数据。
本步骤中,将各组数据通过对应组的非线性逆转换算法进行数据逆变换的过程中,n位异或数据中,低位数据所对应的各组分别采用不同类型的非线性逆转换算法,高位数据所对应的各组分别采用不同类型的非线性逆转换算法,其中,非线性逆转换算法为4位非线性逆转换算法。
s300:将逆转换数据进行变换得到解密数据。
同样的,本例以n为32举例说明解密的具体过程。
步骤1:读取片内存储器32位密文数据,将32位密文数据与非线性输出密钥进行异或操作,获得32位异或数据,具体过程如下:
ri[7:0]=rdata_o[7:0]^key_o[7:0];
ri[15:8]=rdata_o[15:8]^key_o[15:8];
ri[23:16]=rdata_o[23:16]^key_o[23:16];
ri[31:24]=rdata_o[31:24]^key_o[31:24];
其中,rdata_o[31:0]为读取的密文数据,key_o[31:0]为实施例一中的非线性输出密钥,ri[31:0]为异或数据。
步骤2::32位异或数据每4位为一组划分为n/4个组,将各组数据通过对应组的非线性逆转换算法进行数据逆转换,得到逆转换数据。
针对实施例一的4种类型的4位非线性转换算法,本例也提供4种类型的4位非线性逆转换算法,分别为第一逆非线性转换、第二逆非线性转换、第三逆非线性转换和第四逆非线性转换。
其中,第一逆非线性转换(s1inv)、第二逆非线性转换(s2inv)、第三逆非线性转换(s3inv)和第四逆非线性转换(s4inv)各对应的非线性转换逆转换算法表分别如下所示:
s1inv
s2inv
s3inv
s4inv
本例的32位异或数据的高16位数据和低16位数据所对应各组分别采用的非线性逆转换算法的类型为:低[3:0]位数据和高[19:16]位数据均采用第一逆非线性转换,低[7:4]位数据和高[23:20]位数据均采用第二逆非线性转换,低[11:8]位数据和高[27:24]位数据均采用第三逆非线性转换,低[15:12]位数据和高[31:28]位数据均采用第四逆非线性转换。
异或数据ri[31:0]每4位为一组,经过非线性逆转换算法后,对应的8个逆非线性转换输出的逆转换数据ro[31:0]分别如下:
ri[3:0]经过s1inv最终输出结果为ro[3:0];
ri[7:4]经过s2inv最终输出结果为ro[7:4];
ri[11:8]经过s3inv最终输出结果为ro[11:8];
ri[15:12]经过s4inv最终输出结果为ro[15:12];
ri[19:16]经过s1inv最终输出结果为ro[19:16];
ri[23:20]经过s2inv最终输出结果为ro[23:20];
ri[27:24]经过s3inv最终输出结果为ro[27:24];
ri[31:28]经过s4inv最终输出结果为ro[31:28]。
步骤4:将逆转换数据进行逆变换操作得到解密数据。
该步骤中,32位数据ro[31:0],每8位为一组,共分为4组,各组数据通过逆变换操作t1inv、逆变换操作t2inv、逆变换操作t3inv和逆变换操作t4inv进行变换,得到解密数据rdata[31:0],过程如下:
逆变换操作t1inv过程如下:
rdata[7:0]={ro[6],ro[4],ro[2],ro[5],ro[2]^ro[4],ro[0],ro[7]^ro[1],ro[3]};
逆变换操作t2inv过程如下:
rdata[15:8]={ro[8]^ro[13],ro[15],ro[9],ro[10],ro[12],ro[13],ro[10],ro[14]^ro[9]};
逆变换操作t3inv过程如下:
rdata[23:16]={ro[17],ro[20],ro[21]^ro[16],ro[18],ro[23],ro[19]^ro[20],ro[16],ro[22]};
逆变换操作t4inv过程如下:
rdata[31:24]={ro[28],ro[25]^ro[31],ro[24],ro[29],ro[26],ro[27],ro[31],ro[30]^ro[24]}。
实施例三:
基于实施例一和实施例二,本例提供一种片内存储器的保护装置,该保护装置包括加密单元和解密单元,其中,加密单元采用实施例一所述的加密方法对n位数据先进行加密,再将加密数据存储于片内存储器中;解密单元采用实施例二所述的解密方法对读取片内存储器的n位密文数据进行解密;本例的加密单元的具体加密过程请参考实施例一,本例的解密单元的解密过程请参考实施例二,本例不作赘述。
实施例四:
基于实施例三,本例提供一种片内存储器,该片内存储器包括实施例三的保护装置,其原理图如图3所示,通过该保护装置对进入片内存储器中的数据时行加密处理,及对读取片内存储器的密文数据进行解密处理;通过保护装置使存储器的数据为密文,增加了攻击存储器的难度。
基于本例提供的片内存储器,本例还提供一种芯片,该芯片包括一个或多个基于集成电路技术的片内存储器,片内存储器用以存储用户的敏感信息,如,用户个人身份信息、用于身份识别和通讯保密的密钥等,由于片内存储器的数据为密文,从而大大提高了芯片的安全性。
以上应用了具体个例对本发明进行阐述,只是用于帮助理解本发明,并不用以限制本发明。对于本发明所属技术领域的技术人员,依据本发明的思想,还可以做出若干简单推演、变形或替换。