#はじめに#
2019/12/14に開かれた IoTSecJPにてお時間をいただき
セキュアエレメントとIoTデバイスセキュリティ
と題してお話させていただきました。
その内容をベースにまとめていきたいと思います。
#I2C通信の暗号化#
ホストマイコンからI2Cで鍵情報を送る際、ロジアナで読み取られないようにI2C経路を暗号化したい。
ATECC608Aでは、IOProtectionKeyというもので暗号化、復号を行いI2C経路を守る仕組みを備えていた。
現状のNXP SE050を動作させるテストコードNXP SE050検証(ESP32へのポーティング編)(Porting NXP SE050 to ESP32)は実行すると、下記の警告が出る。
sss:WARN :Communication channel is Plain.
sss:WARN :!!!Not recommended for production use.!!!
まずはこれが出なくなるようにしたい。
#NXP SE050の暗号化の整理#
NXPのドキュメントSE050 - User Guidelinesによると、以下のようになるらしい。
5.1.2セッション
SE050では、次のいずれかのセキュアオブジェクトとのセッションを開くことができます。
•userID(UserIDセッションを開くため)
•AES128キー(SCP03セッションを開くため)
•ECKeyペアまたはEC公開キー(FastSCPセッションを開くため)
UserIDセッションはプレーンな通信を使用していますが、SCP03またはFastSCPセッションはSCP03の安全なメッセージに依存しているため、エンドツーエンドの保護を提供します(セキュリティの推奨事項を参照)。
ユーザーが上記を使用してセッションを開いた場合:
•バインドされていないユーザーのアクセス権は適用されなくなります
•ユーザーは、セッションを開くために使用された認証オブジェクトIDによって認識され、バインドされたユーザーになります。
デフォルトでは、SCP03またはFastSCPセッションが確立されると、アプレットレベルのSCPがこの特定のセッションにエンドツーエンドで適用されます。
アプレットレベルのSCPはSCP03secureメッセージングを使用しています。 SCP03とFastSCPセッションの違いは認証方法です。SCP03は対称暗号に基づいており、FastSCPは認証に非対称暗号を使用しています。認証されたユーザーセッションは、セッションを安全に使用するための推奨事項を提供します。
Platform SCPが使用される場合、アプレットレベルのSCPはPlatform SCPチャネル内にラップされることに注意してください。
絵にすると下記のようになるようだ。
platformSCP03とSecureObjectの設定は重ね掛けができるようだ。
今回、PlatformSCP03の暗号化を試してみる。
#PlatformSCP03の設定ポイント#
まず、デフォルトで設定されているENC,MAC,DEKの鍵を見つける必要がある。
SE050 Configurationsを見ると、
5ページに「default platform SCP Keys」という項目があり、デフォルトの3点セットの値がわかる。
それぞれの定義はNXPのPlug&Trust MW内、ex_sss_tp_scp03_keys.hにある。
これがデフォルトだと設定ファイルex_sss_auth.h上で”Development Board”用になっているので、今回手元にある“SE050C1”用に置き換える。
そうして、いくつかPlatformSCP03の定義を追加してビルドできた。
ソースコードはNXP-SE050-Test-PlatformSCP03に置いた。
実行させたところ。
App:INFO :PlugAndTrust_v02.12.04_20200228
App:INFO :If you want to over-ride the selection, use ENV=EX_SSS_BOOT_SSS_PORT or pass in command line arguments.
sss:INFO :atr (Len=35)
00 A0 00 00 03 96 04 03 E8 00 FE 02 0B 03 E8 08
01 00 00 00 00 64 00 00 0A 4A 43 4F 50 34 20 41
54 50 4F
App:WARN :#####################################################
App:INFO :uid (Len=18)
04 00 50 01 4A 66 D8 75 07 78 E6 04 7E 91 0A 94
66 80
App:WARN :#####################################################
App:INFO :Applet Major = 3
App:INFO :Applet Minor = 1
App:INFO :Applet patch = 0
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
App:INFO :SecureBox = 010B
App:INFO :ex_sss Finished
通信が平文である警告が消えたが、デフォルトのままだと3つの鍵が公開情報なので、適切に鍵を置き換えなくてはならない。
鍵置き換えのデモが、Plug&Trust MW内の「SE05X Rotate PlatformSCP Keys Demo」となる。