CN104657288A - 一种spi flash加密接口及加密数据的读写方法 - Google Patents
一种spi flash加密接口及加密数据的读写方法 Download PDFInfo
- Publication number
- CN104657288A CN104657288A CN201510094016.8A CN201510094016A CN104657288A CN 104657288 A CN104657288 A CN 104657288A CN 201510094016 A CN201510094016 A CN 201510094016A CN 104657288 A CN104657288 A CN 104657288A
- Authority
- CN
- China
- Prior art keywords
- data
- addr
- dec
- module
- enc
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims description 19
- 230000002093 peripheral effect Effects 0.000 title abstract 2
- 238000006243 chemical reaction Methods 0.000 claims abstract description 37
- 238000000151 deposition Methods 0.000 claims description 3
- 238000012546 transfer Methods 0.000 claims description 3
- 238000013461 design Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- MLLUMKXNINTJAC-UHFFFAOYSA-N 1,3-dioxoisoindole-4-sulfonic acid Chemical compound OS(=O)(=O)C1=CC=CC2=C1C(=O)NC2=O MLLUMKXNINTJAC-UHFFFAOYSA-N 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
Landscapes
- Storage Device Security (AREA)
Abstract
本发明涉及一种SPI FLASH加密接口,包括命令模块、数据模块、加密模块、解密模块、状态机模块以及协议转换模块,命令模块与系统总线相连;数据模块与系统总线、命令模块、加密模块以及解密模块相连;加密模块与数据模块、命令模块以及状态机模块相连;解密模块与数据模块、状态机模块相连;状态机模块与命令模块、加密模块、解密模块以及协议转换模块相连;协议转换模块与状态机模块、SPI FLASH相连。将传统的按字加密方式改成按字节采用不同算法分别加密的方式,取消了字节间的加解密依赖关系,使得软件对SPI FLASH的操作大为简化,在保证系统保密安全的基础上有效降低了软件操作的复杂度,提升了整个系统的效率。
Description
技术领域
本发明属于电子芯片技术领域,涉及一种电子芯片的加密设备及方法,尤其是一种针对SPI FLASH的加密接口及读写方法;采用该加密接口及读写方法,能够实现对SPI FLASH的按字节读写,以及按字节加密,提高了系统访问SPI FLASH的效率。
背景技术
在一个加密主控芯片系统中,通常需要将启动程序部分的数据置于跟主控芯片一体封装的SPI NORFLASH中,以提高系统的安全系数。上述启动程序的数据在写入SPI FLASH之前必然需要对其进行加密处理,所以当读出上述数据后必然要进行反向的解密操作才能得到真实的数据。
现有技术中的加密算法,是针对整个字进行的加密运算,使得加密后的数据与其存储地址以及同一字内的位于不同字节的位有相关性。虽然SPI FLASH的接口标准支持按字节写的命令,但是采用上述按字加密的方式使得同一字内的不同字节之间产生依赖关系,丧失了按字节写的灵活性。
此外,由于FLASH的操作特性是先擦后写,而且擦除单位通常为一个扇区,如果只能按字写入的话,软件在要写入一个字节之前首先要判断该字节所在的字的所有字节是否有数据,如果没有数据可以直接写该字,如果任何一个字节有数据,都需要先将该字所在的扇区读出到缓存,将需要写的相应字节位置替换成新字节,然后进行擦除操作,然后再按照需要将整个扇区重新写入FLASH。该种方式不仅降低系统效率而且对软件有极高的要求,使得对SPI FLASH按字节写入加密数据的操作成本提高。此为现有技术的不足之处。
因此,提供设计一种新型的针对SPI FLASH的加密接口及读写方法,以提高系统访问SPI FLASH的效率是非常有必要的。
发明内容
本发明的目的在于,针对上述现有技术中存在的缺陷,提供设计一种针对SPI FLASH的加密接口及读写方法,以解决上述技术问题,在保持算法复杂度的同时,减少软件工作量,并提高系统访问SPI FLASH的效率。
为实现上述目的,本发明给出以下技术方案:
一种SPI FLASH加密接口,包括命令模块、数据模块、加密模块、解密模块、状态机模块以及协议转换模块;其特征在于:
所述命令模块与系统总线相连,用于寄存来自系统总线的地址、读写信息、数据块大小及传输类型,并将系统总线的读写需求传递至数据模块和状态机模块,将状态机模块的当前操作状态反馈至系统总线;
所述数据模块与系统总线、命令模块、加密模块以及解密模块相连,数据模块用于寄存系统总线要写入SPI FLASH的字节数据以及从SPI FLASH中读取的字节数据;
所述加密模块与数据模块、命令模块以及状态机模块相连,用于将写入SPI FLASH的字节数据按照特定的加密算法转换成密文;
所述解密模块与数据模块、状态机模块相连,用于将从FLASH内读出的字节数据按照特定的解密算法转换成明文;
所述状态机模块与命令模块、加密模块、解密模块以及协议转换模块相连,用于解析来自命令模块的数据,以实现对SPI FLASH读写擦状态的转换控制,并反馈FLASH的状态信息至命令模块;
所述协议转换模块与状态机模块、SPI FLASH相连,实现SPI协议转换,即将命令和数据按照SPI协议组成相应的串行命令序列格式转送至片外的SPI FLASH,或者将从SPI FLASH串行读入的数据寄存重新组成字节或者字的数据格式。
优选地,所述数据模块内设置有读数据缓存单元和写数据缓存单元。
一种SPI FLASH加密数据的写入方法,包括如下步骤:
S1:系统总线将写命令发送至命令模块,将字节写数据发送至数据模块;
S2:命令模块接收到写命令后,判断写命令中的地址是否在数据模块的写数据缓存单元中命中,如果命中,则将缓存数据更新,并转到S7,否则转到S3;
S3:命令模块将写命令传递至状态机模块,状态机模块对写命令进行状态转换;
S4:通过加密模块对数据模块中的字节写数据进行加密处理;
S5:将写命令以及经加密模块加密处理后的字节写数据依次传递至协议转换模块;
S6:协议转换模块按顺序将命令序列输出至SPI FLASH内;
S7:完成本次写操作。
优选地,所述步骤S4中包括如下步骤:
S401:对字节0的加密算法,如下:
wr_data_enc[0] = wr_data[0] ^wr_data[2] ^wr_addr[2];
wr_data_enc[1] = wr_data[1] ^wr_data[3] ^wr_addr[3];
wr_data_enc[2] = wr_data[2] ^wr_data[5] ^wr_addr[4];
wr_data_enc[3] = wr_data[3] ^wr_data[6] ^wr_addr[5];
wr_data_enc[4] = wr_data[4] ^wr_data[7] ^wr_addr[6];
wr_data_enc[5] =~wr_data[5] ^wr_addr[7];
wr_data_enc[6] = wr_data[6] ^wr_data[0] ^wr_addr[8];
wr_data_enc[7] = wr_data[7] ^wr_data[1] ^wr_addr[9];
其中,wr_data表示加密前的数据,wr_data_enc表示加密后的数据,wr_addr表示系统总线将数据要写入PSI FLASH的地址。
优选地,所述步骤S4还包括如下步骤:
S402:对字节1的加密算法,如下:
wr_data_enc[8] = wr_data[ 8] ^wr_data[8+6] ^wr_addr[9];
wr_data_enc[9] = wr_data[ 9] ^wr_data[8+7] ^wr_addr[8];
wr_data_enc[10] = wr_data[10] ^wr_data[8+0] ^wr_addr[7];
wr_data_enc[11] =~wr_data[11] ^wr_addr[6];
wr_data_enc[12] = wr_data[12] ^wr_data[8+1] ^wr_addr[5];
wr_data_enc[13] = wr_data[13] ^wr_data[8+3] ^wr_addr[4];
wr_data_enc[14] = wr_data[14] ^wr_data[8+4] ^wr_addr[3];
wr_data_enc[15] = wr_data[15] ^wr_data[8+5] ^wr_addr[2];
其中,wr_data表示加密前的数据,wr_data_enc表示加密后的数据,wr_addr表示系统总线将数据要写入PSI FLASH的地址。
优选地,所述步骤S4还包括如下步骤:
S403:对字节2的加密算法,如下:
wr_data_enc[16] = wr_data[16] ^wr_data[16+3] ^wr_addr[2];
wr_data_enc[17] = wr_data[17] ^wr_data[16+4] ^wr_addr[4];
wr_data_enc[18] = wr_data[18] ^wr_data[16+6] ^wr_addr[3];
wr_data_enc[19] = wr_data[19] ^wr_data[16+7] ^wr_addr[9];
wr_data_enc[20] = wr_data[20] ^wr_data[16+0] ^wr_addr[7];
wr_data_enc[21] = wr_data[21] ^wr_data[16+1] ^wr_addr[8];
wr_data_enc[22] =~wr_data[22] ^wr_addr[5];
wr_data_enc[23] = wr_data[23] ^wr_data[16+2] ^wr_addr[6];
其中,wr_data表示加密前的数据,wr_data_enc表示加密后的数据,wr_addr表示系统总线将数据要写入PSI FLASH的地址。
优选地,所述步骤S4还包括如下步骤:
S404:对字节3的加密算法,如下:
wr_data_enc[24] = wr_data[24] ^wr_data[24+5] ^wr_addr[5];
wr_data_enc[25] = wr_data[25] ^wr_data[24+7] ^wr_addr[9];
wr_data_enc[26] = wr_data[26] ^wr_data[24+6] ^wr_addr[7];
wr_data_enc[27] = wr_data[27] ^wr_data[24+1] ^wr_addr[2];
wr_data_enc[28] = wr_data[28] ^wr_data[24+2] ^wr_addr[3];
wr_data_enc[29] = wr_data[29] ^wr_data[24+3] ^wr_addr[8];
wr_data_enc[30] =~wr_data[30] ^wr_addr[6];
wr_data_enc[31] = wr_data[31] ^wr_data[24+4] ^wr_addr[4];
其中,wr_data表示加密前的数据,wr_data_enc表示加密后的数据,wr_addr表示系统总线将数据要写入PSI FLASH的地址。
一种SPI FLASH加密数据的读取方法,包括如下步骤:
S1:系统总线发送读命令至命令模块,并等待数据模块反馈读数据;
S2:命令模块判断读命令中的地址是否在数据模块的读数据缓存单元中命中,如果命中,则直接将字节数据反馈给总线,并转到步骤S10,否则转到步骤S3;
S3:向系统总线反馈等待信号;
S4:将读命令传递至状态机模块,通过状态机模块进行状态转换,将读命令解析后传递至协议转换模块;
S5:协议转换模块按照顺序将读命令序列输出至SPI FLASH;
S6:SPI FLASH接到读命令序列后,将字节数据序列发送至协议转换模块;
S7:协议转换模块将字节数据序列转成芯片内部的数据格式并反馈至状态机模块;
S8:状态机模块进行状态转换后将该字节数据传递至解密模块;
S9:解密模块通过解密算法对字节数据进行解密,然后将解密后的字节数据经数据模块反馈至系统总线;
S10:完成本次读操作。
优选地,所述步骤S9中包括如下步骤:
S901:对字节0的解密算法:
rd_data_dec[0] = rd_data[0] ^rd_data_dec[2] ^rd_addr[2];
rd_data_dec[1] = rd_data[1] ^rd_data_dec[3] ^rd_addr[3];
rd_data_dec[2] = rd_data[2] ^rd_data_dec[5] ^rd_addr[4];
rd_data_dec[3] = rd_data[3] ^rd_data_dec[6] ^rd_addr[5];
rd_data_dec[4] = rd_data[4] ^rd_data_dec[7] ^rd_addr[6];
rd_data_dec[5] =~rd_data[5] ^rd_addr[7];
rd_data_dec[6] = rd_data[6] ^rd_data_dec[0] ^rd_addr[8];
rd_data_dec[7] = rd_data[7] ^rd_data_dec[1] ^rd_addr[9];
S902:对字节1的解密算法:
rd_data_dec[8] = rd_data[8] ^rd_data_dec[8+6] ^rd_addr[9];
rd_data_dec[9] = rd_data[9] ^rd_data_dec[8+7] ^rd_addr[8];
rd_data_dec[10] = rd_data[10] ^rd_data_dec[8+0] ^rd_addr[7];
rd_data_dec[11] =~rd_data[11] ^rd_addr[6];
rd_data_dec[12] = rd_data[12] ^rd_data_dec[8+1] ^rd_addr[5];
rd_data_dec[13] = rd_data[13] ^rd_data_dec[8+3] ^rd_addr[4];
rd_data_dec[14] = rd_data[14] ^rd_data_dec[8+4] ^rd_addr[3];
rd_data_dec[15] = rd_data[15] ^rd_data_dec[8+5] ^rd_addr[2];
S903:对字节2的解密算法:
rd_data_dec[16] = rd_data[16] ^rd_data_dec[16+3] ^rd_addr[2];
rd_data_dec[17] = rd_data[17] ^rd_data_dec[16+4] ^rd_addr[4];
rd_data_dec[18] = rd_data[18] ^rd_data_dec[16+6] ^rd_addr[3];
rd_data_dec[19] = rd_data[19] ^rd_data_dec[16+7] ^rd_addr[9];
rd_data_dec[20] = rd_data[20] ^rd_data_dec[16+0] ^rd_addr[7];
rd_data_dec[21] = rd_data[21] ^rd_data_dec[16+1] ^rd_addr[8];
rd_data_dec[22] =~rd_data[22] ^rd_addr[5];
rd_data_dec[23] = rd_data[23] ^rd_data_dec[16+2] ^rd_addr[6];
S904:对字节3的解密算法:
rd_data_dec[24] = rd_data[24] ^rd_data_dec[24+5] ^rd_addr[5];
rd_data_dec[25] = rd_data[25] ^rd_data_dec[24+7] ^rd_addr[9];
rd_data_dec[26] = rd_data[26] ^rd_data_dec[24+6] ^rd_addr[7];
rd_data_dec[27] = rd_data[27] ^rd_data_dec[24+1] ^rd_addr[2];
rd_data_dec[28] = rd_data[28] ^rd_data_dec[24+2] ^rd_addr[3];
rd_data_dec[29] = rd_data[29] ^rd_data_dec[24+3] ^rd_addr[8];
rd_data_dec[30] =~rd_data[30] ^rd_addr[6];
rd_data_dec[31] = rd_data[31] ^rd_data_dec[24+4] ^rd_addr[4];
其中,rd_data表示解密前的数据,rd_data_dec表示解密后的数据,rd_addr表示读数据在FLASH中的地址。
本发明的有益效果在于,将传统的按字加密方式改成按字节采用不同算法分别加密的方式,取消了字节间的加解密依赖关系,使得软件对SPI FLASH的操作大为简化;本发明的硬件开销与传统方式相比不相上下,因为加密算法使用的异或门个数相对于上百至千万门的大规模集成电路而言所占面积比重微乎其微;加密算法采用二至三级异或对时序的影响不大,在UMC0.11工艺下至少可以保证时钟频率达到200M;本发明在保证系统保密安全的基础上有效降低了软件操作的复杂度,提升了整个系统的效率。此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。
由此可见,本发明与现有技术相比,具有突出的实质性特点和显著地进步,其实施的有益效果也是显而易见的。
附图说明
图1为本发明提供的一种SPI FLASH加密接口的结构示意图。
其中,1-系统总线,2-SPI FLASH加密接口,3-SPI FLASH,21-命令模块,22-数据模块,23-加密模块,24-解密模块,25-状态机模块,26-协议转换模块。
具体实施方式
下面结合附图并通过具体实施例对本发明进行详细阐述,以下实施例是对本发明的解释,而本发明并不局限于以下实施方式。
如图1所示,本发明提供的一种SPI FLASH加密接口,包括命令模块21、数据模块22、加密模块23、解密模块24、状态机模块25以及协议转换模块26;
所述命令模块21与系统总线1相连,用于寄存来自系统总线1的地址、读写信息、数据块大小及传输类型,并将系统总线1的读写需求传递至数据模块22和状态机模块25,将状态机模块25的当前操作状态反馈至系统总线1;
所述数据模块22与系统总线1、命令模块21、加密模块23以及解密模块24相连,数据模块22用于寄存系统总线1要写入SPI FLASH3的字节数据以及从SPI FLASH3中读取的字节数据;
所述加密模块23与数据模块22、命令模块21以及状态机模块25相连,用于将写入SPI FLASH3的字节数据按照特定的加密算法转换成密文;
所述解密模块24与数据模块22、状态机模块25相连,用于将从SPI FLASH3内读出的字节数据按照特定的解密算法转换成明文;
所述状态机模块25与命令模块21、加密模块23、解密模块24以及协议转换模块26相连,用于解析来自命令模块21的数据,以实现对SPI FLASH3读写擦状态的转换控制,并反馈SPI FLASH3的状态信息至命令模块;
所述协议转换模块26与状态机模块25、SPI FLASH3相连,实现SPI协议转换,即将命令和数据按照SPI协议组成相应的串行命令序列格式转送至片外的SPI FLASH3,或者将从SPI FLASH3串行读入的数据寄存重新组成字节或者字的数据格式。
本实施例中,所述数据模块22内设置有读数据缓存单元和写数据缓存单元。
本实施例中还提供了一种SPI FLASH加密数据的写入方法,包括如下步骤:
S1:系统总线将写命令发送至命令模块,将字节写数据发送至数据模块;
S2:命令模块接收到写命令后,判断写命令中的地址是否在数据模块的写数据缓存单元中命中,如果命中,则将缓存数据更新,并转到S7,否则转到S3;
S3:命令模块将写命令传递至状态机模块,状态机模块对写命令进行状态转换;
S4:通过加密模块对数据模块中的字节写数据进行加密处理;
S5:将写命令以及经加密模块加密处理后的字节写数据依次传递至协议转换模块;
S6:协议转换模块按顺序将命令序列输出至SPI FLASH内;
S7:完成本次写操作。
本实施例中,所述步骤S4中包括如下步骤:
S401:对字节0的加密算法,如下:
wr_data_enc[0] = wr_data[0] ^wr_data[2] ^wr_addr[2];
wr_data_enc[1] = wr_data[1] ^wr_data[3] ^wr_addr[3];
wr_data_enc[2] = wr_data[2] ^wr_data[5] ^wr_addr[4];
wr_data_enc[3] = wr_data[3] ^wr_data[6] ^wr_addr[5];
wr_data_enc[4] = wr_data[4] ^wr_data[7] ^wr_addr[6];
wr_data_enc[5] =~wr_data[5] ^wr_addr[7];
wr_data_enc[6] = wr_data[6] ^wr_data[0] ^wr_addr[8];
wr_data_enc[7] = wr_data[7] ^wr_data[1] ^wr_addr[9];
其中,wr_data表示加密前的数据,wr_data_enc表示加密后的数据,wr_addr表示系统总线将数据要写入PSI FLASH的地址。
本实施例中,所述步骤S4还包括如下步骤:
S402:对字节1的加密算法,如下:
wr_data_enc[8] = wr_data[ 8] ^wr_data[8+6] ^wr_addr[9];
wr_data_enc[9] = wr_data[ 9] ^wr_data[8+7] ^wr_addr[8];
wr_data_enc[10] = wr_data[10] ^wr_data[8+0] ^wr_addr[7];
wr_data_enc[11] =~wr_data[11] ^wr_addr[6];
wr_data_enc[12] = wr_data[12] ^wr_data[8+1] ^wr_addr[5];
wr_data_enc[13] = wr_data[13] ^wr_data[8+3] ^wr_addr[4];
wr_data_enc[14] = wr_data[14] ^wr_data[8+4] ^wr_addr[3];
wr_data_enc[15] = wr_data[15] ^wr_data[8+5] ^wr_addr[2];
其中,wr_data表示加密前的数据,wr_data_enc表示加密后的数据,wr_addr表示系统总线将数据要写入PSI FLASH的地址。
本实施例中,所述步骤S4还包括如下步骤:
S403:对字节2的加密算法,如下:
wr_data_enc[16] = wr_data[16] ^wr_data[16+3] ^wr_addr[2];
wr_data_enc[17] = wr_data[17] ^wr_data[16+4] ^wr_addr[4];
wr_data_enc[18] = wr_data[18] ^wr_data[16+6] ^wr_addr[3];
wr_data_enc[19] = wr_data[19] ^wr_data[16+7] ^wr_addr[9];
wr_data_enc[20] = wr_data[20] ^wr_data[16+0] ^wr_addr[7];
wr_data_enc[21] = wr_data[21] ^wr_data[16+1] ^wr_addr[8];
wr_data_enc[22] =~wr_data[22] ^wr_addr[5];
wr_data_enc[23] = wr_data[23] ^wr_data[16+2] ^wr_addr[6];
其中,wr_data表示加密前的数据,wr_data_enc表示加密后的数据,wr_addr表示系统总线将数据要写入PSI FLASH的地址。
本实施例中,所述步骤S4还包括如下步骤:
S404:对字节3的加密算法,如下:
wr_data_enc[24] = wr_data[24] ^wr_data[24+5] ^wr_addr[5];
wr_data_enc[25] = wr_data[25] ^wr_data[24+7] ^wr_addr[9];
wr_data_enc[26] = wr_data[26] ^wr_data[24+6] ^wr_addr[7];
wr_data_enc[27] = wr_data[27] ^wr_data[24+1] ^wr_addr[2];
wr_data_enc[28] = wr_data[28] ^wr_data[24+2] ^wr_addr[3];
wr_data_enc[29] = wr_data[29] ^wr_data[24+3] ^wr_addr[8];
wr_data_enc[30] =~wr_data[30] ^wr_addr[6];
wr_data_enc[31] = wr_data[31] ^wr_data[24+4] ^wr_addr[4];
其中,wr_data表示加密前的数据,wr_data_enc表示加密后的数据,wr_addr表示系统总线将数据要写入PSI FLASH的地址。
本实施例还提供了一种SPI FLASH加密数据的读取方法,包括如下步骤:
S1:系统总线发送读命令至命令模块,并等待数据模块反馈读数据;
S2:命令模块判断读命令中的地址是否在数据模块的读数据缓存单元中命中,如果命中,则直接将字节数据反馈给总线,并转到步骤S10,否则转到步骤S3;
S3:向系统总线反馈等待信号;
S4:将读命令传递至状态机模块,通过状态机模块进行状态转换,将读命令解析后传递至协议转换模块;
S5:协议转换模块按照顺序将读命令序列输出至SPI FLASH;
S6:SPI FLASH接到读命令序列后,将字节数据序列发送至协议转换模块;
S7:协议转换模块将字节数据序列转成芯片内部的数据格式并反馈至状态机模块;
S8:状态机模块进行状态转换后将该字节数据传递至解密模块;
S9:解密模块通过解密算法对字节数据进行解密,然后将解密后的字节数据经数据模块反馈至系统总线;
S10:完成本次读操作。
本实施例中,所述步骤S9中包括如下步骤:
S901:对字节0的解密算法:
rd_data_dec[0] = rd_data[0] ^rd_data_dec[2] ^rd_addr[2];
rd_data_dec[1] = rd_data[1] ^rd_data_dec[3] ^rd_addr[3];
rd_data_dec[2] = rd_data[2] ^rd_data_dec[5] ^rd_addr[4];
rd_data_dec[3] = rd_data[3] ^rd_data_dec[6] ^rd_addr[5];
rd_data_dec[4] = rd_data[4] ^rd_data_dec[7] ^rd_addr[6];
rd_data_dec[5] =~rd_data[5] ^rd_addr[7];
rd_data_dec[6] = rd_data[6] ^rd_data_dec[0] ^rd_addr[8];
rd_data_dec[7] = rd_data[7] ^rd_data_dec[1] ^rd_addr[9];
S902:对字节1的解密算法:
rd_data_dec[8] = rd_data[8] ^rd_data_dec[8+6] ^rd_addr[9];
rd_data_dec[9] = rd_data[9] ^rd_data_dec[8+7] ^rd_addr[8];
rd_data_dec[10] = rd_data[10] ^rd_data_dec[8+0] ^rd_addr[7];
rd_data_dec[11] =~rd_data[11] ^rd_addr[6];
rd_data_dec[12] = rd_data[12] ^rd_data_dec[8+1] ^rd_addr[5];
rd_data_dec[13] = rd_data[13] ^rd_data_dec[8+3] ^rd_addr[4];
rd_data_dec[14] = rd_data[14] ^rd_data_dec[8+4] ^rd_addr[3];
rd_data_dec[15] = rd_data[15] ^rd_data_dec[8+5] ^rd_addr[2];
S903:对字节2的解密算法:
rd_data_dec[16] = rd_data[16] ^rd_data_dec[16+3] ^rd_addr[2];
rd_data_dec[17] = rd_data[17] ^rd_data_dec[16+4] ^rd_addr[4];
rd_data_dec[18] = rd_data[18] ^rd_data_dec[16+6] ^rd_addr[3];
rd_data_dec[19] = rd_data[19] ^rd_data_dec[16+7] ^rd_addr[9];
rd_data_dec[20] = rd_data[20] ^rd_data_dec[16+0] ^rd_addr[7];
rd_data_dec[21] = rd_data[21] ^rd_data_dec[16+1] ^rd_addr[8];
rd_data_dec[22] =~rd_data[22] ^rd_addr[5];
rd_data_dec[23] = rd_data[23] ^rd_data_dec[16+2] ^rd_addr[6];
S904:对字节3的解密算法:
rd_data_dec[24] = rd_data[24] ^rd_data_dec[24+5] ^rd_addr[5];
rd_data_dec[25] = rd_data[25] ^rd_data_dec[24+7] ^rd_addr[9];
rd_data_dec[26] = rd_data[26] ^rd_data_dec[24+6] ^rd_addr[7];
rd_data_dec[27] = rd_data[27] ^rd_data_dec[24+1] ^rd_addr[2];
rd_data_dec[28] = rd_data[28] ^rd_data_dec[24+2] ^rd_addr[3];
rd_data_dec[29] = rd_data[29] ^rd_data_dec[24+3] ^rd_addr[8];
rd_data_dec[30] =~rd_data[30] ^rd_addr[6];
rd_data_dec[31] = rd_data[31] ^rd_data_dec[24+4] ^rd_addr[4];
其中,rd_data表示解密前的数据,rd_data_dec表示解密后的数据,rd_addr表示读数据在FLASH中的地址。
以上公开的仅为本发明的优选实施方式,但本发明并非局限于此,任何本领域的技术人员能思之的没有创造性的变化,以及在不脱离本发明原理前提下所作的若干改进和润饰,都应落在本发明的保护范围内。
Claims (9)
1.一种SPI FLASH加密接口,包括命令模块、数据模块、加密模块、解密模块、状态机模块以及协议转换模块;其特征在于:
所述命令模块与系统总线相连,用于寄存来自系统总线的地址、读写信息、数据块大小及传输类型,并将系统总线的读写需求传递至数据模块和状态机模块,将状态机模块的当前操作状态反馈至系统总线;
所述数据模块与系统总线、命令模块、加密模块以及解密模块相连,数据模块用于寄存系统总线要写入SPI FLASH的字节数据以及从SPI FLASH中读取的字节数据;
所述加密模块与数据模块、命令模块以及状态机模块相连,用于将写入SPI FLASH的字节数据按照特定的加密算法转换成密文;
所述解密模块与数据模块、状态机模块相连,用于将从FLASH内读出的字节数据按照特定的解密算法转换成明文;
所述状态机模块与命令模块、加密模块、解密模块以及协议转换模块相连,用于解析来自命令模块的数据,以实现对SPI FLASH读写擦状态的转换控制,并反馈FLASH的状态信息至命令模块;
所述协议转换模块与状态机模块、SPI FLASH相连,实现SPI协议转换,即将命令和数据按照SPI协议组成相应的串行命令序列格式转送至片外的SPI FLASH,或者将从SPI FLASH串行读入的数据寄存重新组成字节或者字的数据格式。
2.根据权利要求1所述的一种SPI FLASH加密接口,其特征在于:所述数据模块内设置有读数据缓存单元和写数据缓存单元。
3.一种SPI FLASH加密数据的写入方法,包括如下步骤:
S1:系统总线将写命令发送至命令模块,将字节写数据发送至数据模块;
S2:命令模块接收到写命令后,判断写命令中的地址是否在数据模块的写数据缓存单元中命中,如果命中,则将缓存数据更新,并转到S7,否则转到S3;
S3:命令模块将写命令传递至状态机模块,状态机模块对写命令进行状态转换;
S4:通过加密模块对数据模块中的字节写数据进行加密处理;
S5:将写命令以及经加密模块加密处理后的字节写数据依次传递至协议转换模块;
S6:协议转换模块按顺序将命令序列输出至SPI FLASH内;
S7:完成本次写操作。
4.根据权利要求3所述的一种SPI FLASH加密数据的写入方法,其特征在于:所述步骤S4中包括如下步骤:
S401:对字节0的加密算法,如下:
wr_data_enc[0] = wr_data[0] ^wr_data[2] ^wr_addr[2];
wr_data_enc[1] = wr_data[1] ^wr_data[3] ^wr_addr[3];
wr_data_enc[2] = wr_data[2] ^wr_data[5] ^wr_addr[4];
wr_data_enc[3] = wr_data[3] ^wr_data[6] ^wr_addr[5];
wr_data_enc[4] = wr_data[4] ^wr_data[7] ^wr_addr[6];
wr_data_enc[5] =~wr_data[5] ^wr_addr[7];
wr_data_enc[6] = wr_data[6] ^wr_data[0] ^wr_addr[8];
wr_data_enc[7] = wr_data[7] ^wr_data[1] ^wr_addr[9];
其中,wr_data表示加密前的数据,wr_data_enc表示加密后的数据,wr_addr表示系统总线将数据要写入PSI FLASH的地址。
5.根据权利要求4所述的一种SPI FLASH加密数据的写入方法,其特征在于:所述步骤S4中包括如下步骤:
S402:对字节1的加密算法,如下:
wr_data_enc[8] = wr_data[ 8] ^wr_data[8+6] ^wr_addr[9];
wr_data_enc[9] = wr_data[ 9] ^wr_data[8+7] ^wr_addr[8];
wr_data_enc[10] = wr_data[10] ^wr_data[8+0] ^wr_addr[7];
wr_data_enc[11] =~wr_data[11] ^wr_addr[6];
wr_data_enc[12] = wr_data[12] ^wr_data[8+1] ^wr_addr[5];
wr_data_enc[13] = wr_data[13] ^wr_data[8+3] ^wr_addr[4];
wr_data_enc[14] = wr_data[14] ^wr_data[8+4] ^wr_addr[3];
wr_data_enc[15] = wr_data[15] ^wr_data[8+5] ^wr_addr[2];
其中,wr_data表示加密前的数据,wr_data_enc表示加密后的数据,wr_addr表示系统总线将数据要写入PSI FLASH的地址。
6.根据权利要求5所述的一种SPI FLASH加密数据的写入方法,其特征在于:所述步骤S4中包括如下步骤:
S403:对字节2的加密算法,如下:
wr_data_enc[16] = wr_data[16] ^wr_data[16+3] ^wr_addr[2];
wr_data_enc[17] = wr_data[17] ^wr_data[16+4] ^wr_addr[4];
wr_data_enc[18] = wr_data[18] ^wr_data[16+6] ^wr_addr[3];
wr_data_enc[19] = wr_data[19] ^wr_data[16+7] ^wr_addr[9];
wr_data_enc[20] = wr_data[20] ^wr_data[16+0] ^wr_addr[7];
wr_data_enc[21] = wr_data[21] ^wr_data[16+1] ^wr_addr[8];
wr_data_enc[22] =~wr_data[22] ^wr_addr[5];
wr_data_enc[23] = wr_data[23] ^wr_data[16+2] ^wr_addr[6];
其中,wr_data表示加密前的数据,wr_data_enc表示加密后的数据,wr_addr表示系统总线将数据要写入PSI FLASH的地址。
7.根据权利要求6所述的一种SPI FLASH加密数据的写入方法,其特征在于:所述步骤S4中包括如下步骤:
S404:对字节3的加密算法,如下:
wr_data_enc[24] = wr_data[24] ^wr_data[24+5] ^wr_addr[5];
wr_data_enc[25] = wr_data[25] ^wr_data[24+7] ^wr_addr[9];
wr_data_enc[26] = wr_data[26] ^wr_data[24+6] ^wr_addr[7];
wr_data_enc[27] = wr_data[27] ^wr_data[24+1] ^wr_addr[2];
wr_data_enc[28] = wr_data[28] ^wr_data[24+2] ^wr_addr[3];
wr_data_enc[29] = wr_data[29] ^wr_data[24+3] ^wr_addr[8];
wr_data_enc[30] =~wr_data[30] ^wr_addr[6];
wr_data_enc[31] = wr_data[31] ^wr_data[24+4] ^wr_addr[4];
其中,wr_data表示加密前的数据,wr_data_enc表示加密后的数据,wr_addr表示系统总线将数据要写入PSI FLASH的地址。
8.一种SPI FLASH加密数据的读取方法,包括如下步骤:
S1:系统总线发送读命令至命令模块,并等待数据模块反馈读数据;
S2:命令模块判断读命令中的地址是否在数据模块的读数据缓存单元中命中,如果命中,则直接将字节数据反馈给总线,并转到步骤S10,否则转到步骤S3;
S3:向系统总线反馈等待信号;
S4:将读命令传递至状态机模块,通过状态机模块进行状态转换,将读命令解析后传递至协议转换模块;
S5:协议转换模块按照顺序将读命令序列输出至SPI FLASH;
S6:SPI FLASH接到读命令序列后,将字节数据序列发送至协议转换模块;
S7:协议转换模块将字节数据序列转成芯片内部的数据格式并反馈至状态机模块;
S8:状态机模块进行状态转换后将该字节数据传递至解密模块;
S9:解密模块通过解密算法对字节数据进行解密,然后将解密后的字节数据经数据模块反馈至系统总线;
S10:完成本次读操作。
9.根据权利要求8所述的一种SPI FLASH加密数据的读取方法,其特征在于:所述步骤S9中包括如下步骤:
S901:对字节0的解密算法:
rd_data_dec[0] = rd_data[0] ^rd_data_dec[2] ^rd_addr[2];
rd_data_dec[1] = rd_data[1] ^rd_data_dec[3] ^rd_addr[3];
rd_data_dec[2] = rd_data[2] ^rd_data_dec[5] ^rd_addr[4];
rd_data_dec[3] = rd_data[3] ^rd_data_dec[6] ^rd_addr[5];
rd_data_dec[4] = rd_data[4] ^rd_data_dec[7] ^rd_addr[6];
rd_data_dec[5] =~rd_data[5] ^rd_addr[7];
rd_data_dec[6] = rd_data[6] ^rd_data_dec[0] ^rd_addr[8];
rd_data_dec[7] = rd_data[7] ^rd_data_dec[1] ^rd_addr[9];
S902:对字节1的解密算法:
rd_data_dec[8] = rd_data[8] ^rd_data_dec[8+6] ^rd_addr[9];
rd_data_dec[9] = rd_data[9] ^rd_data_dec[8+7] ^rd_addr[8];
rd_data_dec[10] = rd_data[10] ^rd_data_dec[8+0] ^rd_addr[7];
rd_data_dec[11] =~rd_data[11] ^rd_addr[6];
rd_data_dec[12] = rd_data[12] ^rd_data_dec[8+1] ^rd_addr[5];
rd_data_dec[13] = rd_data[13] ^rd_data_dec[8+3] ^rd_addr[4];
rd_data_dec[14] = rd_data[14] ^rd_data_dec[8+4] ^rd_addr[3];
rd_data_dec[15] = rd_data[15] ^rd_data_dec[8+5] ^rd_addr[2];
S903:对字节2的解密算法:
rd_data_dec[16] = rd_data[16] ^rd_data_dec[16+3] ^rd_addr[2];
rd_data_dec[17] = rd_data[17] ^rd_data_dec[16+4] ^rd_addr[4];
rd_data_dec[18] = rd_data[18] ^rd_data_dec[16+6] ^rd_addr[3];
rd_data_dec[19] = rd_data[19] ^rd_data_dec[16+7] ^rd_addr[9];
rd_data_dec[20] = rd_data[20] ^rd_data_dec[16+0] ^rd_addr[7];
rd_data_dec[21] = rd_data[21] ^rd_data_dec[16+1] ^rd_addr[8];
rd_data_dec[22] =~rd_data[22] ^rd_addr[5];
rd_data_dec[23] = rd_data[23] ^rd_data_dec[16+2] ^rd_addr[6];
S904:对字节3的解密算法:
rd_data_dec[24] = rd_data[24] ^rd_data_dec[24+5] ^rd_addr[5];
rd_data_dec[25] = rd_data[25] ^rd_data_dec[24+7] ^rd_addr[9];
rd_data_dec[26] = rd_data[26] ^rd_data_dec[24+6] ^rd_addr[7];
rd_data_dec[27] = rd_data[27] ^rd_data_dec[24+1] ^rd_addr[2];
rd_data_dec[28] = rd_data[28] ^rd_data_dec[24+2] ^rd_addr[3];
rd_data_dec[29] = rd_data[29] ^rd_data_dec[24+3] ^rd_addr[8];
rd_data_dec[30] =~rd_data[30] ^rd_addr[6];
rd_data_dec[31] = rd_data[31] ^rd_data_dec[24+4] ^rd_addr[4];
其中,rd_data表示解密前的数据,rd_data_dec表示解密后的数据,rd_addr表示读数据在FLASH中的地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510094016.8A CN104657288B (zh) | 2015-03-03 | 2015-03-03 | 一种spi flash加密接口及加密数据的读写方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510094016.8A CN104657288B (zh) | 2015-03-03 | 2015-03-03 | 一种spi flash加密接口及加密数据的读写方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104657288A true CN104657288A (zh) | 2015-05-27 |
CN104657288B CN104657288B (zh) | 2017-11-10 |
Family
ID=53248450
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510094016.8A Expired - Fee Related CN104657288B (zh) | 2015-03-03 | 2015-03-03 | 一种spi flash加密接口及加密数据的读写方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104657288B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108121679A (zh) * | 2017-08-07 | 2018-06-05 | 鸿秦(北京)科技有限公司 | 一种嵌入式SoC系统总线及其协议转换桥接装置 |
CN109240952A (zh) * | 2018-08-27 | 2019-01-18 | 北京计算机技术及应用研究所 | 一种高速数据加密NVMe-SATA转换器电路 |
CN114036096A (zh) * | 2021-11-04 | 2022-02-11 | 珠海一微半导体股份有限公司 | 一种基于总线接口的读控制器 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070230691A1 (en) * | 2006-04-03 | 2007-10-04 | Reuven Elhamias | Method for write failure recovery |
WO2009057091A1 (en) * | 2007-10-30 | 2009-05-07 | Sandisk Il Ltd | Secure data processing for unaligned data |
CN101561888A (zh) * | 2009-05-12 | 2009-10-21 | 苏州国芯科技有限公司 | 一种实时加密sd卡及高速加解密方法 |
CN104317743A (zh) * | 2014-09-29 | 2015-01-28 | 上海华为技术有限公司 | 对spi flash的写保护方法和控制器 |
-
2015
- 2015-03-03 CN CN201510094016.8A patent/CN104657288B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070230691A1 (en) * | 2006-04-03 | 2007-10-04 | Reuven Elhamias | Method for write failure recovery |
WO2009057091A1 (en) * | 2007-10-30 | 2009-05-07 | Sandisk Il Ltd | Secure data processing for unaligned data |
CN101561888A (zh) * | 2009-05-12 | 2009-10-21 | 苏州国芯科技有限公司 | 一种实时加密sd卡及高速加解密方法 |
CN104317743A (zh) * | 2014-09-29 | 2015-01-28 | 上海华为技术有限公司 | 对spi flash的写保护方法和控制器 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108121679A (zh) * | 2017-08-07 | 2018-06-05 | 鸿秦(北京)科技有限公司 | 一种嵌入式SoC系统总线及其协议转换桥接装置 |
CN109240952A (zh) * | 2018-08-27 | 2019-01-18 | 北京计算机技术及应用研究所 | 一种高速数据加密NVMe-SATA转换器电路 |
CN114036096A (zh) * | 2021-11-04 | 2022-02-11 | 珠海一微半导体股份有限公司 | 一种基于总线接口的读控制器 |
CN114036096B (zh) * | 2021-11-04 | 2024-05-03 | 珠海一微半导体股份有限公司 | 一种基于总线接口的读控制器 |
Also Published As
Publication number | Publication date |
---|---|
CN104657288B (zh) | 2017-11-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN202650015U (zh) | 用于经加密存储器存取的系统 | |
JP7225220B2 (ja) | 記憶データ暗号化/復号化装置及び方法 | |
CN101196855B (zh) | 移动加密存储设备及密文存储区数据加解密处理方法 | |
CN1168011C (zh) | 具有加密的微处理装置 | |
JP7222971B2 (ja) | 記憶データの暗号化及び復号の機器及び方法 | |
CN102737270B (zh) | 一种基于国产算法的银行智能卡芯片安全协处理器 | |
CN102223228A (zh) | 基于fpga的aes加密芯片设计方法及嵌入式加密系统 | |
CN1878055A (zh) | 一种分离式大数据量加/解密设备及实现方法 | |
CN102073808A (zh) | 一种通过sata接口加密存储的方法和加密卡 | |
CN112329038A (zh) | 一种基于usb接口的数据加密控制系统及芯片 | |
CN103258172A (zh) | 一种芯片片外Nor Flash总线接口硬件加密装置 | |
CN106533652A (zh) | 一种基于xts-sm4的存储加解密方法及装置 | |
CN112887077B (zh) | 一种ssd主控芯片随机缓存保密方法和电路 | |
CN104732159A (zh) | 一种文件处理方法及装置 | |
CN104657288A (zh) | 一种spi flash加密接口及加密数据的读写方法 | |
CN109101829A (zh) | 基于可重构密码处理器的安全固态盘数据传输系统 | |
CN102932135A (zh) | 一种3des加密方法 | |
CN102567689A (zh) | 基于相变存储器的非易失内存数据机密性保护方法 | |
CN213876729U (zh) | 一种ssd主控芯片随机缓存保密电路 | |
CN103862879A (zh) | 一种墨盒芯片及使用该芯片的墨盒 | |
CN101127013A (zh) | 加密移动存储设备及其数据存取方法 | |
CN113177210A (zh) | 芯片结构及其操作方法 | |
CN103077362B (zh) | 具有安全机制的gpio ip核 | |
CN105049203A (zh) | 一种支持多工作模式的可配置3des加解密算法电路 | |
CN103400087A (zh) | 多接口加密板卡 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20171110 |
|
CF01 | Termination of patent right due to non-payment of annual fee |