本文以自己的菜車為例分析了其無線鑰匙的安全性疼蛾。包括編碼方式罗洗,滾動碼窗口愉舔,芯片等。本想通過解碼大量數(shù)據(jù)伙菜,破解其加密算法的轩缤,但發(fā)覺并沒有那么容易。
信號分析
車鑰匙發(fā)出的是433MHz的無線電信號仇让,ASK調幅模式典奉。首先用ASK接收模塊解調(詳見前文),并用邏輯分析儀觀察其波形丧叽。
下圖中:
- Overview 里有兩個完整的鑰匙信號(以3個較長的低電平分隔)卫玖;
- 第一次Zoom in顯示了一個完整的信號;
- 第二次Zoom in只顯示了前導(Leading)和開始(Start)部分的波形踊淳。
圖中只是嘗試用 PWM 解碼(因為 PWM 在無線電遙控中用得比較多)假瞬,但實際上并不一定是 PWM。
和其它無線電遙控類似迂尝,一次按鍵會發(fā)送多個重復的信號脱茉,它們的數(shù)據(jù)是相同的,以確保接收端會收到垄开。
不過這個車鑰匙的第一個信號的前導波形會更長一些琴许,可能是要確保接收端被喚醒。
下圖是連續(xù)兩次按鍵的信號溉躲“裉铮可以看出:
- 前導部分波形一樣;
- 第一個紅圈里的波形一樣锻梳;
- 兩個紅圈之間的波形完全不一樣箭券;
- 第二個紅圈里的波形相反。
至此疑枯,基本可以確定不是固定碼辩块。如果是固定碼,打開車門就太容易了荆永。
差分曼徹斯特編碼
下圖是常用的單線編碼(圖片來自WiKi)
Biphase系列就是通常說的曼徹斯特編碼废亭,其中Biphase-S和差分曼徹斯特只是平移半個周期(并反向)的關系,所以可認為是一回事具钥。而Biphase-M和Biphase-S是按位取反關系(即0和1的對應關系反過來)豆村,所以也可以認為是等價的。下面以“差分曼徹斯特編碼”來統(tǒng)稱氓拼。
觀察我的車鑰匙的波形,可以和差分曼徹斯特編碼對應起來。主要表現(xiàn)在:
- 波形數(shù)據(jù)中只有兩種寬度的電平桃漾,并且是兩倍關系坏匪;
- 窄的電平是成對出現(xiàn)的。(其實這種編碼簡單地說就是:兩個窄電平表示0撬统,一個寬電平表示1)
差分曼徹斯特編碼還有一個特性是:波形反相适滓,表示的數(shù)據(jù)相同。這說明上圖中第二個紅圈中的波形其實是表示相同的數(shù)據(jù)恋追。這也比較合符邏輯凭迹。
綜上,我們可認為其編碼方式是差分曼徹斯特編碼苦囱。
順便說一下嗅绸,曼徹斯特編碼也是很常用的,比如以太網(wǎng)中就是撕彤。另外鱼鸠,后續(xù)的收發(fā)測試表明,這種編碼比PWM的抗干擾能力要強羹铅。
解碼的數(shù)據(jù)
下面是按同一把車鑰匙的同一個鍵依次得到的實際數(shù)據(jù):
0x7283df 664fac42ae d22d
0x7283df 0d2ea18d3e d22d
0x7283df 1f78611523 d22d
0x7283df c37b06f96b d22d
0x7283df fa0eff1919 d22d
0x7283df 6bec6e956e d22d
0x7283df 2a83ccbc78 d22d
可以看到蚀狰,總共80 bit,只有中間40 bit的數(shù)據(jù)在變职员。通過按不同的鍵麻蹋,以及換另一把鑰匙試驗,可以得出:
- 前24 bit (0x7283df) 中包含鑰匙相關的信息焊切;
- 后16 bit (0xd22d) 是操作碼扮授,即開門、關門蛛蒙,開后備箱等糙箍。
- 中間的40 bit就是傳說中的滾動碼了。肉眼看牵祟,毫無規(guī)律深夯。
實驗1:簡單重放
- 錄下(解碼)鑰匙信號;
- 再(編碼)發(fā)送出去诺苹。
結果:顯然是開不了車門的咕晋。滾動碼的特征是用過就作廢。
實驗2:截獲重放
- 把鑰匙和車分隔(確保車收不到鑰匙信號)收奔;
- 錄下(解碼)鑰匙信號掌呜;
- 再(編碼)發(fā)送給車。
結果:可以開門坪哄。由于車沒有收到原始的鑰匙信號质蕉,截獲的信號是有效的势篡。
這個實驗看似簡單,其實也說明了不少問題:
- 鑰匙和車之間的通訊是單向的模暗,不存在動態(tài)認證的過程禁悠;
- 信號是時間無關的(即不會隨時間過期),只與順序相關兑宇。
而且這個實驗是盜車手段的原型碍侦。即盜賊通過干擾器阻止汽車接受鑰匙信號,自己把鑰匙信號保存下來隶糕,然后用來開門瓷产。
實驗3:操作碼替換
- 把鑰匙和車分隔(確保車收不到鑰匙信號);
- 錄下(解碼)關門時的鑰匙信號枚驻;
- 把關門的操作碼替換為開門的濒旦;
- 再(編碼)發(fā)送給車。
結果:可以開門测秸。這說明同一把鑰匙疤估,不同的操作是共用一個滾動碼序列的。
另外霎冯,因為組裝數(shù)據(jù)重新編碼后汽車接收端能接受铃拇,這也進一步確認了差分曼徹斯特的編碼方式。
實驗4:滾動碼窗口測試
有文章說某種偽隨機數(shù)的滾動碼的窗口是256沈撞。超過這個窗口慷荔,會導致開不了門,或需要復位缠俺。我們可以測試一下显晶。
- 把鑰匙和車分隔(確保車收不到鑰匙信號);
- 連續(xù)按開門鍵360次(遠遠超過了256)壹士;
- 再把鑰匙拿到車附近磷雇,按開門鍵。
結果:可以開門躏救。這說明唯笙,我的車的滾動窗口是大于256的,或者根本沒有“窗口”盒使。至于到底是怎樣崩掘,就不得而知了。
注意:這個實驗有一定的危險性少办,因為萬一有256的窗口限制苞慢,會有可能導致開不了門。但我在實驗的時候英妓,錄下了這360次的鑰匙信號挽放,萬一開不了绍赛,可以用這些錄下來的信號去開門。但如果不能錄下信號辑畦,就不要隨便做這個實驗了惹资。
芯片分析
為了找到加密算法的線索,我拆開了車鑰匙航闺。其主芯片是 NXP 61X0915,應該是一款汽車鑰匙專用的單片機猴誊。但網(wǎng)上找不到Datasheet潦刃。
問了一些朋友,說這個資料就是不公開的懈叹。也許是出于安全考慮吧乖杠。
參考
下面主要是一些加密算法相關的鏈接。有一些算法是已被破解了的澄成。但對于普通人胧洒,尤其是在沒有額外信息的前提下,破解并不是那么容易的墨状∥缆總之,沒在自己的菜車上驗證通過肾砂,就不多說了列赎。
- Corroding immobilizer cryptography 這篇文章里有各種加密算法的市場份額。
- Lock It and Still Lose It—On the (In)Security
of Automotive Remote Keyless Entry Systems - Gone in 360 Seconds: Hijacking with Hitag2
- RFID Devices and Cryptography: Analysis of the DST40
- How Remote Entry Works 對于偽隨機數(shù)的滾碼镐确,超過256次包吝,會導致汽車鑰匙打不開
- Microchip HCS301: KeeLoq code hopping Encoder 有比較詳細的時序,但這個是PWM的編碼的源葫。
結語
本文對車鑰匙的無線電信號進行了解碼和編碼的一些測試诗越。確定是差分曼徹斯特編碼。通過模擬攔截無線電信號息堂,可以打開車門嚷狞,證明鑰匙和車之間是沒有時間信息的單向通訊。這種方式也是中級盜車賊的簡易手段储矩。即使只攔截或竊取了關門信號感耙,也有可能用于開門(至少對于我的車是可以的)。所以持隧,只要“偷走”車鑰匙的一個無線按鍵信號即硼,就有可能把車門打開。
另外屡拨,我的車并沒有傳說中的256的滾動碼窗口只酥。從芯片上也得不到加密算法的線索褥实。安全級別也算高了一點。
對于加密碼算法的直接破解裂允,并不是那么容易损离。有些破解可能是基于一些額外的信息,比如泄密的密鑰(或者密鑰發(fā)行體系的隱患绝编,比如一個廠家多款車共用一個根密鑰僻澎,容易導致泄密)。