Howto で出来ること
Armadillo-IoT G4 に搭載される NXP Semiconductors 製 EdgeLock SE050 (以下「EdgeLock SE050」) にアクセスするための Plug & Trust middleware をコンテナにインストールし、コンテナ上で EdgeLock SE050 から X.509 証明書 とリファレンスキーを取得します。
Armadillo-IoT G4をベースにした内容になっていますが、Armadillo-X2でも動作確認しています。
Howto の概要
- Armadillo-IoT G4 に EdgeLock SE050 向けビルド済みパッケージをインストールします
- アットマークテクノからビルド済みパッケージを提供しています
- plug-and-trust: NXP Semiconductors からリリースされている EdgeLock SE050 にアクセスするためのライブラリなど
- se05x-tools: アットマークテクノからリリースされている X.509 証明書の読み書きツール
- アットマークテクノからビルド済みパッケージを提供しています
- ターゲットボード上の Alpine Linux のコンテナに Plug & Trust middleware をインストールします
- se05x_GetInfo を利用して EdgeLock SE050 の動作確認をします
- X.509 証明書とリファレンスキーを EdgeLock SE050 から取得します
- plug-and-trust 4.1.1
- plug-and-trust-tools 4.1.1
- se05x-tools 1.0.0
自らビルドする場合は以下を参考にしてください。
EdgeLock SE050 Plug&Trust MW ビルド手順 (Armadillo-IoT G4)
EdgeLock SE050 について
EdgeLock SE050 は IoT アプリケーション向けのセキュアエレメントです。様々なアルゴリズムに対応した暗号エンジン、セキュアストレージを搭載します。内部処理は秘密鍵を露出させることなくセキュアに暗号処理を行うことができます。外部インターフェースは I2C を採用します。また、SE050 はターンキーソリューションとして利用を開始してすぐにクラウドサービスなど PKI を基にしたサービスに接続することができます。チップ固有の X.509証明書などが事前にプロビジョニングされた状態で出荷されます。
リファレンスキーについて
EdgeLock SE050 は秘密鍵が外部に露出しません。 これは、いったん鍵を EdgeLock SE050 に書き込むと秘密鍵を抜き出すこと ができない (削除や書き換えは可能) という仕様で実現されています。秘密鍵を利用するにはリファレンスキーと呼ばれる特殊なファイルを利用します。 リファレンスキーは秘密鍵のフォーマットで保存されますが、 公開鍵部分のみ有効で、それ以外の値は管理用やダミーの情報になっています。 リファレンスキーをファイルシステムに置いておいて、EdgeLock SE050 を利用する時に そのファイルを秘密鍵のように使うと、Plug & Trust middleware に含まれる OpenSSL の engine のライブラリがフックして EdgeLock SE050 にアクセスします。
EdgeLock SE050 を有効にする
以下を参考に EdgeLock SE050 の Deep Power-down を解除してください。
Plug & Trust Middleware と se05x tools をインストールする
アットマークテクノから提供される plug-and-trust のビルド済みパッケージと se05x-tools パッケージは Debian と Alpine Linux に対応します。 ここでは alpine を利用します。
alpine のコンテナを起動します。
[armadillo ~]# podman run -it --name=plug_and_trust --device=/dev/i2c-2 \
-v /etc/apk:/etc/apk:ro docker.io/alpine /bin/sh
コンテナが立ち上がったら、パッケージをインストールします。
[container ~]# apk add se05x-tools plug-and-trust-tools
インストールが終わったら、環境変数を設定します。
[container ~]# export OPENSSL_CONF=/etc/plug-and-trust/openssl11_sss_se050.cnf
[container ~]# export EX_SSS_BOOT_SSS_PORT=/dev/i2c-2:0x48
OpenSSL engine を介して EdgeLock SE050 にアクセスする際には OPENSSL_CONF の設定が利用されます。
また、Plug & Trust MW を利用したアプリの初期値として EX_SSS_BOOT_SSS_PORT が利用されることもあります。
サンプルアプリケーションで動作確認をする
se05x_GetInfo を実行する。EdgeLock SE050 にアクセスできると以下のようなログが出力される。
[container ~]# se05x_GetInfo
App :INFO :PlugAndTrust_v04.01.01_20220112
App :INFO :Running se05x_GetInfo
App :INFO :Using PortName='/dev/i2c-2:0x48' (CLI)
: (省略)
App :WARN :#####################################################
App :INFO :Applet Major = 3
App :INFO :Applet Minor = 1
App :INFO :Applet patch = 1
App :INFO :AppletConfig = 6FFF
App :INFO :With ECDAA
App :INFO :With ECDSA_ECDH_ECDHE
App :INFO :With EDDSA
App :INFO :With DH_MONT
App :INFO :With HMAC
App :INFO :With RSA_PLAIN
App :INFO :With RSA_CRT
App :INFO :With AES
App :INFO :With DES
App :INFO :With PBKDF
App :INFO :With TLS
App :INFO :With MIFARE
App :INFO :With I2CM
: (省略)
X.509 証明書とリファレンスキーの取得
ここでは例として EdgeLock SE050 に保存されている以下の鍵を取得します。
key name | ID |
---|---|
Cloud connection key 0, RSA2048, Die Individual |
0xF0000110 (refkey) 0xF0000111 (cert) |
これらの鍵と X.509 証明書は、チップ製造時に書き込まれたもので、デバイス毎に異なります。クラウドサービスのデバイス認証などにも利用することができます。また書き込まれた鍵は複数あるので別の鍵を選択することもできます。詳細については以下のドキュメントを参照してください。Armadillo-IoT ゲートウェイ G4 に搭載されている EdgeLock SE050 は Variant C です。
- 0xF0000101
- 0xF0000103
証明書は利用できませんが、対応する鍵自体は利用できます (0xF0000100, 0xF0000102)。
X.509 証明書を取得します。
[container ~]# se05x_getkey 0xF0000111 device_cert.pem /dev/i2c-2:0x48
リファレンスキーを取得します
[container ~]# se05x_getkey 0xF0000110 refkey.pem /dev/i2c-2:0x48