1024ビットのRSA公開鍵を1つRAMカタログにインポートして鍵インポートサービスを使用する方法を理解しようとしていますが、サーバーからHSE_SRV_RSP_NOT_ALLOWEDという応答が返されます。
私のテストアプリケーションは、RAMキーカタログを次のようにフォーマットします。
{
{
muMask = HSE_MU0_MASK | HSE_MU1_MASK,
groupOwner = HSE_KEY_OWNER_ANY,
keyType = HSE_KEY_TYPE_RSA_PUB,
numOfKeySlots = 2,
maxKeyBitLen = HSE_KEY1024_BITS,
},
{
muMask = HSE_MU0_MASK | HSE_MU1_MASK,
groupOwner = HSE_KEY_OWNER_ANY,
keyType = HSE_KEY_TYPE_ECC_PUB_EXT,
numOfKeySlots = 2,
maxKeyBitLen = HSE_KEY256_BITS,
},
{
muMask = 0,
groupOwner = 0,
keyType = 0,
numOfKeySlots = 0,
maxKeyBitLen = 0
},
}そして、サーバーからの応答としてHSE_SRV_RSP_OKを受け取りました。
次に、以下のキー情報を使用してRSAキーをインポートしようとします。
{
keyFlags = HSE_KF_USAGE_VERIFY,
keyBitLen = HSE_KEY1024_BITS,
keyCounter = 0x0,
smrFlags = 0x0,
keyType = HSE_KEY_TYPE_RSA_PUB,
specific = {
pubExponentSize = 4,
}
}私の要望は以下のとおりです。
{
targetKeyHandle = 0x20000,
pKeyInfo = 0x20401f74,
pKey = {
0x210034b4,
0x21003534,
0x0},
keyLen = {
0x80,
0x4,
0x0},
}.
HSE_RAM_PUB_KEY_IMPORT_POLICY_ATTR_ID を HSE_KM_POLICY_ALLOW_RAM_PUB_KEY_IMPORT に設定し、読み戻した結果も同じでした。
LC属性は0x04、HSEエラーフラグは0x0000、HSEステータスフラグは0x0B60です。ファームウェアバージョンは、0x0F SoC ID 0x0000 FWタイプ 0x02 メジャー 0x32 マイナー 0x00 パッチと読み取られます。
こんにちは、 @Emma_G-gbgさん
パラメータは正しく設定されています。特に問題は見当たりません。スーパーユーザー権限を持っている場合は、その属性を設定する必要すらありません。
昨日、これと非常によく似たことをテストしていたので、1024ビットのRSA公開鍵と4バイトの公開指数をインポートするようにコードを少し更新しました。見た目はこんな感じです。
RSA公開鍵をインポートする際には、pubExponentSizeを設定する必要がないことに注意してください。HSEはこのパラメータを無視します。代わりにkeyLen[1]を使用します。
パラメータ pubExponentSize は、サービス HSE_SRV_ID_GET_KEY_INFO によって keyInfo を読み取る際に使用されます。そのキーのkeyInfoを読み取った結果は以下のとおりです。
それは単なるデータキャッシュの問題ではないでしょうか?データキャッシュを無効にして、違いが出るかどうか試していただけますか?
よろしくお願いいたします。
ルーカス
ありがとうございます。暗号鍵と認証鍵のハンドル情報の入力を忘れていました。確認していなかったので、HSE_INVALID_KEY_HANDLE はゼロになると思っていました。
現在は、キャッシュメモリ内の少なくとも一部の値を使用して動作しており、サービス呼び出しの前後にキャッシュメンテナンス操作が行われています。既存のプロジェクトにHSEサービスを追加しているため、キャッシュ構造を変更することはできませんが、共有メモリに実際に書き込まれていることを確認する限り、これまでのところすべて正常に動作しています。ただし、関連するメモリのキャッシュを無効にしてみましたが、違いはありませんでした。