3密码锁安全性设计

安全性作为密码锁的首要特性,一直以来都是密码锁设计的重点。然而以往基于FPGA的密码锁都是参考机械式密码锁的方法,通过提高密码位数来提高密码的破译难度。但是由于基于FPGA的电子密码锁与机械密码锁构造的不同,这种方法对FPGA密码锁安全性的提高并不全面。前面已经提到,由于FPGA芯片数据掉电易失的特点,必须将密码锁的正确密码存储在外部密码存储器中,每次解锁都需要从密码存储器中读取正确密码与按键输入进行比对,这就使得正确密码很容易在密码存储器读写的过程中被泄露出去,严重影响密码锁的安全性。为解决这一问题,本文提出一种冗余编码结合掩码加密的硬件加密方法,该方法能够大大降低开锁密码泄露的可能性。

3.1设计原理

所谓掩码加密,就是将原开锁密码K同一未知掩码M进行异或运算,再将运算得到的新开锁密码K′存储在密码存储模块中,如:

K⊕M = K′

K′⊕M = K⊕M⊕M = K

从上式中可以看出,由于掩码M未知,即使在密码读取的过程中K′被泄露,也无法得到原开锁密码K;解锁过程中只需要将K′再次与掩码进行M异或运算,就能得到原开锁密码K.然而上述掩码加密方法还存在一个不足,就是当掩码M取值数量较少的时候,加密效果将会受到很大的限制。如前所述,密码锁的密码为6位十六进制数。一般编码方式将这6位密码分别以4 b二进制数的形式进行编码,对应掩码M一共只有24种取值,被破解的风险就比较大;而掩码M一旦被破解,掩码加密对原密码K的保护作用也将不复存在。

为解决这一问题,本文在掩码加密之前对密码进行了冗余编码,即用16 b二进制数对原密码进行编码。这样一来,掩码M为一个16 b二进制数,具有216种取值,被破解的概率大大降低了。

如表1所示,一个未知十六进制数K,经过冗余编码和掩码加密处理,即使掩码加密后的密码泄露,但由于掩码未知且掩码数量巨大,原密码K的值也无法被破解。由此可见,采用冗余编码结合掩码加密的设计方法,密码锁的安全性可以得到极大的提高。

3.2设计实现

如前所述,图2中密码管理模块在正常解锁模式下,从密码存储模块中读取正确密码;在修改密码模式下,负责处理如图3(b)所示的修改流程,并将新密码写入密码存储模块。除此之外,密码锁的掩码加密也需要在密码管理模块中完成,其内部框图如图4所示。

输入控制模块提取按键信号并对其进行冗余编码。正常解锁模式下,逻辑控制模块控制读写控制模块读取密码存储模块中的正确密码,经过掩码解密后与输入控制模块生成的冗余码同时输入密码比较模块进行比较;修改密码模式下,逻辑控制模块按照图3(b)中的流程完成新密码的输入,并将掩码加密后的新密码写入到密码存储模块。



图4密码管理模块框图