戻る  | 前へ | 次へ

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は以下の流れで動作します

  1. IoT SAFEアプレットが起動すると、自動的にキーペアが作成される
  2. Applet Consoleに公開鍵が登録される
  3. CSRを生成するSTORE DATAコマンドを送信する
  4. IoT SAFEアプレットがCSRを生成する
  5. Applet ConsoleにCSRが登録される
  6. CSRをApplet Consoleから読み出す
  7. クライアント証明書を作成する
  8. クライアント証明書をIoT機器に配置する
  9. mTLS通信を確立する
../_images/overview.png

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の確認を行います

事前準備

  1. 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
    
  2. SIMカードの状態をApplet Consoleで確認する
    • Applet ConsoleのSIMメニューから該当のSIMカードのSIM詳細画面を開く
    • SIM詳細画面に、IoT SAFEがインストールされていないこと、公開鍵とCSRが登録されていないことを確認する
    ../_images/before_gen_key.png

IoT SAFEアプレットのインストールとキーペアの生成

  1. SIMカードにIoT SAFEアプレットをインストールする
  2. SIMカードに正常にIoT SAFEアプレットがインストールされ、公開鍵が登録されていることを確認する
    1. Applet ConsoleのSIMメニューから該当のSIMカードのSIM詳細画面を開く
    2. OTAステータスが「Install:Succeeded」となっていることを確認する
    3. 公開鍵が登録されていることを確認する(登録まで数分かかることがあります)
    ../_images/after_gen_key.png

CSRの生成

  1. Applet ConsoleからCSRを生成するSTORE DATAコマンドを送信する

    Applet ConsoleのAPIを利用して、STORE DATAコマンドを送信します

    1. ログインを行い、アクセストークンを取得します

      curl -i -X POST 'https://api.環境名.sim-applet.com/v1/login'\
          -H "Content-Type:application/json" \
          -d \
          '{
              "email": "メールアドレス",
              "password": "パスワード"
          }'
      
    2. STORE DATAコマンドを送信します

      curl -i -X PUT 'https://ota-api.環境名.sim-applet.com/remoteconfig/:otaSettingId/update/:simId' \
          -H 'Content-Type: application/json' \
          -H 'Authorization: Bearer アクセストークン' \
          -d \
          '{
              "configAPDUs": [
                  {
                      "apdu": "80E28100217D1F740131501A30183116301406035504030C0D646576696365302E6C6F63616C00",
                      "canFail": false
                  }
              ],
              "tag": "Gen CSR"
          }'
      
      • 「:otaSettingId」と「:simId」は、IoT SAFEをインストールした際のOTAログから確認することができます
      ../_images/log2.png
    3. STORE DATAコマンドが実行されたことを確認します
      ../_images/store_data_success.png
    4. CSRがApplet Consoleに登録されたことを確認します
      • STORE DATAコマンド実行後にApplet Consoleに登録されるまで数分かかります
      ../_images/after_gen_csr.png

mTLS通信の確立

  1. クライアント証明書を作成する
    • Applet Consoleから取得したCSRをIoTサーバー側のCAで署名し、クライアント証明書を作成します
  2. mTLS通信でIoTサーバーに接続する
    • クライアント証明書を「iotsafe.client.cert」とした場合、以下のコマンドで通信が行えることを確認します
    openssl s_client \
    -connect IoTサーバのIPアドレス:IoTサーバのポート番号 \
        -cert "./iotsafe.client.cert" -key "pkcs11:token=IoTSAFE;type=private;id=%01"