タイトルのとおり、パスワード保護された* .pfx/PKCS 12証明書で暗号化アルゴリズムが使用されているリソースは見つかりません。
Mike Ounsworthの答えは正しいが不完全です。 PKCS#12 はコンテナー形式を指定しますが、独自のアルゴリズムのセットもいくつか指定します。
PKCS#5で定義されているPBES1暗号化スキームは、鍵とIVを導出するための多数のアルゴリズム識別子を提供します。ここでは、さらにいくつかを指定します。これらはすべて、付録B.2およびB.3に詳述されている手順を使用して、キー(および必要に応じてIV)を構築します。名前からわかるように、以下のすべてのオブジェクト識別子はハッシュ関数SHA-1を使用しています。pkcs-12PbeIds OBJECT IDENTIFIER ::= {pkcs-12 1} pbeWithSHAAnd128BitRC4 OBJECT IDENTIFIER ::= {pkcs-12PbeIds 1} pbeWithSHAAnd40BitRC4 OBJECT IDENTIFIER ::= {pkcs-12PbeIds 2} pbeWithSHAAnd3-KeyTripleDES-CBC OBJECT IDENTIFIER ::= {pkcs-12PbeIds 3} pbeWithSHAAnd2-KeyTripleDES-CBC OBJECT IDENTIFIER ::= {pkcs-12PbeIds 4} pbeWithSHAAnd128BitRC2-CBC OBJECT IDENTIFIER ::= {pkcs-12PbeIds 5} pbewithSHAAnd40BitRC2-CBC OBJECT IDENTIFIER ::= {pkcs-12PbeIds 6}
また、上記の引用に気付いた場合は、アルゴリズムの PKCS#5 について言及しています。 PKCS#5は、PBES1とPBES2の2種類のアルゴリズムを指定します。
古い PBES1 アルゴリズムは、アルゴリズムのセットの単なるリストです。
pbeWithMD2AndDES-CBC OBJECT IDENTIFIER ::= {pkcs-5 1}
pbeWithMD2AndRC2-CBC OBJECT IDENTIFIER ::= {pkcs-5 4}
pbeWithMD5AndDES-CBC OBJECT IDENTIFIER ::= {pkcs-5 3}
pbeWithMD5AndRC2-CBC OBJECT IDENTIFIER ::= {pkcs-5 6}
pbeWithSHA1AndDES-CBC OBJECT IDENTIFIER ::= {pkcs-5 10}
pbeWithSHA1AndRC2-CBC OBJECT IDENTIFIER ::= {pkcs-5 11}
PBES2 を使用すると、暗号化と [〜#〜] prf [〜#〜] アルゴリズムを別々に組み合わせることができます(反対に定義済みのアルゴリズムのセットに)。ここでは、目次から関連する部分のみをリストして、アイデアを理解できるようにします。
B.1. Pseudorandom Functions . . . . . . . . . . . . . . . . . 28
B.1.1. HMAC-SHA-1 . . . . . . . . . . . . . . . . . . . . . 28
B.1.2. HMAC-SHA-2 . . . . . . . . . . . . . . . . . . . . . 29
B.2. Encryption Schemes . . . . . . . . . . . . . . . . . . . 29
B.2.1. DES-CBC-Pad . . . . . . . . . . . . . . . . . . . . . 30
B.2.2. DES-EDE3-CBC-Pad . . . . . . . . . . . . . . . . . . 30
B.2.3. RC2-CBC-Pad . . . . . . . . . . . . . . . . . . . . . 30
B.2.4. RC5-CBC-Pad . . . . . . . . . . . . . . . . . . . . . 31
B.2.5. AES-CBC-Pad . . . . . . . . . . . . . . . . . . . . . 32
PKCS#12に戻り、(個々のエントリではなく)ファイル全体の MACアルゴリズム も指定します。
このドキュメントでは、HMAC [11] [20]と呼ばれる特定のタイプのMACを使用しています。これは、さまざまなハッシュ関数のいずれかから構築できます。 [20]と[11]の仕様は[9]の仕様とは多少異なることに注意してください。 HMACが基づいているハッシュ関数は、MACを保持するMacDataで識別されます。この規格のこのバージョンでは、ハッシュ関数は次のいずれかになります。SHA-1、SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、またはSHA-512/256 [ 10]。
同じMACアルゴリズムが PKCS#5でも指定されています :
B.3. Message Authentication Schemes . . . . . . . . . . . . . 33
B.3.1. HMAC-SHA-1 . . . . . . . . . . . . . . . . . . . . . 33
B.3.2. HMAC-SHA-2 . . . . . . . . . . . . . . . . . . . . . 33
最後に、Mike Ounsworthの回答にあるように、PKCS#12またはPKCS#5にない場合でも、必要なアルゴリズムを選択できます。ただし、[〜#〜] oid [〜#〜]が必要です ASN.1で使用するには p12ファイルの表現。
確認したい特定の.pfxファイルがある場合は、opensslを使用して、どの暗号化方式が使用されたかを確認できます。
openssl pkcs12 -info -in cert.pfx -noout
これはあなたに与えるかもしれません:
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048
これには、.pfxファイルのパスワードを知っている必要があります。パスワードがわからない場合でも、次の方法で最も外側の暗号化方法を見つけることができます。
openssl pkcs12 -info -in cert.pfx -nomacver -noout -passin pass:unknown
これにより、たとえば次のようになります。
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
この特定の証明書ファイルは、デフォルトのパラメーターを使用してopensslによって生成されたもので、次のようになっています。
攻撃者は簡単なブルートフォース(40ビット暗号化とRC2にはさまざまな脆弱性があります)で最も外側の暗号化を解読し、内側の暗号化レイヤーで同じパスワードを使用できるため、これは安全ではないと思います。ただし、これにはおそらく追加の調査が必要です。
PKCS#12形式のすべての仕様は RFC7292 で定義されています。
要約すると、.p12
ファイル(およびMicrosoftの以前のPFX
形式も想定していますが、これまで使用したことはありません)は、このファイルの構造を指定するコンテナー形式にすぎませんが、どんな種類のデータを入れるべきかについては何も言わない。
非常に悪いアナロジーを使用すると、Microsoft Excelの.xlsx
形式の仕様はExcel保存ファイルの構造を指定しますが、そのファイルに含めることが許可されているデータや数式については何も通知しません。これは、実行しているExcelのバージョンによって制御されます。
16進エディタで.p12
をポップオープンすると、ヘッダーのフィールドの1つがAlgorithmIdentifier: _____
であることがわかります。ここで、.p12
レコードを作成したプログラムA)暗号化データの暗号化にはアルゴリズムが使用され、B)パスワードをキーに変換するために使用されたハッシュアルゴリズム。私の知る限り、ここで許可されていることの明確なリストはありません。 .p12
を作成するプログラムは、AlgorithmIdentifier
を作成することも含め、必要なものをすべて使用できます。
たとえば、パスワードで保護された.p12
ファイルを読み書きするソフトウェアを作成している場合、AlgorithmIdentifier: AES256WithPBKDF2
を設定すれば問題ありません。しかし、AlgorithmIdentifier: MikesCipherWithCatDoodles
を設定することもできます。相手側のソフトウェアがそれをどうするかを知っている限り、それでも問題ありません。
TL; DR:PKCS#12形式は、ファイルの構造のみを指定し、どのアルゴリズムが有効であるかをリストしていないため、実際の暗号化アルゴリズムが使用されます.p12
ファイルの作成に使用されたソフトウェアによって異なります。
.p12
ファイルの保護に使用されているアルゴリズムを知りたい場合は、それらの読み取り/書き込みに使用しているソフトウェアのドキュメントを参照してください。
これは壊されたため、完全を期すために:OpenSSLは、PKCS12ファイルをいくつかのステップで解析して、パスワードなしで使用されているアルゴリズムに関する情報を見つけることができます。例として:
$ openssl req -newkey rsa:1024 -nodes -keyout se152866.key -x509 -subj /CN=example.net -out se152866.crt
$ openssl pkcs12 -export -in se152866.crt -inkey se152866.key -passout pass:sekrit -out se152866.p12
$ openssl asn1parse -inform der -in se152866.p12 -i
0:d=0 hl=4 l=1521 cons: SEQUENCE
4:d=1 hl=2 l= 1 prim: INTEGER :03
7:d=1 hl=4 l=1463 cons: SEQUENCE
11:d=2 hl=2 l= 9 prim: OBJECT :pkcs7-data
22:d=2 hl=4 l=1448 cons: cont [ 0 ]
26:d=3 hl=4 l=1444 prim: OCTET STRING [HEX DUMP]:(long,omitted)
1474:d=1 hl=2 l= 49 cons: SEQUENCE
1476:d=2 hl=2 l= 33 cons: SEQUENCE
1478:d=3 hl=2 l= 9 cons: SEQUENCE
1480:d=4 hl=2 l= 5 prim: OBJECT :sha1
1487:d=4 hl=2 l= 0 prim: NULL
1489:d=3 hl=2 l= 20 prim: OCTET STRING [HEX DUMP]:8B3C863D73B51E41CADC9272E1696740B885E69E
1511:d=2 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:5992FE887D9EA8A3
1521:d=2 hl=2 l= 2 prim: INTEGER :0800
これを外部PFXのASN.1と比較すると PKCS12 sec 4 and 4.1 であり、 'authSafe'はヘッダー長(hl)4のオフセット26にあるOCTET STRINGアイテムの値にエンコードされていることがわかります。 (PB)MACを無視してそれを見て、30を与えます。
$ openssl asn1parse -inform der -in se152866.p12 -i -strparse 30
0:d=0 hl=4 l=1440 cons: SEQUENCE
4:d=1 hl=4 l= 671 cons: SEQUENCE
8:d=2 hl=2 l= 9 prim: OBJECT :pkcs7-encryptedData
19:d=2 hl=4 l= 656 cons: cont [ 0 ]
23:d=3 hl=4 l= 652 cons: SEQUENCE
27:d=4 hl=2 l= 1 prim: INTEGER :00
30:d=4 hl=4 l= 645 cons: SEQUENCE
34:d=5 hl=2 l= 9 prim: OBJECT :pkcs7-data
45:d=5 hl=2 l= 28 cons: SEQUENCE
47:d=6 hl=2 l= 10 prim: OBJECT :pbeWithSHA1And40BitRC2-CBC
59:d=6 hl=2 l= 14 cons: SEQUENCE
61:d=7 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:2333FBA5F3B3DCC8
71:d=7 hl=2 l= 2 prim: INTEGER :0800
75:d=5 hl=4 l= 600 prim: cont [ 0 ]
679:d=1 hl=4 l= 761 cons: SEQUENCE
683:d=2 hl=2 l= 9 prim: OBJECT :pkcs7-data
694:d=2 hl=4 l= 746 cons: cont [ 0 ]
698:d=3 hl=4 l= 742 prim: OCTET STRING [HEX DUMP]:(long,omitted)
2つのContentInfoが表示されます。1つは、pbeWithSHA1And40BitRC2-CBCおよび表示されたソルトと2048回の反復でパスワード暗号化されたauthSafe内のオフセット4(ファイル内の34)と、このレベルで暗号化されていないオフセット679(709)です。 。タイプを明確に決定するには、最初のものを復号化する必要がありますが、証明書バッグには常にpbe-RC2-40が使用されていることに加えて、私の(例)証明書の正しいサイズであることがわかっています。 2番目の例では、コンテンツ部分を702(732)別のレベルでデコードして、 SEQUENCE of SafeBag を取得できます。
$ openssl asn1parse -inform der -in se152866.p12 -i -strparse 732
0:d=0 hl=4 l= 738 cons: SEQUENCE
4:d=1 hl=4 l= 734 cons: SEQUENCE
8:d=2 hl=2 l= 11 prim: OBJECT :pkcs8ShroudedKeyBag
21:d=2 hl=4 l= 678 cons: cont [ 0 ]
25:d=3 hl=4 l= 674 cons: SEQUENCE
29:d=4 hl=2 l= 28 cons: SEQUENCE
31:d=5 hl=2 l= 10 prim: OBJECT :pbeWithSHA1And3-KeyTripleDES-CBC
43:d=5 hl=2 l= 14 cons: SEQUENCE
45:d=6 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:F75E440A3D7429C7
55:d=6 hl=2 l= 2 prim: INTEGER :0800
59:d=4 hl=4 l= 640 prim: OCTET STRING [HEX DUMP]:(long,omitted)
703:d=2 hl=2 l= 37 cons: SET
705:d=3 hl=2 l= 35 cons: SEQUENCE
707:d=4 hl=2 l= 9 prim: OBJECT :localKeyID
718:d=4 hl=2 l= 22 cons: SET
720:d=5 hl=2 l= 20 prim: OCTET STRING [HEX DUMP]:644ED94520BF6A45B81C70F73AE2143DE123A620
確認できるのはpkcs8ShroudedKeyBagで、これは EncryptedPrivateKeyInfo from PKCS8 であり、pbeWithSHA1And3-KeyTripleDES-CBCで暗号化された秘密鍵と、表示されたソルトおよび2048回の反復に加えて、1つのPKCS12Attribute、localKeyIDを含みます。