一种基于KEELOQ的改进加密算法及其在单片机中的实现技术
(3)对功能码的检错和纠错的功能较弱。在无线传输中,出现误码的概率比较大。功能码代表所要实现的功能,如开门、报警、开阀等。如果发送的数据是0010,而接收的数据为0100,其后果非常严重。
(4)传输效率较低。在发送的数据中,其有用信息(如序列号、功能码)全部在固定码中,加密码只作为一种加密用的附加数据,这样不但降低了安全性,而且传输效率不高。以HCS300为例,发送的66位数据中只有32位为有用信息,传输效率比较低。
javascript:window.open(this.src);" style="cursor:pointer;"/>
(5)无法用于数据加密。由于其是由硬件芯片实现的,它所能加密的数据只限于序列号、同步码等预先存在HCS300的EEPROM中的数据。它没有数据入口,无法对数据流进行加密。
(6)受硬件设计限制,灵活性差,成本较高,由于不拥有核心技术,容易受制于人。
基于上述分析,笔者结合单片机的特性,对KEELOQ算法提出如下改进:
(1)保留出厂密钥,但引入随机数,防止出厂密钥和种码的泄漏,用户可随时改变加密密钥。
(2)改进数据传输的格式,把同步码映射到各组待加密的数据中,提高传输效率。
(3)增加对功能码或关键数据的检错和纠错的功能。
(4)增加数据入口,改变对加密数据的长度要求,使其适合批量的数据加密。
数据加密系统的两个基本要素是加密算法和密钥管理。密钥是控制加密算法和解密算法的关键信息,其产生、传输、存储等工作十分重要。目前数据加密技术可以分为二类,即对称型加密、不对称型加密。对称型加密(如DES算法)使用单个密钥对数据进行加密或解密。不对称型加密算法也称公用密钥算法(如RSA算法),其特点是有二个密钥(即公用密钥和私有密钥),只有二者搭配使用才能完成加密和解密的全过程。便两者都在密钥的管理和分发上遇到一些困难。KEELOQ密钥管理机制的订特别是对每个用户都有自己独特的加解密密钥,在学习过程中发送到主机并保存。但密钥信息隐含在每次发送的信息(SN和MKEY)中(即使在安全模式下,种子码SEED也是固定码,可截获),并且依赖于生产厂家和出厂密钥,不可更改。本改进算法主要针对无线传输领域的小型系统,可以在学习过程中引入随机参数RANDOM,与MKEY、SN一起生成EN_KEY。这个随机数据RANDOM在同一次学习时相同,但每次学习时都会改变。这样,加密密钥就不依赖于生产厂家和出厂密钥并且在用户感到密钥有可能泄漏时不随时改变数据,增加了安全性。
3 改进加密算法在单片机中的实现
整个系统分为用户端(CLIENT)和主机端(SERVER),系统框图如图1所示。在本系统中,考虑功耗、外围功能等需要,选用飞利浦的LPC76X系列芯片。P87LPC764是20脚封装的单片机,可以在宽范围的性能要求下实现高集成度低成本的解决方案,4Kbits的ROM,32Byte用户代码区可用来存放序列码及设置参数,内带看门狗定时器,处理器的指令执行速度为标准80C51 MCU的两倍。EEPROM发送部分选用AT2401(128×8 bits),接收部分选用AT2404(1024×8bits),8-DIP封装,I2C总线接口,擦写次数>1百万次,保存时间>100年。
用户必须经过学习后才能与主机通信。在学习过程中,用户把序旬号SN、出厂密钥MKEY、加密密钥EN_KEY送给主机,主机对每一个用户要开辟一片EEPROM来存储用户信息。
在主机SERVER端,每个用户CLIENT都需要有16bits的存储空间。所以本系统共可接收511个用户的信息。整个系统的设计充分考虑系统的升级和功能的扩展。其中出厂密钥、序列号、加密密钥、随机数均可按需要进行扩展或缩减。如果从安全角度考虑,可把序列号存放在微处理器的ROM中。
3.1 学习过程
所谓学习,就是使用户在主机端中注册登记的过程。引进随机数RANDOM,对每一次学习来说,它所产生的随机的数是不一样的,它所发送的数据也是变化的、不可预知,提高了安全性。另外,RANDOM和序列号SN、出厂密钥MKEY一起生成加解密密钥EN_KEY,用户可以随时对加密密钥EN_KEY进行修改,这样也提高了安全性。
进入学习模式后,用户端经三次数据发送完成整个学习。过程如下:
(1)用户端产生随机数RANDOM,与MKEY、SN经加密后发送。主机接收到数据解密后,比对MKEY和SN,确认用户是本系统用户(比对MKEY)并且是一个新用户(SN不在EEPROM)时,开辟空间,保存SN和RANDOM。
(2)用户端和主机端分别利用密钥生成算法生成,由MKEY+SN+RANDOM生成EN_KEY,并存入相应的 存储的空间。
(3)用户端利用EN_KEY对SN、RANDOM、SYNC、MKEY进行KEELOQ加密并发送。主机接收到数据后,比对MKEY、RANDOM、SN正确后把SYNC存入相应空间,请求第二次发送(只双向通信中才有请求功能)。
(4)用户端收到发送请求后(如果是单向通信,则等待后直接发送)再对SN、RANDOM、SYNC、MKEY加密后发送。因为SYNC是每次改变的,所以这次数据位和上一次发送的数据位改变在50%以上。
(5)主机在接收到数据解密后,比对同步码SYNC,如果用户和主机的同步码变化规律相同则学习成功。
三次发送即完成一次学习过程。第二次学习时随机数重新产生,所以要求学习时三次数据发送是连续的,否则无效。以上各步中有任何一次数据比对挫败则学习失败。主机端在前二次接收到数据后等待24s仍未见用户发送数据则学习失败。学习挫败后用户重新学习。
随机数利利用单片机的计数器产生,有两种方法供选用:javascript:window.open(this.src);" style="cursor:pointer;"/>
(1)单次操作完毕后,单片机的计数器一直不停地计数,在外界对它进行再次操作或者要发送数据时停止计数。因为外界的操作或发送的时间是不定的,所以计数寄存器里面的数是随机的。
(2)可以对按键或操作时间进行计时。用户每次按键或操作的时间都是不定的,并且按键从抖动到稳定的时间也是不定的,对它进行计时,如果把间隔的时间取得合适,即可得到近似随机数。
3.2 发送过程
在数据发送前,必须先对数据进行加密。数据加密的过程如下:
(1)重新定制非线性表。原算法是用64位密钥去加密32位的明码数据,现在把它改为64位密钥去加密64位的明码数据,密文长度也为64位,可按原规律扩展非线性即可。
(2)对数据进行分组。尽管应用场合针对小型系统(数据传输量较小),但还是必须对所要加密的数据进行分组。在使用分组时,对明文尾部不满一个整组的碎片采用填充随机数的办法将其扩充为一个整组,然后进行正常加密。即数据分组长度、密钥长度和输出密文长度均为64位。
(3)把同步码的变化反映到各组数据中。同步码每次发送时均会改变,它是保证系统每次发送的密文都不一样的根本。只需进行分配、叠代、移位、异或等简单的变换即可完成反映的任务。
(4)封装算法。算法经封装后可方便地被各种程序调用。算法的入口参数有三个:EN_KEY、Data、Mode。其中,EN_KEY为64位的加密密钥;Data为64位被加密或被解密的数据;Mode为工作方式,有加密或解密两种。
HCS300芯片发送的数据主要由固定码和加密码组成。固定码34bit,加密码32bit。固定码主要由28位序列号、4位功能码(按键信息)和2位标志组成。加密码则由16位同步码、28位序列号(可扩展)、4位功能码组成。经改进后可用于数据加密的格式如图2所示。
在发送时还要加入检错和纠错功能。检错视系统的要求可选奇偶校验、CRC校验等。纠象牙可以用汉明码。该码的实现原理是在数据中加入几个校验位,并把数据的每个二进制位分配在几个奇偶校验组中;当某位出错后,就会引起有关的几个校验组的值发生变化。这不但可以发现错误,还能指出哪一位,为自动纠错提供了依据。
3.3 接收过程
改进算法的解密密钥由学习时接收并存储在EEPROM中。其加密和解密的密钥是一样的,解密是加密的逆过程。接收过程主要包括序列号搜索、比对、解密、同步码的比对等过程。接收方的程序流程如图3所示。
本文提出的基于KEELOQ技术的改进加密算法及其在单片机中的实现技术,可以节约硬件成本,减少对硬件硬件的依赖,改善系统性能,扩展了在数据加密领域的应用,特别适合应用于无线传输领域的小型系统的数据加密。随着射频技术、无线技术和蓝牙技术的发展,射频卡身份证的实施,其应用领域可以扩展到身份识别、安全管理、防盗报警、考勤、收费、无线抄表、智能监控、随机检测器、标识信息等诸多领域。