こんにちは、NXPチームの皆様、
私たちは、i.MX8DXL CAAMにおけるECDSA P-384ブラックキー/ブロブのサポートを評価しています。
外部から提供された平文のP-256秘密鍵から開始します。
結果:合格
結果:合格
外部から提供された平文のP-384秘密鍵(48バイト)から開始します。
結果:失敗
NXPのパッチに以下のコメントがあることに気づきました。
我々も同様の挙動を観察した。
KEYコマンドの代わりにLOADコマンドを使用することで、48バイトのP-384秘密鍵を含む、32バイトを超える鍵を扱うことができます。
何かアドバイスをいただければ幸いです。
ありがとうございます。よろしくお願いいたします。
ホジャメス。
当社のアプリケーションでは、COVER操作はECDSA秘密鍵だけでなく、一般的な機密データの保護にも利用されることがあります。したがって、32バイトを超えるペイロードサイズのサポートは重要な考慮事項です。
我々のテストに基づくと、LOADコマンドの回避策を用いることで、32バイトを超えるペイロードを処理できることがわかった。約80バイト以下のペイロードは正常に動作するようですが、それより大きいサイズでは動作が不安定になります。これらの観察結果が、実際のCAAMの制限を反映しているのか、それとも実装上の問題を反映しているのかを理解したいと考えています。
よろしくお願いします。
このCAAM機能をテストするための環境を構築する必要があります。結果が出次第、ご連絡いたします。
こんにちは、イーピンワンさん
ご返信ありがとうございます。
>>この部分で、どのようなCAAMエラーが発生していましたか?
>>エラーコードを教えてもらえますか?
ECDSA関連のすべての操作には、以下のコードパッチを使用しています。
" https://github.com/nxp-imx-support/imx_sec_apps/blob/master/caam-ecdsa-blackkey/patch/0001-linux-imx... "
署名検証のために caam_ecdsa_verify() を呼び出すとき、
'ECDSA_VERIFY_FAIL (0)' を返します。
このエラーは「P-384 (external plaintext private key)」の場合のみ発生します。
>> アプリケーションノート「CAAMセキュアキーを用いた公開鍵暗号のAN12838強化」では、ブラックキーを用いたECDSA署名のデモが説明されていますが、同様の実装でテストしていますか?
私たちの成功例については、はい、似ています。
しかし、失敗したケース『P-384(外部平文秘密鍵)』については、
少し違います。鍵は外部から来ています。
よろしくお願いいたします。
「プレーンテキストキー → カバー → 黒キーの塊」
黒い塊から黒い鍵を復元する
ECDSAの署名/確認
結果:失敗
この部分で、どのようなCAAMエラーが発生していましたか?エラーコードを教えてもらえますか?アプリケーションノート「CAAMセキュアキーを用いた公開鍵暗号のAN12838強化」では、ブラックキーを用いたECDSA署名のデモが説明されていますが、同様の実装でテストされていますか?ありがとう。
KEYコマンドの制限については、現在も調査中です。
失敗した場合、「KEY」コマンドと「FIFO STORE」コマンドを使って、平文の秘密鍵に基づいて黒鍵を生成していますか?失敗時に使われるCAAMの記述子(十六進形の単語)を捨てることは可能ですか?コマンドとパラメータを確認する方が簡単でしょう。ありがとう。
こんにちは、イーピンワンさん
>>失敗したCASEのために、
>>「KEY」コマンドと「FIFO STORE」コマンドを使っていますか?
>>平文の秘密鍵に基づいて黒鍵を生成するのですか?
いいえ、KEYコマンドではなくLOADコマンドを使用しています。
この場合、キーは48バイト(P384)です。
< https://github.com/nxp-imx-support/imx_sec_apps/blob/master/caam-ecdsa-blackkey/patch/0002-caam-blac... > に記載されているとおりです。
「KEYコマンドは32バイトに制限されているようだ。だからロードを使うべきだ
* コマンドは最大64バイトまで読み込める。
KEYコマンドで48バイトのキーを使用すると、DECOエラーが報告されます。
ジョブリングステータス: 0x40000106、
DECO、06h - 無効なKEYコマンド
そこで、上記のパッチコードと同じLOADコマンドを使うようにコードを変更しました。
ありがとうございます。よろしくお願いいたします。
ECC P-384キーはKEYコマンドでPKHA-Eメモリにロードでき、その後ECDSA署名や検証に使用できることを検証しました。
KEYコマンドで「クラス1」レジスタを使用しているかどうか確認してください。MX8DXLのクラス1キーレジスタは32バイトです。ですので、代わりにPKHA-Eメモリをご利用ください。
参考までに、CAAM 記述子を以下に示します。平文の秘密鍵をブラックキーに変換するには、CAAM コマンドは「KEY」+「FIFO STORE」です。
b0800005
02010030 // キー
60220030 ....0....t.0."` // FIFO SOTRE
質問に対する回答をご確認ください。
KEYコマンドはKEYレジスタへのデータロードに有効ですが、それぞれの最大サイズまでしかロードできません。したがって、クラス1キーレジスタ、クラス2キーレジスタ、PKHA EレジスタはすべてKEYコマンドでロード可能ですが、それぞれ異なるサイズを持ちます。一般的に、クラス2キーレジスタはクラス1キーレジスタよりも大きく(128バイト)、このプロセスでECCキー(1028バイトを超えない)の使用に代わることができます。より一般的には、KEYコマンドを使ってECCキーをPKHA Eに入れ、そこからブラックキーとして保存する方法もあります。
はい、ECDSAの署名業務では、署名にブラックキーを使用できます。
はい。 レジスタのサイズを超えてLOAD(またはSTORE)するとデッドスペースが発生し、デッドエリアへのLOADバイトは失われ、STOREバイトはゼロの値になります。MX8DXLのクラス1キーレジスタは32バイト(256ビット)で、AESのような対称暗号エンジンの鍵を処理するのに十分な大きさです。
はい。それをPKE(PKHA Eレジスタ)にロードし、クラス1キーの場合と同様にそこからFIFOストアを実行します(ただし、レジスタソースは別のものを使用します)。