ローリングコードの説明


13

誰かがKeeLoqなどのローリングコードプロトコルの仕組みを説明できますか?毎回異なるコードを使用するという基本的な前提は理解しているので、リプレイ攻撃を使用することはできませんが、一方が正しいコードを検証する方法などはわかりません。

さらに、ローリングコードへのインデックスが事前に知られていない/共有されていない場合、どのように初期同期を実行しますか?

Keeloqを例として使用して説明する必要がある場合は問題ありませんが、ローリングコードの一般的な説明が必要です。


回答:


10

ローリングコードを正しく機能させるには、いくつかの部分が必要です。ここでは、特定の方法ですべてのパーツを使用する一般的な実装について説明します。他のシステムはこのテーマのバリエーションですが、一般に同じ方法の多くを同じ方法で使用します。完全な実装とその仕組みを一度に説明するのではなく、単純なシステムを説明し、暗号化された安全なシステムに到達するまで複雑さを追加します。

非暗号化ローリングコードは、送信機と受信機の両方であり、どちらも同じ擬似乱数ジェネレータ(PRNG)を使用します。このジェネレーターには、2つの重要な情報があります。計算と、以前に生成された数値です。計算は通常、単一の数値で表すことができる線形フィードバック方程式です。PRNGに以前の番号を入力し、フィードバック番号を同じに保つことにより、特定の番号のシーケンスが生成されます。シーケンスは、生成可能なすべての番号を処理するまで繰り返されるシーケンスを持たず、同じシーケンスで最初からやり直します。

リモートと送信機の両方がフィードバック番号と現在の番号を知っている場合、リモートが次の番号を送信すると、受信機はそれを独自のジェネレーターに対してテストできます。一致する場合、アクティブ化します。そうでない場合、リモートが送信した番号を見つけるまでシーケンスをロールスルーします。もう一度リモコンを押すと、リモコンが一致するはずです。前回の送信で番号ジェネレーターが既に同期されているため、リモコンがアクティブになります。これが、ロック解除ボタンを2回押す必要がある場合がある理由です。レシーバーまたはトランスミッターが同期していません。

それがコードの重要な部分です。PRNGが十分に長い場合、通常の使用では取得が困難な、連続したシーケンスに多数の番号がないフィードバック番号を見つけることは非常に困難です。しかし、暗号的に安全ではありません。

さらに、一般的な暗号化を追加します。自動車メーカーは、送信機と受信機に特定の秘密鍵を使用します。メーカーによっては、各モデルと年に異なるコードが使用されている場合や、複数の車両モデル間で数年にわたってコードを共有している場合があります。トレードオフは、それぞれが異なるリモートを保管する必要があることですが、多くのモデルでコードを共有することの問題は、壊れた場合、より多くの車が脆弱になることです。

暗号化の背後には、ボタン情報、PRNGで生成された番号、およびフィードバック番号に関する小さな情報があります。PRNGをゼロから作成するのに十分ではありませんが、一定回数のボタンを押すと、限られたスペースに関する内部情報があれば、フィードバック番号が関係する可能性があります(もう一度、メーカー、回線固有)送信し、フィードバック番号を決定し、そのリモートのPRNGの追跡を開始します。

ローリングコードは、リプレイ攻撃を停止することのみを目的としています。暗号化は、ローリングコードが破損しないように保護することを目的としています。どちらか一方だけでは、システムは簡単に壊れてしまいます。製造元が送信機と受信機の両方を制御しているため、トレーニングには公開キー暗号化や特に関与するものは含まれません。また、アフターマーケットのフォブがこのタイプのシステムを搭載した車で動作するのを防ぎます。

ただし、ローリングコードは不浸透性ではありません。古いkeeloqシステムは、数年前(10年の使用後)に正常に攻撃されたため、メーカーの暗号化コードが見つかり、ローリングコードがより簡単に見つかります。それよりも前に、実際にコードを壊すことなく乗り物を乗せる方法で攻撃されました。応答として、新しい暗号化キーは60ビットです。多くの最新の暗号化システムほど安全ではありませんが、十分に安全であるため、壊れるまでに何年も続くでしょう。


ああ、PRNGの「シーケンスが繰り返されない」部分を忘れていたに違いありません。これは非常に重要です。受信者がフィードバックコードを決定できる情報を送信する利点は何ですか?これは、単にフィードバックコードを選択し、それを使用して送信機と受信機の両方を製造するよりも安全性が低いと思われる
...-NickHalden

@NickHaldenフィードバックコードはリモートごとに異なるため、顧客は後でリモートを追加するか、欠落しているリモートを交換する必要があります。トレーニングにのみ必要です。若干安全性の高いバージョンでは、追加のフィードバック情報を送信する前にリモートで特定のボタンを押す必要がありますが、一般的にシステム全体が十分に安全であるため、暗号化を解除してもその前にさらに多くの情報が必要ですフィードバックコード全体を取得するには、少しの情報で十分です。
アダムデイビス

8

ガレージのドアオープナーでチップを研究したときに、最初にKeeLoqに出会いました。マイクロチップのデータシートには、それがどのように動作するかを説明するのに良い仕事をしていません。

手短に:

  • 受信機は、すべての送信機のデータベースを保持し、シリアル番号をキーとします。
  • 各トランスミッタは、対称暗号化キー(64ビット)に関連付けられています。これは、チップ上およびレシーバーのデータベース内にあります。
  • 各送信機は16ビットのサイクリックシーケンス番号に関連付けられ、チップとデータベースにも保存されます。
  • トランスミッターがアクティブになると、シーケンス番号を65536を法としてインクリメントし(16ビットのラップアラウンド)、どのボタンが押されたかを表すビットマスク、シリアルID、およびシリアル番号の暗号化バージョンで構成されるパケットを送信します。
  • 受信者はデータベース内のシリアル番号と一致し、キーを引き出してシリアル番号を復号化します。
  • シリアル番号は新しいものでなければなりません。リプレイ攻撃を防ぐために最近使用したシリアル番号にすることはできません。(データシートの図7.3を参照)。
  • シリアル番号が検証されると、レシーバーは、押されたボタンのビットマスクに基づいて機能をアクティブにできます。
  • 新しいシリアル番号が16を超える値である場合(ユーザーが受信機から離れている間に誤ってボタンを何度も押した場合)、再同期するために余分なハンドシェイクを行う必要があり、追加のボタンを押す必要があります。(ユーザーは、受信状態が悪いと信じて、余分なボタンを押します)。

新しいトランスミッターをレシーバーデータベースに追加することは、クライアントをWi-Fiアクセスポイントに追加するためのボタンを押す設定方法と大まかに似ています。受信機は何らかの方法で新しい送信機を受け入れるモードに入るように伝えられます。

受信機と送信機が同じシークレットメーカーIDを共有している場合、通常のアクティベーションメッセージで渡される情報から新しい送信機を受け入れることができます。これは、64ビットの暗号化キーが製造元IDと受信機のシリアル情報から派生しているためです。(セクション7.1を参照)。

これに代わるより安全な代替手段があります:「Secure Learn」。これは、トランスミッターで特別な方法で開始されます(3つのボタンを同時に押します)。送信機は特別なパケットを送信します。これは、おそらくメーカーIDやシリアル番号に依存しない、暗号化キーの派生元となる60ビットのシード値です。

受信機が学習モードにない場合、当然、知らない送信機からの送信を拒否します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.