2 基于跳码的无线锁方案
这里选用Atmel公司的AVR单片机作为锁和钥匙的处理器,无线收发模块采用普通的RF模块即可。下面给出基于跳码的无线锁方案的硬件框图:
图4中,钥匙和锁进行单向通信,即按下钥匙按键1时,钥匙向锁发送加密后的跳码数据,锁收到后解密,并判断执行。钥匙是低功耗模块,它大部分时间处于休眠状态,每当按键1按下时,钥匙被唤醒,发送加密后形成的跳码数据。钥匙要便于携带,因此要求体积小,待机时间长,故这里选用Atmel公司的Atiny系列单片机,并由钮扣电池供电。锁对功耗和尺寸不敏感,故这里选用Atmega8L单片机,供电方式可以灵活一点。
2.1 钥匙工作原理
通过对跳码算法的介绍,可以知道对于给定的任意32位二进制数,利用跳码加密算法Encrypt ()加密后得到的跳码是个固定的32位二进制数,这样不能应付"拷贝重发"的入侵手法。所以钥匙每次加密的数据都应该是不同的,这可以在钥匙内部维持一个计数器来实现,每当钥匙的按键被按下一次时,钥匙内部的计数器就自动加1,并将新计数器值保存在内部EEPROM中,作为下次计数器增加的起点。同时,利用加密算法加密新计数器值,加密后生成的跳码作为开锁命令发送出去。这里,将该计数器定义为32位无符号二进制数。钥匙发送的信息帧格式为:
其中,一个字节的前导符是固定的位序列0b01010101,它没有加密,主要目的是防止非本产品系列的无关产品发送的无线数据的干扰,即接收端只认可第一字节为0b01010101的字节序列。32位跳码部分是钥匙加密计数器后的值,这是开锁命令,具有极高的安全性。
2.2 锁的工作原理
锁平时处于监听状态,当接收了字节0b01010101时,锁进入接收32位跳码程序,否则重新进入监听状态。当接收到32位跳码数据后,锁利用Decrypt()解密后得到发端送来的计数器值,发端如何依据此计数器值判断是否开锁呢?接收端也维持一个计数器CNT1,它保存的是上次成功开锁的计数器值。参见图5,每当接收端解密跳码后,得到的是32位计数器值CNT2,接收端操作如下:
若CNT2<CNT1,或CNT2=CNT1,可能是以前的数据被"拷贝重发",不动作。
若0<CNT2-CNT1<256,或CNT2=256,CNT2落在了当前同步窗口中,是合法的命令,则接收端动作(即开锁),同时将此CNT2存入EEPROM中,作为新的同步起点。
若CNT2-CNT1>256,不动作。
锁和钥匙在首次使用时,或者钥匙的多次不合适操作导致钥匙和锁的计数器差值超过了同步窗口,这时就必须通过学习,让锁记住钥匙的计数器值,实现同步。学习的操作是:按下锁按键2,然后再按下钥匙按键1(同时放开锁按键2),这样锁就接收了钥匙来的信息,解密后得到计数器值,然后存储此计数器值。为保证安全,学习时必须保证锁处于开启状态,即说明发起学习者是锁的合法拥有者。
2.3 方案的安全性分析
常见的攻击无线遥控系统的方式有:a.拷贝重发:即入侵者通过仪器记录下本次通信的无线电信号,然后重发这些数据实施主动攻击。因此采用固定的密码,无法抵御这种攻击。本方案在每次接收到合法的计数器CNT2后,将CNT2存入EEPROM,并作为下次匹配的起点,入侵者记录的计数器值均小于或等于此值,只要设定只有CNT2>CNT1时锁才动作,就可有效抵御这类攻击。b.扫描式攻击:入侵者通过依次发送所有可能有效密码实施攻击。这里,我们设定了密码长度为32位,有效窗口大小为2 5 6,入侵者通过扫描攻击成功的概率为256/232=1/224,这是微乎其微的。
这里,将同步窗口大小定义为256,是为了保证一定的容错。当使用者在不能与接收端有效通信时,按下钥匙按键导致钥匙单方面动作,从而使钥匙和锁的计数器差值增大。同步窗口大小要合适,太大会降低安全性,太小会因多次误操作导致锁和钥匙不能再自动同步。
3 结束语
利用本文介绍的跳码算法和设计的无线遥控解决方案,能设计出具有高度安全性的无线遥控系统,可广泛应用于对安全性要求较高的场合,如各种报警防盗系统、住宅、办公楼、汽车及车库门卫管理系统,因此具有一定的应用市场。