怎样解密DS28E01芯片的FPGA加密认证系统设计?
在关键设备的设计中,有必要采取加密的技术来保护设计者的知识产权。 由于 FPGA 基于 SRAM,所以掉电以后,其内部的数据必然丢失,为了让系统正常运行,就需要在系统上电的时候给 FPGA 加载程序,目前对 FPGA 加载程序的方法主要有以下几种: 第一、 采用边界扫描的方式,这种方法主要用于产品调试期间用; 第二、 采用专用配置芯片配置,主要用于升级次数少的产品; 第三、 采用存储器+微控制器的配置方法,这种配置方法灵活,使用方便,便于升级,多用于需要多次升级的产品。
以上几种 FPGA 配置方法在上电加载程序的时候,都需要将配置的数据通过配置管脚下载到 FPGA 中,这样,就可以利用一定的电路对这些引脚进行采样来获得 FPGA 的配置信息,就可以对另一款同样的 FPGA 来进行配置,这样,就不需要知道设计的具体原理而实现了同样的功能,从而达到了克隆设计的目的,对设计者造成了巨大的损失,所以,我们有必要对我们的设计采取加密认证技术。在现代电子系统的设计中,高速 FPGA 运行时需将其配置数据加载到内部 SRAM 中,改变 SDRAM 里面的数据,从而使 FPGA 实现不同的功能,即所谓的可重构技术。
但是由于其采用的是基于 SRAM 的技术,每次上电的时候都会重新配置 FPGA,这就可以通过监视 FPGA 配置引脚位流的方法来实现对设计的复制。步骤/方法 DS28E01 芯片及其加密原理。MAXIM 公司生产的 DS28E01 将 1024 位 EEPROM 与符合 ISO/IEC110118-3 安全散列算法(SHA-1)的质询响应安全认证结合在一起。在单个芯片内集成了 1024 位 EEPROM(分为 4 页,每页 256 位)、64 位密钥、一个寄存器页、512 位 SHA-1 引擎和 64 位 ROM 序列码。
DS28E01 对数据按照 1-Wire 协议串行传送,通信速率为 15 3kbps(标准速率模式)或 125kbps(高速模式),只需要一根数据线和一根返回地线,最大限度的节省了对控制器 I/O 口的占用。SHA-1 算法是一种通过直接构造复杂的非线性关系达到单向要求,设计单向散列函数的算法,具有“不可逆”、“防碰撞”以及良好的“雪崩效应”,防止了盗窃者利用相近的输入来达到破解密码的可能性。 DS28E01 内部的加密过程是在内部的加密引擎中进行的,其加密引擎利用的是 HSAH 函数的 SHA-1 算法,但是和标准的 SHA-1 算法又有几点不一样。
标准算法的输入值可以小于、等于或大于分组长度 512bit,但是 SHA-1 引擎的 SHA-1 算法输入的是固定的 512bit,也就是标准 SHA-1 算法的分组长度。并且标准 SHA-1 算法每个分组的最后一次循环体的输出都要和输入每个分组的初始常量做 MOD232 加法,而在 DS28E01 的 SHA-1 引擎中由于只有一个 512bit 的循环体,最后就省略了将初始常量添加回结果的最终步骤。至于引擎的 SHA-1 算法的其他步骤则与标准的 SHA-1 算法相同。
加密模块设计。目前由很多能实现 FPGA 加密的方法,如在 Xilinx Virtex-II 和 Virtex-4 这类的高端 FPGA 中,支持对配置数据流的加密操作。这样仅当 FPGA 中含有相同的密钥时,这些数据流才可以工作。但是这种加密的方法对更为广泛的、对成本比较敏感的应用场合来说不甚合适。因此,这里利用另一种可行的身份识别法来防止意外拷贝。这种方法对所有 FPGA 家族都使用,包括低端的 Xilinx Spartan-3 系列 FPGA。
加密模块的原理图设计。唯一识别号及附加数据(常数)在内的 HASH 运算结果,运算的结果是 160 位的 MAC(消息认证码),同时,FPGA 内部也会同安全存储器一样进行包含密钥、随机数、附加数据及器件识别号在内的 HASH 计算并产生一个期望的 MAC。然后,在 FPGA 内会对这两个 MAC 进行比较,如果一样,则 FPGA 认为该电路是“合法”电路,因为它拥有正确的密钥。此时 FPGA 进入正常工作状态,开启/执行其配置数据中的所有功能,会执行所有的功能。
如果 FPGA 和 DS28EO1 两者产生的 MAC 不匹配,则系统会认为该电路是一个“非法”电路,因为该系统不具有正确的密码。此时 FPGA 进入非正常运行状态,只执行有限的功能。加密认证模块的程序设计。为了实现加密认证的功能,我们在 FPGA 中利用 VHDL 语言设计了 IFF 模块,在 IFF 模块的内部是根据 SHA-1 算法实现了对输入密码的 HASH 函数运算以及与 DS28E01 中产生的 MAC 的比较功能,IFF 模块的接口定义。
其中,CLKIN 是一个大于 20M 的时钟;IFF 是认证启动信号,在 IFF 信号上升沿的时候模块内部开始启动 HSAH 运算过程以及密码比较过程;RESET 是复位信号,高电平有效;IB 则是 FPGA 通过 1-Wire 协议与 DS28E01 通讯的信号;FOE 信号是 IFF 模块的输出线,在 IFF 内部 MAC 比较完成后,如果 FPGA 认定该电路具有正确的密码,则会置 FOE 信号为低电平,反之如果 FPGA 认定该电路不是合法的电路,则会置 FOE 信号为高电平,在 FPGA 内部可以根据 FOE 的信号来实现不同的功能。
这样,系统就可以根据电路是否是被拷贝的来实现不同的功能,防止了设计被拷贝。在 IFF 模块中,实现了标准的 SHA-1 算法,在 FPGA 配置完成之后,在 RESET 信号与时钟信号的控制下,FPGA 内部就会运行 SHA-1 算法产生相应的 MAC,与由 DS28E01 产生的 MAC 进行比较,根据比较结果将 FOE 设置为不同的状态,然后 FPGA 就可以根据 FOE 的状态来判断是否是合法电路。其中的初始化主要完成消息填充和附加原始消息长度以及在算法中需要的函数和常数的定义。
END 注意事项 SHA-1 算法引擎的 DS28E01 芯片作为加密认证系统的核心芯片,并利用 DS28E01 针对 Xilinx 公司的 X3CS500E 开发了实际的加密认证系统,并将此系统应用于实际的产品中,取得了良好的效果。