0
4

4 に答える 4

2

各ノードは、コマンドを受け取るはずのノードを「知っている」と仮定します。この場合、受信ノードに、コマンドを受け取るノードごとに(単純な)キーを保存させ、プロトコルに3つのフィールドを追加します。

  • ソルト (送信者が作成した乱数)
  • シーケンス番号
  • 認証フィールド

送信者と受信者の両方が、tx->rx 関係で最後に使用されたシーケンス番号を保存し、送信者はコマンドごとにそれを増やします。

送信者と受信者の両方が連結のハッシュ (SHA1?) を作成します。SequenceNumber+Command+SequenceNumber+salt+nodekey

編集: 送信ノードのキーをnodekeyイスト

送信者はこれを認証フィールドとして送信し、受信者はそれを認証フィールドと照合して、シーケンス番号が LRU シーケンス番号よりも大きく、認証フィールドが OK をチェックアウトした場合にのみ、コマンドを受け入れます。

これは、シーケンス番号の再利用を伴うため、リプレイ攻撃に対して安全です。

編集:

シーケンス番号の同期の喪失についてのコメントには懸念がありますが、提案された解決策はそれに対して回復力があります:送信者だけが SN を増やし、受信者は最後に使用されたものよりも高いすべての SN を受け入れます。メッセージが失われると SN がジャンプしますが、それでも LRU より高いものとして受け入れられます。

于 2012-05-12T19:51:25.470 に答える
1

MD5 などを使用してメッセージを暗号化し、「767b79ebb8061054d3ad1eaef428b469」のようなものを送信するとします。

MD5 で暗号化しません。コマンドのハッシュを送信します。つまり、受信側では、送信するメッセージ ダイジェストを対応するコマンドにマップするための逆ルック アップ テーブルが必要です。

攻撃者はその文字列をコピーして再送信するだけで、同じ結果を得ることができます。

これは正当な懸念事項であり、リプレイ攻撃のカテゴリに分類されます。これに対処する方法はたくさんありますが、送信機と受信機の両方を再設計するには、かなりの労力が必要です。

于 2012-05-12T20:17:21.837 に答える
0

あなたはマイクロコントローラーを使用しているので、最も高度な暗号化機能を持っておらず、実装が簡単なものがほとんどの場合、最善の方法であると思います。

コントローラーで MD5 を使用できる場合は、Eugen Rieck メソッドを使用しますが、すべてのキーを使用できるのは 10 日に 1 回程度 (どれだけのデータを送信するかによって異なります) と言うだけです。

これにより、すでに少し安全になり、長期的なリッスンを行う場合を除いて、コマンドを使用できなくなります.

これはあいまいさによるある種のセキュリティであり、攻撃者が10日間のクールダウンがあることを知っている場合、機能しないことに注意してください.

デバイスに暗号化機能と現在時刻が搭載されている場合は、基本的な暗号化機能と現在時刻を使用するだけです。

于 2012-05-12T20:56:58.217 に答える
-1

キーに依存するある種の暗号化の使用を検討する必要があります。もちろん、キーはおそらく、両方のコントローラーが同期を維持できる何らかの方法で決定する必要があります。おそらく、時刻を使用する何らかの手段で十分でしょう。PHP のtime()関数のようなもので、最も近い百の位に丸められます。各コントローラーは、シグナルを受信すると、現在の丸められたタイムスタンプと以前のタイムスタンプを確認できるため、攻撃者が暗号化されたシグナルを取得した場合、最大 200 秒間しか再利用できません。各信号を送信するのにかかる時間と必要なセキュリティのレベル (および場合によっては、信号を逃した場合にどれくらいの頻度で回避できるか) に応じて、10 秒または 5 秒に丸めることができます。いくつかの疑似コード (10 に丸めます):

送信:

signal=encrypt(outgoing, round(time, 10))
sendSignal(signal)

受信:

signal=decrypt(incoming, round(time, 10))
if (invalid(signal)) {signal=decrypt(incoming, round(time, 10)-10)}
interpretSignal(signal)

2 行目に示されているように、復号化された信号が有効かどうかを判断する何らかの方法が必要です。

これは、常にかなり同期している必要がある共通のキーメカニズムについて私が考えたものです。ただし、基本的な考え方は、送信者と受信者がすべて知っている、または決定できる、頻繁に変更されるキーで信号を暗号化することです。

于 2012-05-12T19:49:52.470 に答える