简介
基于SRAM的FPGA是非易失性器件。它们需要外部存储器来在加电时存储发送给它们的配置数据。发射过程中,可以采集配置比特流,并用其来配置其它FPGA。这类知识产权盗窃可能会让设计者遭受收入损失。
本文提供的解决方案可以使FPGA设计免遭复制。它能够保证FPGA设计的安全,即使是采集到了配置比特流。这是通过在握手令牌被从MAX II器件传递到FPGA之前禁止FPGA内用户设计的功能来实现的。MAX II器件被选来生成握手令牌,因为它们是非易失性的,并且可以在掉电期间保存配置数据。并且,MAX II器件是针对这类应用的、最具成本效益的CPLD。还提供了实现该解决方案的参考设计。
实现
FPGA设计安全性解决方案的硬件实现如图1所示。MAX II器件生成发送到FPGA上的连续握手令牌,来实现用户设计。FPGA和MAX II器件之间有5个信号接口:clock、shift_ena、random_number、ready和handshaking_data。一旦完成FPGA配置,它就向MAX II器件提供连续时钟。要让系统开始运行,必须断言连到FPGA和MAX II器件上的启动/复位信号。FPGA内的随机数发生器(RNG)开始生成FPGA和MAX II器件(一加电或者一断言启动/复位信号,就向MAX II发送一次随机数)的初始计数器值。一旦随机数准备就绪,shift_ena信号就变为高电平,并且随机数就通过random_number信号逐渐转移到MAX II器件上。通过断言就绪信号来表明FPGA做好了在随机数被完全转移到MAX II器件上之后,从MAX II器件接收握手令牌的准备。
图1 FPGA设计安全性解决方案的硬件实现(略)
配置完成后,FPGA内用户设计的功能被禁用,因为启用信号处于逻辑低状态。启用信号被断言,并且用户设计只在来自于MAX II器件的握 手令牌与在FPGA内部生成的数据匹配时才开始运行。当2个数据之间有差别时,启用信号变为低电平,并且用户设计被禁用。在MAX II器件内 生成握手令牌的方法和过程与在FPGA器件内生成数据的方法和过程是相同的。无需正确的令牌,FPGA器件内的用户设计就被禁用了。这样即使是采集到了配置比特流,也可以防止用户设计被复制。
设计构建模块
FPGA部分的设计安全元件包含1个时钟分频器、随机数发生器(RNG)、安全内核、比较器和可靠性,而MAX II器件部分的设计安全元件则只有安全内核,如图1所示。
FPGA和MAX II器件内使用的安全内核是相同的,如图2所示。它包含下列元件:
图2 用于FPGA和MAX II器件的安全内核(略)
随机数接收器
64位计数器
编码器
移位器/多路复用器
时钟分频器
FPGA内部的时钟分频器用于将速度较慢的时钟从系统时钟中分离出来,以便为FPGA和MAX II器件提供安全内核。这是因为安全内核不需要在极高的频率下运行。时钟分频器对于时序而言很有用,特别是在系统在高频率下运行的时候,同样如果系统在低频率下运行时则可以忽略它的存在。
随机数发生器(RNG)
每次启动/复位信号被断言的时候,RNG就会为64位计数器生成随机初始值。然后,随机数就被逐渐转移到FPGA和MAX II器件的安全内核上。参考设计采用了32位RNG。
随机数接收器
随机数接收器接收从RNG逐渐转移过来的随机数,并且将数据按正确的顺序整理好。数据作为初始值而被发送到64位计数器上。
64位计数器
64位计数器用于生成64位数据,来提供给编码器。它是X=X+A形式的简单加法器。X是一个64位的初始值,而A则是计数器的一个增量值,并且应该是质数。初始值X来自于RNG。对于参考设计而言,32位来自于RNG,而另外的32位则由 用户以设计代码的形式进行设置。A可以由用户以设计代码的形式进行设置。计数器的输出被馈入编码器,在那里将完成数据加密操作。编码器一完成对先前数据的加密操作,计数器就会增加其值。
编码器
编码器可以是任何难于破解的加密标准。参考设计使用了三重数据加密标准(3DES)。3DES编码器的输入和输出是64位的值,并且需要48个时钟周期才能彻底完成64位数据的加密操作。
移位器/多路复用器
移位器/多路复用器按照特定的顺序从编码器获取少量的输出位(16位),将它们存储到寄存器中,并将其逐渐转移到比较器上,而编码器则准备下一个值。
比较器
比较器逐位比较来自于MAX II器件的编码数据(握手令牌)和从FPGA内部生成的编码数据。启用信号被断言,并且在分别来自于MAX II器件和FPGA的数据匹配时启用用户设计的功能。如果不匹配,请参照可靠性部分。
该结构可以被多次复制,来产生更多启用信号,从而启用用户设计的不同部分。复制可以防止别人删除FPGA比特流,从而避免了启用信号变为高电平和设计安全机制失效的出现。
可靠性
可靠性有助于处理可能导致系统失效的随机比特误差。每10个时钟周期(这只是个例子,用户可以相应地改变方法来适应他们的应用),参考设计最多允许发生1次数据不匹配。换句话说就是,启用信号会保持高电平,并且如果10个时钟周期内至多发生1次数据不匹配的话,系统会继续运行。启用信号变为低电平,并且在10个时钟周期内发生2次错误时用户设计就被禁用。在断言启动/复位来重启系统之前,系统一直处于无效状态。
用户设计模块
用户设计模块是真正的FPGA设计。来自于安全模块的启用信号应用于在其处于低电平时禁用用户设计模块。换句话说就是,如果比较器发现来自于MAX II器件和FPGA的数据之间有差别时,在考虑到了安全性的情况下,用户设计的功能应被禁用。
启用信号处于低电平状态时,禁用用户设计的例子如图3所示。图3所示的FPGA用户设计具有Clk_en输入信号,可以启用设计内的时钟。设计只会在Clk_en信号处于高电平状态时才运行。为了实现设计安全机制,对用户设计稍加修改(添加1个“与”门),以便在来自于安全模块的启用信号为低电平时禁用之,如图4所示。
图3 无安全机制的FPGA设计(略)
图4 有安全机制的FPGA设计(略)
解决方案的安全性
当一加电将它从外部存储器器件发射到FPGA上时,就可以采集FPGA的配置比特流。可以通过使用采集到的比特流来配置其它FPGA,从而来复制FPGA设计。
有了这个解决方案,FPGA用户设计将在来自于MAX II器件的握手令 牌与在FPGA内部生成的数据相匹配时才运行。FPGA设计可以免受复制,因为没有握手令牌的复制设计就不能正常运行。用于生成握手令牌的MAX II器件是非易失性的,并且能够在掉电过程中保留其配置。
解 决方案的安全性在于MAX II器件生成的握手令牌。要破坏这种机制,人们需要复制MAX II器件生成的令牌的整个比特流,或者查出编码 器中使用的、用于生成令牌的密钥。复制整个比特流来破坏这种机制是不可能的,因为每次加电时,MAX II器件生成的握手令牌都是不同的。
这是因为有RNG,它可以生成不同的数字,用来在加电时发送给MAX II器件。
如果使用了公认的加密算法,则很难揭示编码器中所使用的密钥。并且,输入到编码器中的数据无法从外部看到,并且只有一部分已加密数据被移出,这就加大了进行纯文本攻击的难度。纯文本攻击是一种通过分析编码器的输入和输出数据来猜测密钥的攻击方式。因此,该解决方案可以保护FPGA设计的安全。
为了让该机制正常运行,提供安全模块的系统时钟应该和图1所示的提供FPGA用户设计的时钟是相同的。这就可以防止人们在启用信号为高电平时禁用安全模块时钟。
结论
该 FPGA设计安全性解决方案可以保护Altera FPGA设计免受复制,即使采集到了配置比特流。这是通过在握手令牌从MAX II器件传出之前禁用FPGA用户设计来完成的。只有在握手令牌和在FPGA内部生成的数据相匹配时才启用FPGA用户设计。借助于该解决方案,设计者在FPGA领域内的知识产权就可以得到保护了。 |