IoT SAFE(PoC)¶
IoT SAFEとは¶
IoT SAFE (IoT SIM Applet For Secure End-2-End Communication) は、GSMAによって策定された、IoT機器とクラウド間の通信を安全に行うために、SIMカードをRoot of Trustとして利用するための標準規格です。
認証や暗号化の機能をもつSIMアプレットを搭載することで、デバイス認証とデータのエンドツーエンドの暗号化を実現する仕組みであり、セルラーネットワークを利用するIoT機器におけるデバイスセキュリティを実現する技術の一つとして期待されています。
本アプレットは、IoT SAFEの標準規格に沿って実装を行ったものです。
IoT SAFEの動作概要¶
IoT SAFEアプレットは以下の流れで動作を行います。
事前作業
SIMカードに対してIoT SAFEアプレットをインストールする。
「IoT SAFE」メニュー又はOpenAPIから「SIM個別の識別情報」または「識別情報テンプレート」を登録する。
証明書の生成処理
IoT SAFEアプレットは、起動するとキーペアの生成を行った後、Applet Consoleへコマンドの確認を行う。
Applet Consoleは、キーペア読み取りの指示(ReadPublicKeyコマンド)を行う。
IoT SAFEアプレットは、キーペアの公開鍵をApplet Consoleへ送信する。
Applet Consoleは、CSRの生成と送信の指示(GenerateCSRコマンド)を行う。
IoT SAFEアプレットは、CSRの生成を行い、Applet Consoleへ送信する。
Applet Consoleは、CSRをもとにクライアント証明書を署名する。
Applet Consoleは、クライアント証明書の配布(DeliveryClientCertコマンド)を行う。
クライアント証明書の利用
mTLS通信やVPN通信を確立する。
上記の動作により、IoT SAFEアプレットにはキーペア(秘密鍵/公開鍵)、CSR、クライアント証明書が格納され、セキュアな通信を行うことが可能になります。
IoT SAFEの動作確認¶
ここでは、IoT SAFEアプレット及びApplet Consoleを利用して、OpenSSLを用いたmTLS通信の動作確認を行います。
動作確認の環境¶
本手順では以下のソフトウェア、ハードウェアの条件で動作確認を行っています。
IoT機器
- Raspberry Pi
Debian GNU/Linux 12 (bookworm)
OpenSSL 3.0.11
- デバイス
対応機種は こちら を参照してください。
IoTサーバ
- 任意のWEBサーバ等
クライアント証明書の検証を必須の設定とします。
Applet Console
アプレットのインストール操作や、公開鍵及びCSRの確認を行います。
事前準備¶
- IoT SAFEをLinux上で動作させるためのパッケージ(libifd-atcmdとpkcs11-iotsafe)をインストールする。
sudo mkdir /opt/iotsafe && sudo chown _apt /opt/iotsafe sudo cp ~/*.deb /opt/iotsafe/ sudo apt install /opt/iotsafe/*.deb
IoT SAFEアプレットのインストール¶
- SIMカードにIoT SAFEアプレットをインストールする。
Applet Consoleの操作方法 を参照ください。
- SIMカードに正常にIoT SAFEアプレットがインストールされていることを確認する。
Applet ConsoleのSIMメニューから該当のSIMカードのSIM詳細画面を開く。
OTAステータスが「Install:Succeeded」となっていることを確認する。
識別情報をApplet Consoleに登録する¶
「SIM個別の識別情報」または「識別情報テンプレート」の登録を行います。 ここでは識別情報テンプレートを用いて登録する方法を例として示します。 「SIM個別の識別情報」の登録方法については、こちら を参照ください。
注釈
識別情報テンプレートをすでに登録済みの場合は、この手順は不要です。 「CSRの生成とクライアント証明書の署名」へ進んでください。
- クライアント証明書タブにて、「識別情報テンプレート」をクリックします。
- 「編集」ボタンから識別情報テンプレートを編集します。
識別情報テンプレートが登録されたことを確認します。
CSRの生成とクライアント証明書の署名¶
IoT機器の電源を入れて、IoT SAFEアプレットを起動します。
- クライアント証明書一覧に表示されている「ID」をクリックすることで、クライアント証明書の詳細情報の表示します。
- ReadPublicKeyコマンド / ReadCSRコマンド / DeliveryClientCertコマンドの処理結果がSucceededになったことを確認します。
- 公開鍵 / CSR / クライアント証明書については、「SIM」メニューの「SIM詳細」から確認することが可能です。
mTLS通信の確立¶
OepnAPIまたは「SIM」メニューの「SIM詳細」から取得したクライアント証明書をファイルに保存し、IoT機器へ配布します。
- mTLS通信でIoTサーバーに接続する。
クライアント証明書を「iotsafe.client.cert」とした場合、以下のコマンドで通信が行えることを確認します。
openssl s_client \ -connect IoTサーバのIPアドレス:IoTサーバのポート番号 \ -cert "./iotsafe.client.cert" -key "pkcs11:token=IoTSAFE;type=private;id=%01"