Howto で出来ること
Armadillo-IoT G3 に搭載される NXP Semiconductors 製 EdgeLock SE050 C1 (以下「EdgeLock SE050」) にアクセスするための Plug & Trust middleware をインストールし、EdgeLock SE050 から X.509 証明書 とリファレンスキーを取得します。
Howto の概要
- Armadillo-IoT G3 に EdgeLock SE050 C1 向けビルド済みパッケージをインストールします
- アットマークテクノからビルド済みパッケージを提供しています
- plug-and-trust: NXP Semiconductors からリリースされている EdgeLock SE050 にアクセスするためのライブラリなど
- se05x-tools: アットマークテクノからリリースされている X.509 証明書の読み書きツール
- ターゲットボード上に Plug & Trust middleware をインストールします
- se05x_GetInfo を利用して EdgeLock SE050 の動作確認をします
- X.509 証明書とリファレンスキーを EdgeLock SE050 から取得します
- plug-and-trust 4.2.0
- plug-and-trust-tools 4.2.0
- se05x-tools 1.0.0
自らビルドする場合は以下を参考にしてください。
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 へアクセスするには GPIO 73 を high にする必要があります。 以下にスクリプトの例を記載しますのでご利用ください。
#!/bin/sh
GPIO_EXPORT="/sys/class/gpio/export"
GPIO_NUM="73"
GPIO_DIRECTION="/sys/class/gpio/gpio$GPIO_NUM/direction"
GPIO_VALUE="/sys/class/gpio/gpio$GPIO_NUM/value"
if [ ! -e $GPIO_VALUE ]; then
echo $GPIO_NUM > $GPIO_EXPORT
fi
echo out > $GPIO_DIRECTION
echo 1 > $GPIO_VALUE
sleep 0.3
if ! i2cdetect -y 3;
then
echo "not detect slave addr"
echo "NG"
fi
Plug & Trust Middleware と se05x tools をインストールする
アットマークテクノから Debian 向けに plug-and-trust のビルド済みパッケージと se05x-tools パッケージが提供されます。
パッケージをインストールします。
[armadillo ~]# apt update
[armadillo ~]# apt upgrade
[armadillo ~]# apt install plug-and-trust plug-and-trust-tools se05x-tools
インストールが終わったら、環境変数を設定します。
[armadillo ~]# export OPENSSL_CONF=/etc/plug-and-trust/openssl11_sss_se050.cnf
[armadillo ~]# export EX_SSS_BOOT_SSS_PORT=/dev/i2c-3:0x48
OpenSSL engine を介して EdgeLock SE050 にアクセスする際には OPENSSL_CONF の設定が利用されます。
また、Plug & Trust MW を利用したアプリの初期値として EX_SSS_BOOT_SSS_PORT が利用されることもあります。
サンプルアプリケーションで動作確認をする
se05x_GetInfo を実行する。EdgeLock SE050 にアクセスできると以下のようなログが出力される。
[armadillo ~]# se05x_GetInfo
App :INFO :PlugAndTrust_v04.02.00_20220524
App :INFO :Running se05x_GetInfo
App :INFO :Using PortName='/dev/i2c-3: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 証明書を取得します。
[armadillo ~]# se05x_getkey 0xF0000111 device_cert.pem /dev/i2c-3:0x48
リファレンスキーを取得します
[armadillo ~]# se05x_getkey 0xF0000110 refkey.pem /dev/i2c-3:0x48