web-dev-qa-db-ja.com

パスワードで保護された* .pfx / PKCS 12証明書で使用されている暗号化アルゴリズムはどれですか。

タイトルのとおり、パスワード保護された* .pfx/PKCS 12証明書で暗号化アルゴリズムが使用されているリソースは見つかりません。

13
architekt

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ファイルの表現。

6
imgx64

確認したい特定の.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によって生成されたもので、次のようになっています。

  • SHA-1を備えた40ビットRC2を使用する外部暗号化レイヤー。外側の暗号化層には証明書が含まれています。
  • 3DESとSHA-1を使用する内部暗号化レイヤー。内部の暗号化層には秘密鍵が含まれています。

攻撃者は簡単なブルートフォース(40ビット暗号化とRC2にはさまざまな脆弱性があります)で最も外側の暗号化を解読し、内側の暗号化レイヤーで同じパスワードを使用できるため、これは安全ではないと思います。ただし、これにはおそらく追加の調査が必要です。

8
Martin Randall

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ファイルの保護に使用されているアルゴリズムを知りたい場合は、それらの読み取り/書き込みに使用しているソフトウェアのドキュメントを参照してください。

7
Mike Ounsworth

これは壊されたため、完全を期すために: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を含みます。

2

前に述べたように、

pKCS#12形式は、ファイルの構造のみを指定します

したがって、標準では、次のアルゴリズムのいずれかで暗号化される可能性があります。

  • 128ビット RC4 with SHA1
  • SHA1を備えた40ビットRC4
  • SHA1(168ビット)の3つのキー3DES
  • 2キー3DES、SHA1(112ビット)
  • 128ビット RC2 with SHA1
  • SHA1を備えた40ビットRC2

ただし、Mike Ounsworthが前述したように、カスタムアルゴリズムでもかまいません。

1