web-dev-qa-db-ja.com

PKCS#12はどのパスワードベースのキー派生を使用しますか?

Rfc 7292をすべて読んだことを書き留めておきます。

Pkcs#12 pfxファイルの暗号化された秘密鍵を復号化しようとしています。

秘密鍵は、pkcs#8シュラウド付きの鍵バッグに入れられています。

OIDオクテット文字列として表される前の暗号化された秘密鍵は

pbeWithSHAAnd3-KeyTripleDES-CBC  OBJECT IDENTIFIER ::= {pkcs-12PbeIds 3}

秘密鍵はトリプルDESで暗号化されていると想定します

CBC、およびパスワード導出方法はpbeです。

RFC 7292では、セクションB.2およびB.3の「一般的な方法」、および付録Cについて説明しています。

はっきりとメモ

here, we specify a few more, all of which use the procedure detailed in Appendices B.2 and B.3 to construct keys (and IVs, where needed).  

ただし、付録Bの最初の段落の説明には、

 Specifically, PBES2 should be used as encryption scheme, with PBKDF2
   as the key derivation function.

したがって、このpfxファイルでは、秘密鍵は、説明されている一般的な方法から導出された対称鍵で暗号化されていますか、それとも、pbkdf2によって導出された対称鍵によって暗号化されている可能性が高いですか?

また、PKCS#5は、IVがPBKDF2からどのように派生するかについては説明していません。仕様はどこにありますか?

1
user45979

RFC7272付録Bの最初の段落。元の[RSA PKCS#12v1.1]のsecond段落です( http://www.emclink.net/ collat​​eral/white-papers/h11301-pkcs-12v1-1-personalinformation-exchange-syntax-wp.pdf )、PKCS#のPBES2/PBKDF2を推奨 5v2 +を使用しますが、これは「すべきである」(RFC2119の大文字でさえもすべきではない)だけであり、付録BおよびCのスキーム(すべて元のBで)できます使用され、使用されます特定のOIDあなたが引用している).

公開されたRFC7292のB.2ステップ6 Aには2つのタイプミスがあることに注意してください。これをrfc-editorに報告したところ、エラータが修正されます。それまでは、元のv1.1(またはv1)を使用する必要があります。または、OpenSSL(またはそのフォーク)、NSS、Javaなどの機能し利用可能な実装のコード。

RFC7292 C(またはPKCS#12v1 + B.4)は言う

PKCS#5で定義されているPBES1暗号化スキームは、鍵とIVを導出するためのいくつかのアルゴリズム識別子を提供します。ここでは、さらにいくつかを指定します。これらはすべて、付録B.2およびB.3に詳述されている手順を使用してキー(および必要に応じてIV)を構築します。

前述のように、これらのスキームは、B.3で説明され、B.2で参照される異なる「ダイバーシファイア」入力を使用して、必要に応じてキーとIV(3TDES-CBCの場合)の両方を導出します。

対照的に、PKCS#5 PBES1は単一のPBKDF1操作からキーとIVの両方を導出しますが、PBES2はPBKDF2を使用してonlyキーを導出します。 IVがある場合は個別に選択され、PBES2のAlgorithmIdentifierのパラメーターフィールドに含まれます。

1