- 相關(guān)推薦
一種基于KEELOQ的改進(jìn)加密算法及其在單片機(jī)中的實(shí)現(xiàn)技術(shù)
摘要:討論了Microchip公司的KEELOQ加解密算法的實(shí)現(xiàn)機(jī)制,通過(guò)引入隨隨機(jī)數(shù),提出了一種新的改進(jìn)算法,并給出了其在單片機(jī)中的實(shí)現(xiàn)方案。該算法具有簡(jiǎn)單實(shí)用、所需硬件資源少、傳輸效率和安全性相對(duì)較高等優(yōu)點(diǎn),適用于需要數(shù)據(jù)加密的小型無(wú)線數(shù)據(jù)傳輸系統(tǒng),具有廣闊的應(yīng)用前景。當(dāng)今的編解碼電路已經(jīng)朝著高度集成化和微電腦化發(fā)展。像普通的固定編解碼芯片和MC145026/145027、PT2262/2272等已被廣泛應(yīng)用于公用系統(tǒng)中,給生活帶來(lái)了方便。然而這些芯片不能保證系統(tǒng)的安全性。由于這些系統(tǒng)每次發(fā)送的數(shù)據(jù)流一模一樣,只是高低電平的組合,第三方面通過(guò)捕捉設(shè)備,一旦用戶(hù)信號(hào)出現(xiàn),便可瞬間取得合法的身份識(shí)別碼;或使用編碼掃描設(shè)備,主動(dòng)攻擊解碼芯片。因此保證系統(tǒng)的安全性是一個(gè)很現(xiàn)實(shí)的問(wèn)題。在此背景下,基于加密算法的編解碼IC的安全機(jī)制得到了應(yīng)用。Microchip公司的KEELOQ技術(shù)是這種技術(shù)的代表。KEELOQ技術(shù)是一種多變化、抗截獲得、安全可靠性高的非線性跳碼加密解密技術(shù)。KEELOQ目前是通過(guò)硬件芯片IC(以Mirochip公司的HCS300為代表)實(shí)現(xiàn),主要應(yīng)用于汽車(chē)陣盜系統(tǒng)和門(mén)禁系統(tǒng),是無(wú)鑰進(jìn)入系統(tǒng)領(lǐng)域的首選芯片。但也由于硬件芯片本身的限制(其所能加密的數(shù)據(jù)必須預(yù)先寫(xiě)入EEPROM中),使之很難用于其它(如數(shù)據(jù)加密)領(lǐng)域。
本文把這項(xiàng)封裝在芯片里的KEELOQ加密技術(shù)用軟件方式實(shí)現(xiàn),并針對(duì)單片機(jī)的特性進(jìn)行了適當(dāng)改進(jìn)。這種在單片機(jī)中實(shí)現(xiàn)的改進(jìn)算法不僅包含了原來(lái)HCS300所具備的所有功能,而且在系統(tǒng)安全性、靈活性、可擴(kuò)展性、傳輸效率等方面均有較大改善,同時(shí)對(duì)改進(jìn)算法在數(shù)據(jù)加密領(lǐng)域作為全新的嘗試,以其特殊的密鑰管理方法獨(dú)立于對(duì)稱(chēng)型加密(如DES)與不對(duì)稱(chēng)型加密算法(即公開(kāi)密鑰體制,如RSA),成為一種適用于無(wú)線傳輸領(lǐng)域小型系統(tǒng)的數(shù)據(jù)加密算法。
1 KEELOQ技術(shù)簡(jiǎn)介及其硬件實(shí)現(xiàn)
KEELOQ技術(shù)的核心思想是用64bit的EN_KEY[64:0](加密密鑰)去加密32bit的CSR[31:0](校驗(yàn)碼)得到32bit的CRYP密文。加密機(jī)制為:首先定義一個(gè)非線性表,這個(gè)非線性表有5位輸入NLF_IN[4:0],一位輸出NLF_OUT。它在CSR[31:0]中間隔均勻地取固定5位:I0、I1、I2、I3、I4,通過(guò)非線性產(chǎn)生一個(gè)輸出碼NLF_OUT;這一位輸出碼NLF_OUT再與EN_KEY中的15位、CSR中的2位進(jìn)行異或運(yùn)算后輸出第一位輸出碼CRYP[0];每輸出一位后,EN_KEY、CSR分別進(jìn)行移位,EN_KEY作循環(huán)移位,CRYP[0]作為CSR移位的輸入;重復(fù)上述步驟直到輸出32位CRYP[0:31]。依此法,即使32bit的校驗(yàn)碼CSR中只有一位發(fā)生變化,用KEELOQ加密算法得到的CRYP密文也會(huì)有50%以上的數(shù)據(jù)位(16bit)發(fā)生變化。
Microchip公司以KEELOQ技術(shù)為基礎(chǔ)開(kāi)發(fā)了滾動(dòng)碼系統(tǒng)專(zhuān)用芯片,HCS300是其中較典型的一款。它是一塊8引腳的編碼IC芯片,里面集成了KEELOQ算法和其他一些功能,帶有四個(gè)按鍵接口,實(shí)現(xiàn)15位的功能/命令碼。內(nèi)置192bits(12×16bit words)EEPROM,用來(lái)存放EN_KEY(加密密鑰)、SN(序列號(hào))、SYNC(同步碼)、SEED(種子碼)等。序列號(hào)用來(lái)標(biāo)識(shí)不同的對(duì)象;加密密鑰用來(lái)對(duì)發(fā)送的數(shù)據(jù)進(jìn)行加密,增加破譯的難度,它不直接發(fā)送出去;同步計(jì)數(shù)器用來(lái)抗截獲,每次發(fā)送數(shù)據(jù)時(shí),同步計(jì)數(shù)器的值都被更新,所以每次發(fā)送的數(shù)據(jù)都不一樣。種子碼用于安全學(xué)習(xí)時(shí)參與加密密鑰的生成。接收方必須先通過(guò)學(xué)習(xí)來(lái)獲得并存儲(chǔ)發(fā)送方的序列號(hào)、加解密密鑰和當(dāng)前同步計(jì)數(shù)器的值。學(xué)習(xí)相當(dāng)于身份確認(rèn),只有經(jīng)過(guò)學(xué)習(xí)的用戶(hù)才能與主機(jī)通信。主機(jī)在接收到信號(hào)后,首先比對(duì)序列號(hào),然后利用學(xué)習(xí)過(guò)程中得到并存儲(chǔ)的加密密鑰對(duì)接收的數(shù)據(jù)進(jìn)行解密;接著檢查同步計(jì)數(shù)器是否匹配,在確認(rèn)其匹配后,再去處理接收到的按鍵信令,并根據(jù)接收到的按鍵信令作出相應(yīng)的動(dòng)作反應(yīng)。HCS300的系統(tǒng)使每次發(fā)送的密文都不相同,有效防止了空中截獲法和數(shù)據(jù)重傳帶來(lái)的安全隱患。
HCS300系統(tǒng)的加密密鑰在學(xué)習(xí)過(guò)程中經(jīng)密鑰生成算法產(chǎn)生。學(xué)習(xí)分為一般學(xué)習(xí)和安全學(xué)習(xí)。一般模式下,解密解鑰由MKEY和SN生成加解密密鑰EN_KEY,其解密密鑰隱含于發(fā)送信息(MKEY和SN)中。安全模式下,增加了種子碼SEED(當(dāng)四鍵一起按時(shí)發(fā)送),它與MKEY和SN一起生成加解密密鑰EN_KEY,而SEED_KEY在平時(shí)并不發(fā)送,這樣增加了安全性。不過(guò),在學(xué)習(xí)時(shí)SEED碼的發(fā)送是不經(jīng)過(guò)加密的。
2 KEELOQ技術(shù)的不足與改進(jìn)加密算法的提出
盡管KEELOQ技術(shù)有上述獨(dú)特的優(yōu)點(diǎn),但是經(jīng)過(guò)深入分析不難發(fā)現(xiàn)KEELOQ算法及其硬件實(shí)現(xiàn)技術(shù)也存在一些不足:
(1)安全性基于出廠密鑰和種碼SEED。在HCS300芯片中,加密密鑰EN_KEY是由出廠密鑰MKEY、序列號(hào)SN和種子碼SEED(安全模式)生成的。而SN和SEED在發(fā)送數(shù)據(jù)的過(guò)程中未經(jīng)加密,是可截獲的。理論上出廠密鑰一經(jīng)確定一般不會(huì)更改。所以,一旦出廠密鑰外泄,后果極其嚴(yán)重。
(2)擴(kuò)展功能弱、升級(jí)不方便。其算法由硬件芯片實(shí)現(xiàn)。其所能實(shí)現(xiàn)的功能由按鍵決定。其按鍵只有4個(gè),最多也只有15種組合。發(fā)送方無(wú)法附加其余的信息(對(duì)于大多領(lǐng)域來(lái)說(shuō),它要求能發(fā)送一些附加信息,如用戶(hù)的姓名、年齡、出生日期等),功能擴(kuò)展幾乎不可能。另外,某一特定型號(hào)的芯片其序列號(hào)和同步計(jì)數(shù)器的長(zhǎng)度是固定的。當(dāng)系統(tǒng)建成后,開(kāi)發(fā)者如果想只通過(guò)軟件升級(jí)來(lái)擴(kuò)充系統(tǒng)的容量或提高系統(tǒng)的性能、用硬件實(shí)現(xiàn)技術(shù)基本不可能。
(3)對(duì)功能碼的檢錯(cuò)和糾錯(cuò)的功能較弱。在無(wú)線傳輸中,出現(xiàn)誤碼的概率比較大。功能碼代表所要實(shí)現(xiàn)的功能,如開(kāi)門(mén)、報(bào)警、開(kāi)閥等。如果發(fā)送的數(shù)據(jù)是0010,而接收的數(shù)據(jù)為0100,其后果非常嚴(yán)重。
(4)傳輸效率較低。在發(fā)送的數(shù)據(jù)中,其有用信息(如序列號(hào)、功能碼)全部在固定碼中,加密碼只作為一種加密用的附加數(shù)據(jù),這樣不但降低了安全性,而且傳輸效率不高。以HCS300為例,發(fā)送的66位數(shù)據(jù)中只有32位為有用信息,傳輸效率比較低。