- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
基于MEMS强链和FPGA的USB移动硬盘数据加解密系统
录入:edatop.com 点击:
摘要:随着信息量的急剧增长,信息安全日益受到人们重视。一个完整的数据加解密系统应该 具备安全可靠的密码认证机制和加解密算法。本文基于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 传输带宽,两者的有机协作使得一种高 效的硬件加解密流水线得以实现。
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 传输带宽,两者的有机协作使得一种高 效的硬件加解密流水线得以实现。