工業(yè)mp3中sd卡硬件如何加密

針對(duì)工業(yè)MP3模塊對(duì)語(yǔ)音文件的加密需求,如何在工業(yè)應(yīng)用領(lǐng)域中保證在低成本、低功耗的微控制器下實(shí)現(xiàn)文件加密就成了該項(xiàng)目研究的重點(diǎn)。

一、系統(tǒng)硬件組成部分

1、SD卡

安全數(shù)碼卡(SD,Secure Digital Memory Card)是一種為滿足安全、容量、性能和使用環(huán)境等各方面的需求而設(shè)計(jì)的一種存儲(chǔ)介質(zhì),卡內(nèi)含一個(gè)智能控制模塊。SD卡之所以稱之為安全數(shù)碼卡,是因?yàn)樵撝悄芸刂颇K中固化有硬件加密技術(shù)。

SD卡與微控制器的接口有安全數(shù)字輸入輸出(SDIO, Secure Digital Input and Output Card)和串行外設(shè)接口(SPI,Serial Peripheral Interface)兩種通信模式嘲??梢愿鶕?jù)實(shí)際需要來(lái)選擇使用這兩種通信模式中的一種與卡進(jìn)行通信,由于不是所有微控制器都帶有SDIO接口,并且SPI協(xié)議可以通過(guò)普通IO口模擬,所以本系統(tǒng)采用SPI通信模式。

2、VS1003音頻解碼器

VS1003是一款廉價(jià)的MP3/WMA/MIDI音頻解碼芯片。芯片內(nèi)包含一個(gè)自主產(chǎn)權(quán)的低功耗DSP處理器核VS_ DSP,外圍提供了一個(gè)支持SPI協(xié)議的串行控制數(shù)據(jù)接口以及一個(gè)高品質(zhì)可變采樣率的ADC和立體聲ADC。

3、微控制器STM32F103C8T6

STM32F103C8T6是一款高性能、低功耗、高性價(jià)比的工業(yè)級(jí)MCU,內(nèi)部集成了2個(gè)硬件SPI控制器,正好能滿足該系統(tǒng)的設(shè)計(jì),從而節(jié)省了硬件成本并控制了產(chǎn)品體積。系統(tǒng)硬件設(shè)計(jì)框圖如圖1所示。

1

二、SD卡加密優(yōu)勢(shì)及程序設(shè)計(jì)要點(diǎn)

1、SD卡的加密優(yōu)勢(shì)

SD卡在硬件上內(nèi)嵌了加密算法,當(dāng)卡上電時(shí),若卡包含密碼,卡會(huì)自動(dòng)進(jìn)入鎖定狀態(tài)。在這種狀態(tài)下讀寫都是不容許的,從而保障了卡內(nèi)數(shù)據(jù)的安全。相對(duì)閃存中常見的軟件加密,SD卡硬件加密有以下幾大優(yōu)勢(shì):

(1)安全性高

閃存中的軟件加密是通過(guò)加密算法把閃存中的文件進(jìn)行加密,當(dāng)該閃存被格式化后,加密功能不復(fù)存在,但此時(shí)可以通過(guò)PC上的恢復(fù)軟件恢復(fù)卡中的數(shù)據(jù)。而SD卡硬件加密以后卡無(wú)法在PC機(jī)上識(shí)別,更無(wú)法對(duì)卡進(jìn)行格式化,具有極高的安全性。

(2)實(shí)現(xiàn)成本低廉

只需一個(gè)廉價(jià)的單片機(jī)就能對(duì)SD卡內(nèi)數(shù)據(jù)加密,而常見的嵌入式設(shè)備因?yàn)橹骺谻PU的限制很難適應(yīng)大數(shù)據(jù)通過(guò)軟件算法加密。

(3)操作速度快

軟件加密是對(duì)閃存中的單個(gè)文件加密,加密的速度取決于算法的難度和CPU的速度,并且加密后讀寫速度會(huì)因?yàn)橐浖饷芏兟D卡加密是對(duì)整個(gè)磁盤進(jìn)行加密,純硬件加密不影響讀寫速度。經(jīng)測(cè)試,一張數(shù)G的SD卡加密所需要的時(shí)間不超過(guò)1s,這是軟件加密不可能實(shí)現(xiàn)的。這也為數(shù)據(jù)加密在工業(yè)上的應(yīng)用提供了實(shí)時(shí)條件。

2、SD卡的加密程序設(shè)計(jì)要點(diǎn)

