はじめに#
独学しているIoTセキュリティについて、集大成の意味合いを込めて現在理想と考えるセキュアなプロトタイピング環境を構築しました。
デバイス、サーバー、クライアントアプリの要素技術の勉強を含めて備忘録として分散して記していきます。
前回、このプロジェクトにrainbowtypeと名前を付けました。
構成は上記となり、今回はクライアント側の実装を検討してみます。
rainbowtype clientの実装#
rainbowtype clientは開発者のWindowsPCに配置され、デバイスの操作、証明書の管理を行うためのアプリケーションとして作成した。
rainbowtype clientはrainbowtype serverと通信し、rainbowtype bootloaderが参照するデバイスステータス、アクションを設定する。
1,rainbowtype bootloaderが設定済みのデバイスに対して、以下を設定
- rainbowtype bootloaderで設定されたデバイス証明書の更新のための新しい公開鍵の提出要求
- 提出された新しい公開鍵に対する署名
- OTAするファームウェアの送信
- 個別に設定できるURLなどの情報
2,rainbowtype bootloaderが設定済みのデバイスが接続する先に対して、以下を設定
- rainbowtype bootloaderを認証できるサーバー証明書の発行
- AWS,Azureでrainbowtype bootloaderを認証するための確認証明書の作成
3,rainbowtype全体で使用する証明書の管理
- ルートCA証明書、秘密鍵の作成
- 署名者CA証明書、秘密鍵の作成
4,rainbowtype bootloaderのファームウェアに組み込む必要のある証明書定義の作成
5,製造された直後のデバイスに対して行うATECC608Aのプログラミング、証明書の保存を行うプロビジョニング
6,プロビジョニングが終わったデバイスに対してrainbowtype bootloaderを書き込むデプロイ
単一のWindowsアプリケーションとして作成し、ESP32とのシリアル通信、証明書作成など既存のPythonコードを使う必要がある。
そのため、Electronを使ってアプリケーションを作成し、そこからPython を呼び出す方法を考えた。
Reactフレームワークを利用できるElectron React Boilerplateを使用した。
ボタンなどのUIを利用するため、Material-UIを組み込んだ。
コードはrainbowtype-clientへ公開した。