安全なUART通信プロトコルを作成するにはどうすればよいですか?


8

安全なUART / USB通信プロトコルを作成する方法を考えていました。マイコンとパソコンの通信に必要です。私は〜10個のコマンドを使用しており、それぞれに10個の個別の確認応答コマンドを使用すると思いました。

交換は次のようになります。

  • PCがUARTを介してウェイクアップコマンドを送信する
  • µCはPCが接続されていることを認識し、そのコマンドをPCに送信します。 0x01
  • PCは要求された処理(一部のハードウェア関連)を実行し、~0x01完了時に応答します(2つの数の間に大きな「距離」を作成するために数を無視します)。
  • µC 0x01は送信したことを認識し~0x01、PCから期待しています。~0x01µCは、何か他のものが戻ってきた場合、何かがうまくいかなかったことを認識し、新しい要求またはエラーメッセージを送信します。

µCが送信する0x01場合、PCはそれを理解0x02して~0x02送り返しますが、~0x01ノイズによるµCの読み取りはかなり悪いでしょう。

送信に関してそれはどのくらい安全ですか、またはこれをより安全にするにはどうすればよいですか?


1
あなたは私の関連する質問とそれに対する非常に良い答えをレビューたいと思うかもしれません。
Eugene Sh。

1
「より安全」とは、盗聴に抵抗するために暗号などを追加しないことで、伝送エラーが発生しにくくなることを意味します。それだけでもかなり広大なフィールドです:en.wikipedia.org/wiki/Error_detection_and_correction
Fizz

2
あなたはハミングコーディングを調べたいかもしれません。最大16個のコマンド(4ビット)を使用し、体系的に7ビット(標準のUARTを介して送信できます)に拡張します。シングルビットエラーを修正するか、任意の2ビットが誤って受信されたかどうかを検出できます。
Neil_UK 2015年

2
1)7ビット+パリティビットは1つの方法で、簡単です。起こり得るすべてのエラーをキャッチするわけではありませんが、多くのエラーをキャッチします。2)より堅牢な方法は、2バイトを送信することです。最初は実際のコマンドで、2番目は最初のコマンドの「not」で送信します。3)「コマンド着信」バイトを送信し、その後にコマンドを送信し、その後にコマンドの賛辞を送信し、その後に「コマンド終了バイト」を送信することをお勧めします。「コマンドが来る」と「コマンドの終わり」のバイトは、コマンドと補完コマンドのバイトのいずれとも重ならないように選択する必要があります
user3629249

1
10個のコマンドだけが必要な場合は、各バイトに2つのコピー(冗長性のため)とパリティビットを含めることができます。または、256シンボルのシンボルスペースがあり、必要なのは10シンボルだけなので、最大で異なるシンボル(すべてのシンボルが複数のビットで異なる)を選択するか、1と0の偶数のシンボルのみを選択できます。シングルビットエラーを心配する必要はありません。
mkeith 2015年

回答:


1

おそらくチェックサムまたはCRCを含むより長いコマンドを定義し、ACK / NACKまたはエラー状態を待つ必要があると思います。

TFTP(RFC 1350)のような簡単なプロトコルから例をとることができます。


1

安全な通信のために、通信回線への可能なすべてのスレッドを考慮する必要があります。したがって、システムが外部からアクセス可能かどうかを定義する必要があります(ワイヤレスなどのサードパーティシステム)。

一般に、次のスレッドについて考える必要があります。

  • 繰り返し
  • オミシオン
  • 再シーケンス
  • 操作
  • ディレイ
  • 挿入
  • 腐敗

スレッドに対する標準的な対策は次のとおりです。

  • シーケンスまたはタイムスタンプ
  • 時間監督
  • 固有のソースコードと宛先コード
  • 応答
  • 識別手順
  • ある種のチェックサム、ハッシュコード...
  • 簡単なプロトコルですでに実装されているこれらのいくつかの暗号技術。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.