微波EDA网,见证研发工程师的成长!
首页 > 应用设计 > 消费类电子 > 基于SOPC的USB密码模块硬件与固件设计

基于SOPC的USB密码模块硬件与固件设计

时间:05-24 来源:中电网 点击:

对于NiosII而言:

外部如有数据要进行加/解密处理,NiosII首先写命令到MCU命令接收寄存器,待MCU明确表示接收到命令后,返回一个确认信号给:NiosII;NiosII接收到确认信号后,则转入到写数据状态。在写数据状态,NiosII把数据按一定长度分组进行填充,输入到桥接器的输入FIFO。待数据输入完后,发出输入FIFO有效信号到MCU,转入判断IP运算核是否有效;若未完成,则继续在该状态进行等待。当IP运算完后,MCU置读FIFO信号有效,NiosII判断这个信号有效后直接从桥接器的输出FIFO,把数据从输出FIFO送到外部接口部件,完成一次数据加/解密过程;否则,继续等待,超出规定时限后,发出错误警告。

对于MCU而言:

MCU接收到NiosII过来的命令,对命令进行解析后,向NiosII发出确认收到命令信号,并判断输入FIFO里有没有数据。若有数据,则转入从输入FIFO取数据状态,分组送入密码运算IP核进行处理,待一组处理完后,送数据到输出FIFO,置读信号有效,完成一次数据加/解密过程;若输入FIFO为空,则等待。当所有数据全部处理完成后,做出完成标志。



2.2.3总线桥的设计

本密码模块包括Avalon总线和自行设计的总线,两条总线通过一个桥模块进行连接,完成总线与总线的数据通信。外部接口模块通过Avalon总线与NiosII进行通信,自行设计的总线主要负责密码专用控制器MCU与密码运算IP核之间的通信。为使这两条总线实现时序匹配,能够较好地数据传输,设计了总线桥。

总线桥的总体结构如图5所示。它包括地址译码和外设IP选择模块、写数据寄存器模块、读数据寄存器模块和状态机模块。

状态机模块主要协调两侧总线的协议时序,从而满足数据的正确传输要求;同时,还将根据MCU发送过来的传输命令得到外设IP相关的特征信息,产生用于NiosII的控制信号。地址译码和外设IP选择模块根据自定义总线发出的地址信号,译码后选择待操作的外设IP,并获取该IP的特征信息。

3 固件设计

3.1 固件工作原理

USB密码模块初始化完成后,首先需要对用户进行身份认证。验证通过,即启动生命期管理模块,并根据口令的权限级别,实现对密码模块系统的安全访问。再继续接收主机命令,并进行相关操作。

若口令验证不正确,则启动口令计数器计数,继续进行口令验证。当计数达到预定值时,则锁定安全专用模块并清空其所有数据,使用户不能进行任何操作。等待管理员重新进行复位设备操作,销毁密钥与数据。

数据的加密存储以页为单位进行,调用AES分组加密算法加密。由128位的模块保护密钥对每页(2 KB)64个分组的存储数据采用密码反馈链接(CBC)模式进行加密。

3.2 固件工作流程

图6描述了基于SOPC的USB密码模块的基本工作流程。系统启动后首先进行系统自检,若自检不正常就退出模块;若自检正常,则调用总控程序,接收用户命令并进行口令认证。若认证成功,则命令有效,启动安全期管理,继续分析命令,完成相应的控制操作(如口令设置、密钥配置、页读或页写、数据销毁),然后继续等待接收用户的命令。若认证不成功,则进入审计过程,开启计数器功能,并继续进行口令认证;当计数达到预定值时,将安全Flash中存储的数据和密钥销毁,并锁定密码模块,使非法用户无法使用。只有管理员可以对模块进行重新配置。

4 验证与测试

4.1 桥的基本读操作仿真时序

从图7中可以看出,Avalon总线一侧信号在ready信号有效时,S_bus总线已经将运算IP核处理好的数据写入到桥接器。这时,桥的状态检测模块进入初始状态S0,根据Avalon总线一端输入的外设地址及外设接口信号,解析出需要具体写入的外设接口模块。待数据发送到总线后,然后置读有效,表示NiosII可以将数据写入外设接口模块了,至此完成了一次数据的传输。

4.2桥的基本写操作仿真时序

从图8中可以看出,S_bus一侧在wr_vail信号有效时,Avalon总线已经将外设接口核的数据写入到桥接器中。这时,状态机从MCU中解析出需要传输到的目的IP核的地址,将数据送到S_bus总线,由S_bus总线写入到运算IP核中。

4.3数据加解密模块验证

在USB密码模块加电后,密码模块首先完成自检、配置寄存器等一系列操作。然后,便可以向数据密码模块内送入数据,按用户要求进行操作;此时开始计时,先后写入需要加密或解密的数据,以及加密、解密命令。以上操作完成后,开始写入数据。算法IP完成运算后,便可读出密/明文。如此循环,直至整个过程结束,停止计时。

输入明文向量:

00112233445566778899AABBCCDDEEFF

输入初始密钥:

000102030405060708090A0B0C0D0E0F

输出密文结果:

69C4E0D86A780430D8CDB7807084C55A

AES模块仿真结果与加密功能测试结果如图9和图10所示。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top