PSA Crypto API
2025/01/30
はじめに
もし libwally-core
を ncs 向けにビルドするなら libsecp256k1
は使えまい。
オプションで選択できたのは Mbed TLS か。
Nordic Ask AI に訊いてみる。
Q: ncsでmbedtlsを使うことはできますか?
A: はい、nRF Connect SDK (NCS)で Mbed TLS を使用することができます。ただし、いくつかの注意点があります:
いくつか出てきたのだが、その中で PSA Crypto API を使うことを強く推奨していた。
PSA Crypto API ってなんだろう?
PSA
PSA は “Platform Security Architecture” の略。
- PSA Certified APIs - The official place for the latest published documents of the PSA Certified APIs
- IoTデバイスを常にセキュアに:最新のPSA Certifiedファームウェア・アップデートAPIを公開 – Arm®
グループの発足目的は、アーキテクチャに依存しない、オープンなファームウェア・アップデートAPIを定義することでした。 本グループは、大手シリコンプロバイダー、大手ハイパースケーラー、OEMメーカー、ODMメーカー、開発者で構成されています。 そして、このAPIをPSA Certified APIとして公開するという決断に至りました。 PSA Certifiedは、最も急成長中かつ定評のあるセキュリティ・エコシステムの1つです。
ファームウェアアップデートに絞っているところが潔い。
Mbed TLS は暗号ライブラリなので Ask AI も PSA Crypto API と答えているが、他にもある。
- Crypto API
- Secure Storage API
- Attestation API
- Firmware Update API
- Status code API
- (Extension Crypto API)
API はソフトウェアの話だが “certified” とあるように認証機関がある。
認証してもらうことで他との差別化を図ることができるのかな。
例えばこちらは Cryto API だけでフィルタした場合だ。
認証にどのくらいの費用がかかるか分からないが、オープンソースの API をちょっと検証に出してみようというレベルの金額ではないだろう。
Nordic でフィルタすると 3つ出てきた。
nRF5340 を見ると「Fork of TF-M open-source version 1.6.0 and MCUboot 1.10.0-dev Public release tag for Nordic: nRF Connect SDK 2.2.x」と書いてあったが、ncs も含めて certified されているのかな?
Nordic のページにも項目はある。
こちらにはこう書いてあった。
In Zephyr, the PSA Crypto API is implemented using Mbed TLS, an open-source cryptographic library that provides the underlying cryptographic functions.
PSA の詳細に踏み込むつもりはないが、Nordic の製品が ncs 含めて認証済みで、
ncs は Zephyr をベースにしていて、
Zephyr が Mbed TLS を使っているなら、
Mbed TLS は PSA Crypto API は certified 相当といっても過言ではないのでは?
いや、さすがに過言かもしれんな。
libwally-core は PSA Crypto API を使うようになってるのか?
Mbed TLS は PSA Crypto API をサポートしていることは分かった。
そういえば Mbed TLS の ML で比較的最近 PSA なんとかの連絡が回ってきていた(2024年の12月)。
Mbed TLS は Mbed-TLS/TF-PSA-Crypto に依存しているそうだ。
統合されるとかではなく、それぞれ存在が必要という話をしているのかな?
libwally-core が Mbed TLS も使えるようになっていたとして、それは PSA Crypto API を使っているのだろうか?
「これは PSA の APIだ」というのを確認しないと不安だ。
ハッシュ関数はどうだ?
・・・ダメだ。
“psa” で何も出てこないレベルだ。
シグネイチャだけ合っていれば名前は何でもよいというタイプかも思ったが、psa_status_t
はごまかせまい。
それに Mbed TLS ではちゃんとその名前の API がある。
OpenSSL や libtomcrypt でも “PSA” で何も出てこないことを考えると、 IoT のファームウェアアップデート向けなのでターゲットにしていないライブラリたちにとっては気にもしていないのだろう。
そりゃそうか、という気持ちになった。
おわりに
いまの libwally-core は Mbed TLS を使ってのビルドはできそうだけど PSA Cryotp API は使っていなさそうということがわかった。
私が組み込みの仕事をせずになるべく現状を維持したいと思っているので、そういうのを勝手に課題にしてやってみるとよいかもしれん。
まあ、PSA Crypto API も内部では Mbed TLS ネイティブの API を呼び出しているだろうから動くとは思うのだが、 nRF の機能を呼び出して高速化だか CPU の負担減少だかをしているかもしれないからね。