当前位置:首页 >资讯 >工业mp3中sd卡硬件如何加密(一)


根据工业MP3模块对语音文件加密的需求,如何保证工业应用领域低成本、低功耗微控制器下的文件加密已成为项目研究的重点。

一、系统硬件组成部分

1.SD卡

安全数字卡(SD、SecuredigitalmemoryCard)是为满足安全、容量、性能和使用环境的需要而设计的存储介质。该卡包含一个智能控制模块。SD卡之所以被称为安全数字卡,是因为硬件加密技术固化在智能控制模块中。

SD卡与微控制器的接口包括两种通信模式:安全数字输入输出(SDIO、Securedigitaligitandoutputcard)和串行外设接口(SPI、Serialperipheralinterface)。您可以根据实际需要选择使用这两种通信模式中的一种与卡进行通信,因为并非所有的微控制器都有SDIO接口,而且SPI协议可以通过普通IO口进行模拟,系统采用SPI通信模式。

2.VS1003音频解码器。

VS1003是一款便宜的MP3/WMA/MIDI音频解码芯片。芯片包含一个自主产权的低功耗DSP处理器核VS_DSP,外围提供一个支持SPI协议的串行控制数据接口,以及一个高质量可变采样率的ADC和立体声ADC。

3.STM32F103C8T6微控制器。

STM32F103C8T6是一款性能高、功耗低、性价比高的工业MCU,内部集成了两个硬件SPI控制器,正好可以满足系统的设计,从而节约硬件成本,控制产品体积。系统硬件设计框图如图1所示。

1

二、SD卡加密优势及程序设计要点

1.SD卡的加密优势。

SD卡嵌入了硬件中的加密算法。当卡通电时,如果卡包含密码,卡将自动进入锁定状态。在这种状态下,不允许阅读和写作,以确保卡中数据的安全。与闪存中常见的软件加密相比,SD卡硬件加密具有以下优点:

(1)安全性高。

闪存中的软件加密是通过加密算法加密闪存中的文件。当闪存格式化时,加密功能不复存在,但此时可以通过PC上的恢复软件恢复卡中的数据。SD卡硬件加密后,卡无法在PC上识别,更不用说格式化卡了,安全性很高。

(2)实现低成本。

SD卡中的数据加密只需要一台便宜的单片机,而普通嵌入式设备由于主控CPU的限制,很难通过软件算法加密大数据。

(3)操作速度快。

软件加密是对闪存中的单个文件进行加密。加密速度取决于算法的难度和CPU的速度,加密后的读写速度会因软件解密而减慢。SD卡加密是对整个磁盘的加密,纯硬件加密不影响读写速度。经测试,数GSD卡加密所需时间不超过1s,这是软件加密无法实现的。这也为数据加密在工业中的应用提供了实时条件。

2.SD卡加密程序设计要点。

SD卡密码和密码长度保存在128bit的PWD寄存器和8bit的PWD-LEN寄存器中,这些寄存器是非易失性的。与SD卡加密的操作命令为CMD42,在写入CMD42后,再写入SD卡的命令数据块完成SD卡硬件加密操作。图2是加密命令数据块的结构。

1

根据图2,命令数据块中的第一个字节(即Byte0)可以称为命令代码。通过命令代码的配置,可以完成设置密码、删除密码、锁定和解锁以及强制擦除卡的内容。以下是常见疫苗接种操作模式的要点。

(1)加密并上锁。

在对SD卡进行加密和锁定后,SD卡将无法在没有解锁的情况下读写。4:根据图2,锁定的命令为Bit2=1,设置密码的命令为Bit0-1,其他位置设置为O,即命令码为Ox05。在SD卡接受CMD42命令之前,需要降低SPI的通信速度,以便更好地接受加密指令。SD卡在读写数据时块长度(block)为512byte,但在写入密码之前,应通过CMD16命令设置block长度为密码长度(PWDLEN)和两个byte,即PWDLEN+2,加密操作完成后恢复数据块长度为512byte。以设置密码为123456为例,加密锁定的关键代码如下:

SPI_SetSped(Low)://将SPI设置为低速通信模式。

SD_SendCMD(CMD16、Ox08、Oxff);//设置blcok为8。

SD_SendCmd(C:VID42,Oxffff,Ox95):11写入命令。

SD;SPI_WriteByte(Oxfe)://数据命令盾牌。

SDSPI_WriteByte(Ox05)://设置密码并锁定卡。

SD_SPI_WriteByte(Ox06);//密码长度。

SD_SPI_WriteByte(Ox31);//写入密码123456。

SD_SPI_Wri\

SD_SPI:WriteByte(Ox33);

SD_SPI-WriteByte(Ox34);

SDSPI_WriteByte(Ox35);

SDSPI-WriteByte(Ox36);

SDSPI_WriteByte(Oxff)://写两个字节的CRC验证。

SDSPIWriteByte(Oxff)

SDSendCMD(CMD16,Ox200,Oxff)://恢复block。

SPI_SetSpeed(High);//恢复SPI为高速通信模式。

(2)解锁

解锁是指用户在SD卡加密锁定后输入密码操作SD卡中的数据的一种方式。系统丢电后,SD卡自动进入锁定状态。解锁操作类似于上面的加密锁,只是用Ox00代替命令码,然后写入密码长度和密码内容。SD卡接受这些数据后,将匹配上次写入的密码。如果匹配成功,访问卡中的数据将被允许,否则卡将被锁定。

(3)强制擦除。

如果用户忘记了SD卡的密码,可以通过强制擦除命令来擦除卡上的密码和密码长度,但此时卡上的数据也会被删除。强制擦除的命令代码是Ox80,在强制擦除之前将block设置为IByte,具体操作流程如图3所示。