皆さん、こんにちは
私は、PUF(Physically Unclonable Function)ハードウェアを使用して一部のカスタムユーザーキーを暗号化することを選択したクライアント用のセキュアブートを作成しています。
使用しているボードはNXP i.MX RT1172 (MIMXRT1172AVM8A)で、MCUXpresso IDE(v11.9.1 [Build 2170] [2024-04-19])とSegger J-Linkを使用してハードウェアと接続してデバッグしています。
MCUXpresso Secure Provisioning Tool を使用して PUF_ENABLE ビット ヒューズを書き込み、PUF 操作を有効にするようにしました。
私のカスタムブートプログラムでは、 PUF_Initを呼び出し、次にPUF_Enroll (これは、PUFアクティベーションコードがまだフラッシュメモリに保存されていないときに、ラインのプロダクションエンドで初めて行われます)、 PUF_Deinit + PUF_Init (登録後にPUFを「再起動」するため)、最後に PUF_Startを呼び出します。
上記のすべての呼び出しは 成功 ステータスで返されます。
この時点で (PUF が初期化されて開始された状態で)、 カスタマー キー (運用終了プロセス中にのみブート プログラムに渡されます) を保存したいと思います: PUF_SetUserKey を呼び出しますが、この呼び出し は失敗します。
PUFドライバー関数の呼び出しをたどったところ、 SET KEY操作 が許可されていないために失敗したことがわかりました。
/* check if SET KEY is allowed */
if (0x0u == (base->ALLOW & PUF_ALLOW_ALLOWSETKEY_MASK))
{
return kStatus_Fail;
}
それはどうしてですか。
PUF_SetUserKey関数を呼び出す前に、何か他のことをする必要がありますか?
あなたが提供してくれるどんな助けにも、事前に感謝します(ドキュメントの参照や詳細情報を見つけるためのリンクも含めて)。
よろしくお願いいたします
私は、愚かな問題のためにファイルが保存されず、最終的に関数 PUF_BlockSetKey() が呼び出されたことに気づきました。 PUF_SetUserKey
その後に呼び出されるのではなく、 もちろん、 PUF_SetUserKey の後に PUF_BlockSetKey() を呼び出すように要求することで問題を解決しました。
誰かが同様の問題を見つけた場合の将来の参照のために、この投稿を保持しています。
注: ENROLL 操作と SET KEY 操作をそれぞれブロックする 2 つの関数 (PUF_BlockEnroll() PUF_BlockSetKey()) は、PUF のメイン操作の後にのみ呼び出すようにしてください。