滾動程式碼如何工作?
我對滾動程式碼有一般性問題。基本上有一個發送者和一個接收者。兩者都有一個序列發生器。接收器檢查接收到的序列是否與新生成的序列匹配。使用的一個例子是 KeeLoq。
假設汽車開啟者(發送者)和汽車(接收者):
- 如果發送者在序列中的另一個點會發生什麼?想一想,當超出汽車的範圍時按下了鍵。
- 他們如何同步序列的點?
- 是否有任何預防措施來檢測重放攻擊?它們是如何實施的?
如果發送者在序列中的另一個點會發生什麼?… 在超出汽車范圍時按下了該鍵。
在滾動程式碼(程式碼跳躍)系統中,鑰匙扣發射器保持同步計數器 C,每次按下按鈕時遞增。汽車接收器儲存它接收到的最近驗證的同步計數器 N。
當滾動程式碼接收器收到一條帶有似乎與其內部儲存器中的授權密鑰卡之一匹配的密鑰卡序列號的消息時,它會從消息中提取密鑰卡的同步號 C,並將其與最近驗證的同步號 N 進行比較。
在正常情況下:
- C 在接受的滾動視窗中——C 大於但在最後驗證傳輸的“幾個”程式碼 K 之內(0 < CN < K+1)。
當消息中的計數器 C 在接受視窗中時,汽車將該消息作為真實消息接受,汽車用最新的值 C 覆蓋 N,汽車解鎖車門或執行消息要求執行的任何其他操作.
(只要您按住按鈕,鑰匙扣就會以每秒多次的頻率逐位重複發送相同的消息。直到您鬆開按鈕並再次按下它,它才會發送一個具有下一個連續計數器編號的消息)。
那麼發件人有可能會超出 k 個接受程式碼的範圍嗎?
是的。AVR411 接收器預設設置為 WINDOW_SIZE = 100。因此,對於典型的 AVR411 系統,如果汽車沒有聽到連續 100 次按鈕按下,那麼當汽車最終回到範圍內時,它將忽略鑰匙扣。
使用典型的 KeeLoq 系統,如果汽車沒有聽到連續 16 次按鍵,那麼當它最終回到範圍內時,汽車將不會在第一次按鍵時解鎖車門。但是,如果汽車隨後在重新同步視窗 (K < CN < Resynchonization_Window ) 內聽到 2 次連續按鈕按下,通常超過一千次按鈕按下,汽車將重新同步並解鎖車門。使用典型的 HCS301 系統,如果汽車沒有聽到幾千次連續的按鈕按下,那麼當汽車最終回到範圍內時,它將忽略遙控鑰匙。
他們如何同步序列的點?…它們是如何實施的?
在使用鑰匙扣之前,汽車必須“學習”鑰匙扣。通常按住“學習按鈕”(“學習開關”)10 秒會清除接收器對每個密鑰卡的記憶;然後鬆開該按鈕會使接收器進入“學習模式”。通常,同時按下鑰匙扣上的鎖定和解鎖按鈕會使鑰匙扣將其唯一的密鑰傳輸到接收器。接收器——在學習模式——將它聽到的密鑰卡序列號記憶為授權的密鑰卡,並記住密鑰和目前的同步計數器 N。在連續 10 秒沒有任何按鈕按下的情況下,一切都安靜下來後,接收器超時學習模式並進入正常模式。
之後,該接收器——在正常模式下——現在與鑰匙扣同步。
鑰匙扣可用的電池電量微乎其微,而且鑰匙扣只發送 - 從不接收 - 使得使用許多加密算法變得困難或不可能。
有關兩種流行的滾動程式碼實現的詳細資訊,請參閱:
- 維基百科:滾動程式碼
- Atmel:“AVR411:無線鏈路的安全滾動碼算法”
- Microchip:“HCS301:KeeLoq 跳碼編碼器”
- Microchip:“AN661:“使用 PIC16C56 的跳碼解碼器”
- Microchip:“AN1248:KeeLoq 接收器系統”
- Andy Carvell:RKE 分析
- Mike Szczys “密鑰卡程式”