基于MEMS和FPGA的移动硬盘数据加解密系统
随着信息量的急剧增长,信息安全日益受到人们重视。一个完整的数据加解密系统应该 具备安全可靠的密码认证机制和加解密算法。本文基于MEMS 强链、USB 控制器和FPGA 设 计了一种USB 接口的高效数据加解密系统,采用AES 加密算法。普通IDE 硬盘挂接该系统后 成为安全性极高的加密USB 移动硬盘,其平均数据吞吐率接近普通U 盘,达到10MB/s.
1. 系统结构布局
该系统由Cypress CY7C68013 USB2.0 控制器、Altera EP2C35 FPGA 和MEMS 强链构成, 图1 描述了整个系统的硬件布局。
MEMS 强链负责对用户输入的密码进行验证。CY7C68013 USB 控制器内含增强型51 核,它不 但能高效处理USB 协议事务,而且是整个系统的控制中心。EP2C35 FPGA 一端连接USB 控制 芯片的GPIF 接口,一端连接IDE 硬盘,它负责从IDE 总线中区分出控制信号、读写硬盘寄存器的数据信号和读写硬盘扇区的数据信号,然后仅对写入硬盘扇区的数据作加密处理,对读出 硬盘扇区的数据作解密处理。
2. MEMS 强链
MEMS 强链的棘爪能卡住棘轮,从而能精确定位到固定的位置,棘爪装有电磁驱动型电机, 使其具有误码鉴别与自复位功能,因而可用于信息安全,实现密码锁的功能。鉴码机构由两组 电磁型微步进电机驱动反干涉齿轮集A 和B,反干涉码轮集中机械固化了密码。反干涉齿轮集 在正确解码时,码齿之间互相没有接触;当出现错码时,码齿相互干涉,反干涉齿轮集卡死。 使用光电耦合机构,在正确接收到24 位密码时光电能量耦合,系统开启。图2 是MSMS 强链 结构图。
3. 物理密钥与密码认证
物理密钥是相对于逻辑密钥而言的,逻辑密钥通常以二进制形式存在于芯片内部ROM 区,容易被破解。而物理密钥固化在机械结构内部。本设计采用的反向啮合齿轮集鉴码机构所蕴含 的密钥就属于物理密钥。它的结构相当隐含,不是专业人士即使知道了鉴码机构,也很难推出其密码。
密码认证开始时,USB 控制器把接收到的来自PC 的24 位待验证二进制密码以脉冲的形 式传递给强链。强链的电机会根据脉冲驱动码轮。若密码正确,反干涉齿轮*无摩擦的走通 一周回到原位;只要有一位密码错误,反干涉齿轮*在该位卡死。USB 控制器根据强链的反 馈信号作出判断,如果验证通过,则将该系统枚举成一个可移动磁盘,并把该正确密码传递给 FPGA,作为AES 加密算法的密钥;否则向PC 机返回验证失败的信息。
4. ATA 协议控制器的实现
从密码认证通过,枚举开始的那一刻起,USB 控制器得到了对硬盘的访问权。 根据 ATA 协议,对支持Ultra DMA 传输方式的IDE 硬盘而言,操作归结为两种,对硬盘接 口寄存器读写以及对硬盘扇区进行Ultra DMA 批量扇区。为了对硬盘数据进行加解密,我们把 FPGA 插入连接GPIF 接口和硬盘接口的IDE 总线,这样所有控制信号和数据信号都要通过 FPGA,受到FPGA 的监视和控制。
FPGA 必须实现有限状态机,能够对信号进行协议解析,区 分出那些需要加解密的扇区数据,也就是在Ultra DMA 传输过程中出现在数据总线上的数据。 在PIO 状态时,FPGA 让所有信号保持直通,因而读写硬盘接口寄存器的操作不受任何影响,但状态机监测对硬盘接口寄存器的写入操作。一旦发现写入命令寄存器的命令代码为DMA 读 (0xC8 或0x25)或DMA 写(0xCA 或0x35)命令,则有限状态机进入DMA 状态。
因为考虑到数据经加解密模块会有200ns 左右的延时,如果控制信号仍然直通一定不能满 足DMA 传输协议的时序要求,所以理想的办法是把控制信号也延时相应的时间。
延时多少的确定很困难,况且也没有必要,我们采取的方法是设计了三个主要模块:数据 接收模块、数据处理模块和数据发送模块,连成一条处理流水线,这样既能对数据流进行完全 时序化的控制,又能维持较高的数据吞吐。如图3 所示。数据接收模块的任务是把硬盘发送过来的读扇区数据或者USB 控制器发送来的写扇区数 据正确的接收和缓存;数据处理模块的任务是对扇区数据进行加密或解密处理;数据发送模块 的任务是把处理完的结果数据发送出去。
由于数据流是双向的,所以两个方向上各有一条数据收发流水线。在一次DMA 传输中,只有一条流水线是工作的,且它们暂时获得IDE 总线的控制权。
不失一般性,我们讨论下执行DMA 读命令的全过程。首先,在PIO 状态下将DMA 读命 令的代码0xC8(或0x25)写入硬盘的命令寄存器。此后状态机进入DMA 读状态,总线切换给 DMA 读数据接收模块和DMA 读数据发送模块。DMA 读数据接收模块与硬盘进行握手确认, 启动UDMA 读传输,此后每当硬盘DMA strobe 信号(DMA 同步信号)发生跳变,就对16 位 硬盘数据总线进行采样,并更新CRC 接收校验;每采样8 次则整合成一个128 位并行数据,提 供给AES 解密模块,该模块取走这128 位数据开始新一轮AES 解密迭代运算,同时输出前一 轮处理完的128 位解密数据,并拆分为8 个16 位并行数据,陆续存入一个16 位宽的FIFO。与 此同时,DMA 读数据发送模块查询到FIFO 中出现了数据,就开始不断的从中读取,并放在16 位数据总线上提供给USB 控制器,每放一次数据,便翻转一次DMA strobe 电平使得USB 控制 器的GPIF 接口能够同步接收数据,同时更新CRC 发送校验。
当硬盘把所有指定数量的加密数据都发送给FPGA 后会收到FPGA 的CRC 接收校验反馈, 若与硬盘内部的CRC 校验一致,则硬盘认为这次DMA 读命令被正确执行。
当 FPGA 把所有处理完的解密数据都发送给USB 控制器后也会收到USB 控制器的CRC 校 验反馈,若与FPGA 内部的CRC 发送校验一致,则可以认为一次完整的含解密的DMA 读命令 被正确执行。
图 3 中的全局控制状态机负责整个系统的控制和协调,它实时的监测PIO 写入命令,并在恰当的时机把IDE 总线控制权切换给加密流水线或解密流水线。当加解密流水线执行完一次 DMA 传输命令后,总线控制权会重新交还给全局控制状态机。
5. AES 加密模块的实现
AES 的设计原理可参考文献[1],下面只简单介绍算法过程。AES 是一个迭代的分组密码, 每一轮迭代称为一个轮变换,包括一个混合和三个代换:
(1)字节代换(SubBytes):利用S 盒对状态的每一个字节进行非线性变换。
(2)行移位(ShiftRow):对状态的每一行,按不同的位移量进行行移位。
(3)列混合(MixColumn):对状态中的每一列并行应用列混合,在最后一轮省略该步。
(4)扩展密钥加(AddRoundKey):与扩展密钥异或。 加密算法的流程如图4 所示。
相应的,解密算法使用逆序的扩展密钥,轮变换分别为InvSubByte,InvShiftRow, InvMixColumn,数据流程稍有不同。
我们设计的AES 加密运算模块以128 位为一个分组,完成一个分组的运算需要11 个时钟 周期。第1 个时钟周期,密钥扩展模块输出第1 个扩展密码,也就是初始密码本身;同时初始 变换模块用这个扩展密码对128 位明文作AddRoundKey 操作。
第2 个到第11 个时钟周期,密 钥扩展模块依次生成10 个扩展密码,同时,轮变换模块利用这些扩展密码对输入密文作10 个 轮次的轮变换,其中最后一轮缺少列混合操作,然后输出最终的密文,结束一个分组的运算。
6. 数据吞吐率分析
Ultra DMA 在模式2 下的数据传输率为33.33MB/s。由于FPGA 全局时钟频率为100MHz, 所以加解密一个128 位分组需要110ns。加上数据的输入和输出阶段各占用一个时钟周期,总共 需要130ns。所以加解密模块的数据处理速率约为61.54MB/s,完全能够达到实时处理的要求。
7. 结束语
本文提出了一种安全高效的USB 移动硬盘数据加解密系统。其中,MEMS 强链的应用开辟 了系统物理认证的新方向;Ultra DMA 协议接口的FPGA 实现大大提高了硬盘读写的吞吐率,同时AES 加解模块的处理速率又能完全满足Ultra DMA 传输带宽,两者的有机协作使得一种高 效的硬件加解密流水线得以实现。