web-dev-qa-db-ja.com

ローリングコードフォブとレシーバーはどのように同期しますか?

これは私の以前の質問に対するフォローアップの質問です: 車のリモコンを何度も押すと、ローリングコードに対するサービス拒否攻撃が発生しますか?

この質問は、実際の「車の始動方法」としてよりも、ローリングコードについての学問的(誤)理解を深めるために求めていることを強調したいと思います。質問

多くの(古い)車やガレージのリモコンはローリングコードシステムを使用しているため、フォブボタンが押されるたびに異なるコードが送信され、リプレイアタックから保護されます。

共有秘密?

ローリングコードについての私の最初の理解は、フォブと車の間に共有の秘密(おそらくシリアル番号?)があり、これが両側で同じ無限のローリングコードのシーケンスを暗号的に生成するために使用されたということでした。

この方法では、単純なリプレイ攻撃は機能しません。 (レシーバーは同じコードを2回受け入れません。)

また、攻撃者は元のシークレットをリバースエンジニアリングしてシーケンスに新しいアイテムを生成する前に、実行不可能なほど長いコードシーケンスを傍受する必要があると考えました。

あいまいさによるセキュリティ?

私は今、テクノロジーを過大評価していたと思います。秘密を転送する必要のない比較的単純なプロセスで新しいフォブを受け入れるようにレシーバーをトレーニングできるように見えるためです。車/ガレージは「パスワードの変更」モードに相当します。

これは、共有秘密はなく、2つのデバイスが同期する必要がある非常に長い(アルゴリズムで生成された)シーケンスが1つしかないことを示唆しています。

車がフォブを一度聞いて将来のコードを予測できる場合、スニファーは確かに同じことを実行できますか?

私の新しい理解が正しい場合:*同じ生成シーケンスを使用するすべてのフォブ。アルゴリズムはあいまいかもしれませんが、シークレットによってカスタマイズされていません。唯一の「シークレット」は、フォブの現在の内部状態であり、ボタンを押すたびにブロードキャストされます。 *単純なスニファはリプレイ攻撃を使用できませんが、高度なスニファは単一のコードから将来​​のシーケンス全体を生成できます。 *私は車/ガレージのセキュリティシステムに失望しています。

車/ガレージフォブは共有秘密を使用し、それに基づいてシーケンスを生成しますか?もしそうなら、同期プロセス中にリモートとフォブが秘密鍵を共有できるようにする内部プロセスは何ですか?

8
Oddthinking

Keeloqは多くのキーフォブ/ガレージのドア開閉装置で使用されていますが、すべてではありません。この記事は、keeloq Introduction to Ultimate KEELOQ Technology を作成したマイクロチップによって書かれました。

tl; dr

リモコン(キーフォブ/ガレージドアオープナー)とレシーバー(車/ garage motor unit)暗号化と復号化に同じ64ビットキーを使用します。 「シリアル番号」は、特定のリモコンを識別するために使用されます。ボタンが押されるたびに、リモートの「同期カウンター」が1ずつ増加します。リモートの「同期カウンター」がレシーバーの「同期カウンター」より0から〜250進んでいる場合、コードを受け入れ、そのリモートの同期カウンターを更新します。 。 「同期カウンター」は、リモートと受信者しか知らないキーで暗号化されているため、64ビットのキーがないため、スニファーは次の「同期カウンター」を知っていてもコードを偽造できません。

keeloq packet structure

ローリングコードについての私の最初の理解は、フォブと車の間に共有の秘密(おそらくシリアル番号?)があり、これが両側で同じ無限のローリングコードのシーケンスを暗号的に生成するために使用されたということでした。

リモートは、パケットの「暗号化部分」を暗号化し、それと固定部分を受信側に送信します。受信側は、リモートが使用したものと同じ64ビットキーを使用して「暗号化部分」を復号化します。これは、Web認証によく使用される ワンタイムパスワード とは異なるスキームです。