SD卡密碼和密碼長(zhǎng)度保存在128 bit的PWD寄存器和8 bit的PWD- LEN寄存器中,這些寄存器是是非易失性的。與SD卡加密的操作命令字為CMD42,在寫入CMD42后接著寫入SD卡的命令數(shù)據(jù)塊即可完成對(duì)SD卡硬件加密的操作。圖2是加密命令數(shù)據(jù)塊的結(jié)構(gòu)。

1

根據(jù)圖2,可以把命令數(shù)據(jù)塊中的第一個(gè)字節(jié)(即Byte0)稱為命令碼,通過(guò)該命令碼的配置可以完成設(shè)置密碼、清除的密碼、上鎖與解鎖以及強(qiáng)制擦除卡片的內(nèi)容等操作。下面分析常見的接種操作方式中的要點(diǎn)。

(1)加密并上鎖

給SD卡加密并上鎖后,SD卡在沒(méi)有解鎖的情況下將不能被讀寫4:根據(jù)圖2要上鎖的命令為Bit2=1,設(shè)置密碼的命令為Bit0-1,其它的位設(shè)置為O,即命令碼為Ox05。在SD卡接受CMD42命令字前需要降低SPI的通信速度,這樣才能更好的接受加密指令,SD卡在讀寫數(shù)據(jù)時(shí)塊長(zhǎng)度(block)為512Byte,但在寫入密碼前應(yīng)通過(guò)CMD16命令字設(shè)置block長(zhǎng)度為密碼長(zhǎng)度(PWD LEN)加上兩個(gè)Byte即PWD LEN+2,在加密操作完成后恢復(fù)數(shù)據(jù)塊長(zhǎng)度512Byte。以設(shè)置密碼為“123456”為例,加密并加鎖的關(guān)鍵代碼如下:

SPI_SetSpeed (Low)://設(shè)置SPI為低速通信模式

SD_SendCmd(CMD16, Ox08, Oxff);//設(shè)置blcok為8

SD_SendCmd (C:VID42, Oxffffff, Ox95):11寫入命令

SD;SPI_WriteByte (Oxfe)://數(shù)據(jù)命令盾牌

SD SPI_ WriteByte(Ox05)://設(shè)置密碼,并給卡加鎖

SD_SPI_WriteByte (Ox06);//密碼長(zhǎng)度

SD_SPI_WriteByte (Ox31);//寫入密碼123456

SD_SPI_ Wri'teByte (Ox32);

SD_SPI:WriteByte (Ox33);

SD_SPI-WriteByte( Ox34);

SD SPI_ WriteByte(Ox35);

SD SPI- WriteByte(Ox36);

SD SPI_WriteByte(Oxff)://寫兩字節(jié)的CRC校驗(yàn)

SD SPI WriteByte(Oxff)

SD SendCmd (CMD16, Ox200, Oxff)://恢復(fù)block

SPI_SetSpeed (High);//恢復(fù)SPI為高速通信模式

(2)解鎖

解鎖是指當(dāng)SD卡加密并上鎖后,用戶輸入密碼操作SD卡內(nèi)數(shù)據(jù)的一種方式,在系統(tǒng)丟電后SD卡自動(dòng)進(jìn)入上鎖狀態(tài)。解鎖的操作和上面的加密上鎖類似,只是把命令碼替換成Ox00,然后寫入密碼長(zhǎng)度和密碼內(nèi)容,SD卡接受這些數(shù)據(jù)后會(huì)匹配上一次寫入的密碼,如果匹配成功容許訪問(wèn)卡中的數(shù)據(jù),反之卡保持為鎖定狀態(tài)。

(3)強(qiáng)制擦除

如果用戶忘記了SD卡的密碼,可以通過(guò)強(qiáng)制擦除命令擦除卡片上的密碼及密碼長(zhǎng)度,但此時(shí)卡上的數(shù)據(jù)也隨之刪除。強(qiáng)制擦除的命令碼為Ox80,在強(qiáng)制擦除前要將block設(shè)置為IByte,具體操作流程如圖3所示。

1

三、系統(tǒng)軟件設(shè)計(jì)

系統(tǒng)軟件設(shè)計(jì)主要主要包括Fat32文件系統(tǒng)移植、對(duì)SD卡進(jìn)行加密與解鎖、MP3文件解碼等幾個(gè)部分。

1、移植FAT32文件系統(tǒng)

