一种基于KEELOQ的改进加密算法及其在单片机中的实现技术
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仍未见用户发送数据则学习失败。学习挫败后用户重新学习。
随机数利利用单片机的计数器产生,有两种方法供选用:
(1)单次操作完毕后,单片机的计数器一直不停地计数,在外界对它进行再次操作或者要发送数据时停止计数。因为外界的操作或发送的时间是不定的,所以计数寄存器里面的数是随机的。
(2)可以对按键或操作时间进行计时。用户每次按键或操作的时间都是不定的,并且按键从抖动到稳定的时间也是不定的,对它进行计时,如果把间隔的时间取得合适,即可得到近似随机数。
3.2 发送过程
在数据发送前,必须先对数据进行加密。数据加密的过程如下:
(1)重新定制非线性表。原算法是用64位密钥去加密32位的明码数据,现在把它改为64位密钥去加密64位的明码数据,密文长度也为64位,可按原规律扩展非线性即可。
(2)对数据进行分组。尽管应用场合针对小型系统(数据传输量较小),但还是必须对所要加密的数据进行分组。在使用分组时,对明文尾部不满一个整组的碎片采用填充随机数的办法将其扩充为一个整组,然后进行正常加密。即数据分组长度、密钥长度和输出密文长度均为64位。
(3)把同步码的变化反映到各组数据中。同步码每次发送时均会改变,它是保证系统每次发送的密文都不一样的根本。只需进行分配、叠代、移位、异或等简单的变换即可完成反映的任务。
(4)封装算法。算法经封装后可方便地被各种程序调用。算法的入口参数有三个:EN_KEY、Data、Mode。其中,EN_KEY为64位的加密密钥;Data为64位被加密或被解密的数据;Mode为工作方式,有加密或解密两种。
《一种基于KEELOQ的改进加密算法及其在单片机中的实现技术(第3页)》