基于跳碼技術的無線密碼鎖設計
0 引言
本文引用地址:http://m.butianyuan.cn/article/103966.htm無線電子鎖系統(tǒng)相比傳統(tǒng)機械鎖系統(tǒng)具有無接觸性、方便快捷、易于管理等優(yōu)點,伴隨著RF器件的價格逐步降低和各種數(shù)控系統(tǒng)的集成化要求,無線電子鎖在更多的領域得到了應用。早期的無線電子鎖系統(tǒng),鑰匙向鎖發(fā)送的或者是沒有加密的固定密碼,或者是經過PT2262,VD5026等編碼芯片編碼的密碼,但這些方式產生的密碼都是固定的內容,且長度較短(一般不超過16位),入侵者只要利用"拷貝重發(fā)"或者"掃描跟蹤"等方法就可輕而易舉地破解,因此這樣的方案都應用于對安全性要求不高的場合。
為滿足對更高安全性的要求,本文提出一種基于"跳碼"的無線鎖解決方案。所謂跳碼,是指鑰匙每次向鎖發(fā)送的密碼都是唯一而隨機的,入侵者無法預測,即使記錄了原來的開鎖密碼也不能用于下次開鎖,因此安全性極高。
1 跳碼的軟件實現(xiàn)
目前跳碼的實現(xiàn)多借助于專用的處理器硬件,如Microchip的HCSXXX系列,美國MACRSTAR公司的TR13XX,ACM公司的ACM1330E系列,這些產品都是專利產品,內部算法對外不公開。設計者要想使用這些產品,必須學習新的處理器,并且付出一定的專利費。這里提出一種跳碼的完全軟件實現(xiàn),使用合適的普通單片機就可運行這種跳碼軟件。
跳碼的實現(xiàn)核心是非線性加密算法,利用32位非線性反饋移位寄存器(NLFSR)和64位密鑰組成的加密單元,可實現(xiàn)對輸入32位二進制數(shù)據的加密,加密后的輸出是32位二進制隨機數(shù)。輸入有一位變化,加密后的輸出統(tǒng)計上將有一半以上的位發(fā)生變化,具有相當高的隨機性。圖1是跳碼加密和解密的示意圖:
注意,對于同一套加密系統(tǒng),加密單元和解密單元的64位密鑰是相同的,且是不公開的,這是典型的私鑰加密系統(tǒng)。
1.1 加密單元
依據上圖,加密時,將欲加密的32位二進制數(shù)據X存入32位移位寄存器(shift register,SR)中,選取32位SR的1、9、20、26、31位和固定32位二進制數(shù)據OX3A5C742E組成非線性函數(shù)(NLR)的輸入,NLR的輸出、SR的0、16位、以及64位密鑰移位寄存器(key FSR)移位后的0位,這些位數(shù)據異或(XOR)后產生的1bit數(shù)據作為32位SR的31位。循環(huán)此操作528輪后,32位SR 中的數(shù)據即為X經加密后的跳碼數(shù)據Y。這里給出用VC6.0對該加密算法的實現(xiàn):
1.2 解密單元
跳碼解密單元是加密單元的逆操作。依據圖3,解密時,將欲解密的32位二進制跳碼Y存入32位SR中,選取32位SR的0、8、19、25、30位和固定32位二進制數(shù)據OX3A5C742E組成非線性函數(shù)NLR的輸入,NLR的輸出、SR的15、31位、以及64位key FSR移位后的15位,這些位數(shù)據異或(XOR)后產生的1bit數(shù)據作為32位SR的0位。循環(huán)此操作528輪后,32位SR中的數(shù)據即為解密后的數(shù)據X。這里給出用VC6.0對該解密算法的實現(xiàn):
1.3 跳碼加解密算法在單片機中的實現(xiàn)
上述跳碼算法,即加密函數(shù)Encrypt()和解密函數(shù)Decrypt(),接收的參數(shù)為32位無符號整數(shù)和64位無符號整數(shù),返回的是32位無符號整數(shù)。單片機大多是8位機,其編譯開發(fā)環(huán)境所定義的同樣數(shù)據類型的長度與PC機有所不同,如unsigned int在PC上定義為32位無符號二進制數(shù),而在單片機上常定義為16位無符號二進制數(shù)。假設單片機的unsigned int和unsigned long分別表示16位無符號二進制數(shù)和32位無符號二進制數(shù),可將上述函數(shù)改為:
這里,用兩個32位無符號整數(shù)key_high和key_low分別表示64位無符號整數(shù)的高32位和低32位,程序的實現(xiàn)也要做相應的改變。
針對不同編譯器所定義的數(shù)據類型,可采用相似方法移植跳碼算法程序。
2 基于跳碼的無線鎖方案
這里選用Atmel公司的AVR單片機作為鎖和鑰匙的處理器,無線收發(fā)模塊采用普通的RF模塊即可。下面給出基于跳碼的無線鎖方案的硬件框圖:
圖4中,鑰匙和鎖進行單向通信,即按下鑰匙按鍵1時,鑰匙向鎖發(fā)送加密后的跳碼數(shù)據,鎖收到后解密,并判斷執(zhí)行。鑰匙是低功耗模塊,它大部分時間處于休眠狀態(tài),每當按鍵1按下時,鑰匙被喚醒,發(fā)送加密后形成的跳碼數(shù)據。鑰匙要便于攜帶,因此要求體積小,待機時間長,故這里選用Atmel公司的Atiny系列單片機,并由鈕扣電池供電。鎖對功耗和尺寸不敏感,故這里選用Atmega8L單片機,供電方式可以靈活一點。
2.1 鑰匙工作原理
通過對跳碼算法的介紹,可以知道對于給定的任意32位二進制數(shù),利用跳碼加密算法Encrypt ()加密后得到的跳碼是個固定的32位二進制數(shù),這樣不能應付"拷貝重發(fā)"的入侵手法。所以鑰匙每次加密的數(shù)據都應該是不同的,這可以在鑰匙內部維持一個計數(shù)器來實現(xiàn),每當鑰匙的按鍵被按下一次時,鑰匙內部的計數(shù)器就自動加1,并將新計數(shù)器值保存在內部EEPROM中,作為下次計數(shù)器增加的起點。同時,利用加密算法加密新計數(shù)器值,加密后生成的跳碼作為開鎖命令發(fā)送出去。這里,將該計數(shù)器定義為32位無符號二進制數(shù)。鑰匙發(fā)送的信息幀格式為:
其中,一個字節(jié)的前導符是固定的位序列0b01010101,它沒有加密,主要目的是防止非本產品系列的無關產品發(fā)送的無線數(shù)據的干擾,即接收端只認可第一字節(jié)為0b01010101的字節(jié)序列。32位跳碼部分是鑰匙加密計數(shù)器后的值,這是開鎖命令,具有極高的安全性。
2.2 鎖的工作原理
鎖平時處于監(jiān)聽狀態(tài),當接收了字節(jié)0b01010101時,鎖進入接收32位跳碼程序,否則重新進入監(jiān)聽狀態(tài)。當接收到32位跳碼數(shù)據后,鎖利用Decrypt()解密后得到發(fā)端送來的計數(shù)器值,發(fā)端如何依據此計數(shù)器值判斷是否開鎖呢?接收端也維持一個計數(shù)器CNT1,它保存的是上次成功開鎖的計數(shù)器值。參見圖5,每當接收端解密跳碼后,得到的是32位計數(shù)器值CNT2,接收端操作如下:
若CNT2CNT1,或CNT2=CNT1,可能是以前的數(shù)據被"拷貝重發(fā)",不動作。
若0CNT2-CNT1256,或CNT2=256,CNT2落在了當前同步窗口中,是合法的命令,則接收端動作(即開鎖),同時將此CNT2存入EEPROM中,作為新的同步起點。
若CNT2-CNT1256,不動作。
鎖和鑰匙在首次使用時,或者鑰匙的多次不合適操作導致鑰匙和鎖的計數(shù)器差值超過了同步窗口,這時就必須通過學習,讓鎖記住鑰匙的計數(shù)器值,實現(xiàn)同步。學習的操作是:按下鎖按鍵2,然后再按下鑰匙按鍵1(同時放開鎖按鍵2),這樣鎖就接收了鑰匙來的信息,解密后得到計數(shù)器值,然后存儲此計數(shù)器值。為保證安全,學習時必須保證鎖處于開啟狀態(tài),即說明發(fā)起學習者是鎖的合法擁有者。
2.3 方案的安全性分析
常見的攻擊無線遙控系統(tǒng)的方式有:a.拷貝重發(fā):即入侵者通過儀器記錄下本次通信的無線電信號,然后重發(fā)這些數(shù)據實施主動攻擊。因此采用固定的密碼,無法抵御這種攻擊。本方案在每次接收到合法的計數(shù)器CNT2后,將CNT2存入EEPROM,并作為下次匹配的起點,入侵者記錄的計數(shù)器值均小于或等于此值,只要設定只有CNT2CNT1時鎖才動作,就可有效抵御這類攻擊。b.掃描式攻擊:入侵者通過依次發(fā)送所有可能有效密碼實施攻擊。這里,我們設定了密碼長度為32位,有效窗口大小為2 5 6,入侵者通過掃描攻擊成功的概率為256/232=1/224,這是微乎其微的。
這里,將同步窗口大小定義為256,是為了保證一定的容錯。當使用者在不能與接收端有效通信時,按下鑰匙按鍵導致鑰匙單方面動作,從而使鑰匙和鎖的計數(shù)器差值增大。同步窗口大小要合適,太大會降低安全性,太小會因多次誤操作導致鎖和鑰匙不能再自動同步。
3 結束語
利用本文介紹的跳碼算法和設計的無線遙控解決方案,能設計出具有高度安全性的無線遙控系統(tǒng),可廣泛應用于對安全性要求較高的場合,如各種報警防盜系統(tǒng)、住宅、辦公樓、汽車及車庫門衛(wèi)管理系統(tǒng),因此具有一定的應用市場。
塵埃粒子計數(shù)器相關文章:塵埃粒子計數(shù)器原理
評論