【技術實現步驟摘要】
一種SPIFLASH加密接口及加密數據的讀寫方法
本專利技術屬于電子芯片
,涉及一種電子芯片的加密設備及方法,尤其是一種針對SPIFLASH的加密接口及讀寫方法;采用該加密接口及讀寫方法,能夠實現對SPIFLASH的按字節讀寫,以及按字節加密,提高了系統訪問SPIFLASH的效率。
技術介紹
在一個加密主控芯片系統中,通常需要將啟動程序部分的數據置于跟主控芯片一體封裝的SPINORFLASH中,以提高系統的安全系數。上述啟動程序的數據在寫入SPIFLASH之前必然需要對其進行加密處理,所以當讀出上述數據后必然要進行反向的解密操作才能得到真實的數據。現有技術中的加密算法,是針對整個字進行的加密運算,使得加密后的數據與其存儲地址以及同一字內的位于不同字節的位有相關性。雖然SPIFLASH的接口標準支持按字節寫的命令,但是采用上述按字加密的方式使得同一字內的不同字節之間產生依賴關系,喪失了按字節寫的靈活性。此外,由于FLASH的操作特性是先擦后寫,而且擦除單位通常為一個扇區,如果只能按字寫入的話,軟件在要寫入一個字節之前首先要判斷該字節所在的字的所有字節是否有數據,如果沒有數據可以直接寫該字,如果任何一個字節有數據,都需要先將該字所在的扇區讀出到緩存,將需要寫的相應字節位置替換成新字節,然后進行擦除操作,然后再按照需要將整個扇區重新寫入FLASH。該種方式不僅降低系統效率而且對軟件有極高的要求,使得對SPIFLASH按字節寫入加密數據的操作成本提高。此為現有技術的不足之處。因此,提供設計一種新型的針對SPIFLASH的加密接口及讀寫方法,以提高系統訪問SP ...
【技術保護點】
一種SPI?FLASH加密接口,包括命令模塊、數據模塊、加密模塊、解密模塊、狀態機模塊以及協議轉換模塊;其特征在于:所述命令模塊與系統總線相連,用于寄存來自系統總線的地址、讀寫信息、數據塊大小及傳輸類型,并將系統總線的讀寫需求傳遞至數據模塊和狀態機模塊,將狀態機模塊的當前操作狀態反饋至系統總線;所述數據模塊與系統總線、命令模塊、加密模塊以及解密模塊相連,數據模塊用于寄存系統總線要寫入SPI?FLASH的字節數據以及從SPI?FLASH中讀取的字節數據;所述加密模塊與數據模塊、命令模塊以及狀態機模塊相連,用于將寫入SPI?FLASH的字節數據按照特定的加密算法轉換成密文;所述解密模塊與數據模塊、狀態機模塊相連,用于將從FLASH內讀出的字節數據按照特定的解密算法轉換成明文;所述狀態機模塊與命令模塊、加密模塊、解密模塊以及協議轉換模塊相連,用于解析來自命令模塊的數據,以實現對SPI?FLASH讀寫擦狀態的轉換控制,并反饋FLASH的狀態信息至命令模塊;所述協議轉換模塊與狀態機模塊、SPI?FLASH相連,實現SPI協議轉換,即將命令和數據按照SPI協議組成相應的串行命令序列格式轉送至片外的 ...
【技術特征摘要】
1.一種SPIFLASH加密接口,包括命令模塊、數據模塊、加密模塊、解密模塊、狀態機模塊以及協議轉換模塊;其特征在于:所述命令模塊與系統總線相連,用于寄存來自系統總線的地址、讀寫信息、數據塊大小及傳輸類型,并將系統總線的讀寫需求傳遞至數據模塊和狀態機模塊,將狀態機模塊的當前操作狀態反饋至系統總線;所述數據模塊與系統總線、命令模塊、加密模塊以及解密模塊相連,數據模塊用于寄存系統總線要寫入SPIFLASH的字節數據以及從SPIFLASH中讀取的字節數據;所述加密模塊與數據模塊、命令模塊以及狀態機模塊相連,用于將寫入SPIFLASH的字節數據按照特定的加密算法轉換成密文;所述解密模塊與數據模塊、狀態機模塊相連,用于將從FLASH內讀出的字節數據按照特定的解密算法轉換成明文;所述狀態機模塊與命令模塊、加密模塊、解密模塊以及協議轉換模塊相連,用于解析來自命令模塊的數據,以實現對SPIFLASH讀寫擦狀態的轉換控制,并反饋FLASH的狀態信息至命令模塊;所述協議轉換模塊與狀態機模塊、SPIFLASH相連,實現SPI協議轉換,即將命令和數據按照SPI協議組成相應的串行命令序列格式轉送至片外的SPIFLASH,或者將從SPIFLASH串行讀入的數據寄存重新組成字節或者字的數據格式;所述特定的加密算法包括以下具體算法:對字節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表示系統總線將數據要寫入PSIFLASH的地址;對字節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表示系統總線將數據要寫入PSIFLASH的地址;對字節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表示系統總線將數據要寫入PSIFLASH的地址;對字節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表示系統總線將數據要寫入PSIFLASH的地址;所述特定的解密算法包括以下具體算法:對字節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];對字節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];對字節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];對字節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中的地址。2.根據權利要求1所述的一種SPIFLASH加密接口,其特征在于:所述數據模塊內設置有讀數據緩存單元和寫數據緩存單元。3.一種SPIFLASH加密數據的寫入方法,包括如下步驟:S1:系統總線將寫命令發送至命令模...
【專利技術屬性】
技術研發人員:王運哲,姚香君,孫玉璽,孫曉寧,趙陽,劉大銪,劉奇浩,
申請(專利權)人:山東華芯半導體有限公司,
類型:發明
國別省市:山東;37
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。