せっかくSHAとAESのハードウェアアクセラレータが使えるようになったので、WiFiを使ったリモートスイッチを暗号化して、セキュアなWiFiリモートスイッチを作ってみました。クライアント側のスケッチ、サーバ側のスケッチを2つ用意し、それぞれのフォルダに共通ライブラリをコピー&ペーストしてコンパイルしてください。
接続
クライアント側の25Pinにスイッチ、26PinにLEDと抵抗をつけます。LEDと抵抗は通信エラーが起きたときのインジケータなので、なくても大丈夫です。
サーバ側の25PinにLEDと抵抗をつけます。
クライアント側のスケッチ
サーバ側のスケッチ
共通ライブラリ
普通のWiFiリモコンとの違い
通信の内容をAES128を使って暗号化しています。
LEDを制御するコマンドがLEDTGLのみなので、通信するデータに乱数(Salt)をのせて、暗号文が通信毎に変わるようにしています。ただし、通信1発目のリンクリクエストについては、Saltを加えてもサーバは反応するしかないため、何もしていません。
サーバ側からワンタイムパスワード(Challenge)を送信し、クライアント側からはコマンドにワンタイムパスワードを加えた文字列を暗号化してサーバに送信します。サーバ側でワンタイムパスワードを比較することで、リプレイアタックされてもコマンドを受け付けないようにしています。
より詳しく知りたい方は、
リプレイアタック、チャレンジーハンドシェイク、CHAP
などを検索してください。
0 件のコメント:
コメントを投稿