まあそれは無限ではありません。ボタンを押すたびに、「同期カウンター」が1ずつ増加します。「同期カウンター」の範囲は0〜65535です。したがって、65536回の送信後、同じコードが繰り返されます。 65536のロック解除トランスミッションをキャプチャした場合、ラップするだけなので、そのシーケンスで次のrawキャプチャを再生することにより、車/ガレージのロックを解除できます。

私は今、テクノロジーを過大評価していたと思います。秘密を転送する必要のない比較的単純なプロセスで新しいフォブを受け入れるようにレシーバーをトレーニングできるように見えるためです。車/ガレージは「パスワードの変更」モードに相当します。

やや。共有秘密が交換または伝達されないことはあなたの言うとおりです。リモートとレシーバーが同じ64ビットキーを使用する方法は、スキームによって異なります。

PDFで説明されている3つの学習モード「シンプル」「ノーマル」「セキュア」があります。

  1. シンプルな

単純な鍵生成スキームは、KEELOQテクノロジーシステムがサポートする最も単純なスキームです。単純なキー生成を使用する場合、1つのキーがすべてのエンコーダーで使用され、トランスミッターはシリアル番号によってのみ区別されます。ユーザーがそのような鍵生成スキームを使用する意味が何であるかを正確に理解することは非常に重要です。これは潜在的なセキュリティリスクになる可能性があります。いずれかのエンコーダーが侵害され、暗号化キーが見つかった場合、すべてのエンコーダーが完全に同じキーを使用するため、すべてのエンコーダーが侵害されます。

すべてのリモートとレシーバーは[〜#〜]正確に[〜#〜]を使用して、パケットを暗号化および復号化します。

  1. 正常

通常の鍵生成方式は、KEELOQテクノロジーシステムの一般的な鍵生成方式です。通常の学習では、マスターキーが使用されます(「製造元コード」と呼ばれます)。通常の学習メカニズムを使用する場合、デコーダーはメーカーコードとシリアル番号を使用して、各トランスミッターの復号化キーを計算します。各エンコーダのシリアル番号と製造元コードを使用して、各エンコーダの一意の暗号化キーが計算されます。エンコーダーは、シリアル番号と計算された暗号化キーのみを保存します。個々の暗号化キーを計算できるようにするには、デコーダーにこのメーカーコードをプログラムする必要があります。暗号化キーを計算するために、28ビットのシリアル番号に0x6000000および0x20000000が埋め込まれ、製造元コードを復号化キーとして使用して復号化されます。暗号化キーの高い部分と低い部分(MSBとLSB)を計算するために、この操作は2回行われます。

64ビットのキーは、「シリアル番号」と「メーカーコード」を使用して導出されます。リモートはマスターキーではなく派生キーのみを保存しますが、受信者はマスターキーを知っているため、特定のリモートキーを導出できます。つまり、リモート(シリアル番号)を「学習」してから、そのリモートの64ビットキーを導出します。

  1. 安全な

セキュアキー生成スキームは、より高度なキー生成スキームです。通常のキー生成スキームを使用する場合、キーはシリアル番号と製造元コードから生成されます。シリアル番号は任意のパケットで送信されるため、鍵生成スキームの一部が常に公開されます。しかし、さらに安全な方法は、乱数(「シード」と呼ばれる)を生成することです。シードの長さに応じて、32ビットシード、48ビットシード、および60ビットシードの3つのキー生成スキームがあります。通常の操作中、シードは送信されません。シードが送信されるのは、学習/ペアリングフェーズの間だけです。したがって、暗号化キーの生成に使用される情報は機密情報として保持されます。一部の実装では、(システムがインストールされている)限られた期間のみシードを送信できるようにし、この機能を無効にすることで、セキュリティレベルをさらに高めます。

64ビットのキーを導出するために、「シリアル番号」の代わりにシードが使用されます。このシードが送信されるのは、学習/ペアリング時のみです。

最後のメモとして。 keeloqよりも優れたスキームは他にもあります。 PDFでもkeeloqの代わりにAESを使用するスキームについて説明していますが、より悪いものもあります。いくつかのガレージはまだ固定コードを使用していました。

車やガレージのセキュリティシステムに失望しています。

私も。

5
silverduck