Howto

EdgeLock SE050 Plug&Trust MW のビルド済みパッケージのインストールと証明書の取得 (Armadillo-IoT G4/X2)

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 から取得します
本 Howto 作成時には以下のバージョンを利用しました。
- 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 を利用します。

Debian のコンテナを利用する場合は、at-debian の利用をお勧めします。 at-debian はアットマークテクノによって動作確認された環境です。

at-debian-image

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
Plug & Trust MW の利用開始前に環境変数 OPENSSL_CONF と EX_SSS_BOOT_SSS_PORT を設定してください。
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 です。

一部の証明書は NXP によってリボークされたために利用ができません。利用できない証明書は以下のとおりです。
- 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