由于FAT16最大只支持2G的容量,所以大容量SD卡中的文件系統(tǒng)必須兼容FAT32文件系統(tǒng),目前嵌入式系統(tǒng)中文件系統(tǒng)很多比如C/FS、ZLG/FS、eFSL、FatFS等,其中FatFS文件系統(tǒng)是免費(fèi)開源的文件系統(tǒng),它有占用資源少、讀寫速度快、易于移植的優(yōu)點(diǎn),并且它完全兼容FAT32文件系統(tǒng),并提供了豐富的API。

移植的重點(diǎn)主要在于編寫diskioc這個(gè)文件,原理是把SD卡讀寫扇區(qū)的函數(shù)與FatFS文件系統(tǒng)中的讀寫函數(shù)進(jìn)行掛接。diskio總共需要編寫6個(gè)函數(shù),但其中最重要的只有三個(gè)函數(shù),他分別是一dis'k_initialize;disk_read和disk_write,其它的接口函數(shù)如果不需要使用,可以直接返回0。

1)dis k_initialize:該函數(shù)的功能是初始化存儲(chǔ)媒介。這里是指SD卡。在這個(gè)函數(shù)中加入SD卡的初始化函數(shù)弘這樣系統(tǒng)掛載FatFS時(shí)SD卡會(huì)隨之初始化。

2)disk read:讀扇區(qū)函數(shù),是通過(guò)文件系統(tǒng)讀取SD卡最基本的動(dòng)作之一,此處需要把SD卡驅(qū)動(dòng)中寫單個(gè)扇區(qū)和寫多個(gè)扇區(qū)的函數(shù)與其掛接。

3)disk_write:寫扇區(qū)函數(shù)妻與讀扇區(qū)函一樣,這里要把SD卡驅(qū)動(dòng)中讀單個(gè)扇區(qū)和讀多個(gè)扇區(qū)的函數(shù)與其掛接。

2、在SD卡加密狀態(tài)下對(duì)MP3解碼

由于VS1003是塊硬件語(yǔ)音解碼芯片,在微控制器從SD卡中讀取MP3文件并轉(zhuǎn)換成二進(jìn)制碼流后,通過(guò)SPI總線傳送給VS1003就能進(jìn)行MP3播放。

在系統(tǒng)第一次上電時(shí)要判斷SD卡是否有加密,如果沒(méi)有加密,在系統(tǒng)上電后馬上給SD卡加密并上鎖,以保護(hù)SD卡內(nèi)的數(shù)據(jù)的安全,然后匹配密碼進(jìn)行解鎖,最后用戶就可以操作卡中的數(shù)據(jù)了。在掛載文件系統(tǒng)后,如果能通過(guò)文件系統(tǒng)讀取到卡的信息,如卡的容量、扇區(qū)大小就表明卡沒(méi)有加密,反之如果讀不到SD卡的基本信息那么該卡已經(jīng)加密。整個(gè)系統(tǒng)軟件設(shè)計(jì)流程如圖4所示。

1

四、系統(tǒng)整體測(cè)試

SD卡經(jīng)過(guò)該系統(tǒng)加密后通過(guò)讀卡器插入PC機(jī),PC機(jī)無(wú)法檢測(cè)到SD卡的盤符,不能對(duì)SD卡進(jìn)行任何操作。在執(zhí)行強(qiáng)制擦除命令后,SD卡中的文件系統(tǒng)被破壞,此時(shí)PC機(jī)依舊無(wú)法打開該卡,如果需要繼續(xù)使用該SD卡,需要在PC上重新格式化。在格式化前后都無(wú)法通過(guò)數(shù)據(jù)恢復(fù)軟件恢復(fù)任何數(shù)據(jù),該測(cè)試所使用的恢復(fù)軟件有:EasyRecovery、DiskGenius和金山數(shù)據(jù)恢復(fù)等等。

經(jīng)過(guò)運(yùn)行測(cè)試,系統(tǒng)可以在加密的情況下流暢的播放320kb/s的高品質(zhì)MP3音樂(lè)文件,成功完成了帶加密功能的工業(yè)MP3的實(shí)現(xiàn)。

小知識(shí)之FAT

FAT是文件配置表(英語(yǔ):File Allocation Table,首字母縮略字:FAT),是一種由微軟發(fā)明并擁有部分專利的文件系統(tǒng),供MS-DOS使用,也是所有非NT核心的微軟窗口使用的文件系統(tǒng)。