it-swarm.com.de

Welcher Verschlüsselungsalgorithmus wird in passwortgeschützten * .pfx / PKCS 12-Zertifikaten verwendet?

Wie der Titel schon sagt, kann ich keine Ressourcen finden, für die der Verschlüsselungsalgorithmus in passwortgeschützten * .pfx/PKCS 12-Zertifikaten verwendet wird.

13
architekt

Die Antwort von Mike Ounsworth ist richtig, aber unvollständig. PKCS # 12 gibt ein Containerformat an, gibt aber auch einige eigene Algorithmen an:

Das in PKCS # 5 definierte PBES1-Verschlüsselungsschema bietet eine Reihe von Algorithmuskennungen zum Ableiten von Schlüsseln und IVs. Hier geben wir einige weitere an, die alle das in den Anhängen B.2 und B.3 beschriebene Verfahren verwenden, um Schlüssel (und gegebenenfalls IVs) zu erstellen. Wie aus ihren Namen hervorgeht, verwenden alle unten aufgeführten Objektkennungen die Hash-Funktion 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}

Und wenn Sie aus dem obigen Zitat ersehen, wird PKCS # 5 für die Algorithmen erwähnt. PKCS # 5 spezifiziert zwei Arten von Algorithmen: PBES1 und PBES2.

Die älteren PBES1 Algorithmen sind nur eine Liste von Algorithmusgruppen:

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 ermöglicht es Ihnen, die Verschlüsselungs- und PRF Algorithmen separat zu mischen und anzupassen (im Gegensatz zu vordefinierten Algorithmensätzen). Ich werde hier nur den relevanten Teil aus dem Inhaltsverzeichnis auflisten, damit Sie sich ein Bild machen können:

     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

Zurück zu PKCS # 12 wird außerdem MAC-Algorithmen für die gesamte Datei angegeben (nicht für einzelne Einträge):

In diesem Dokument wird ein bestimmter MAC-Typ namens HMAC [11] [20] verwendet, der aus einer Vielzahl von Hash-Funktionen erstellt werden kann. Beachten Sie, dass die Spezifikationen in [20] und [11] etwas von den Spezifikationen in [9] abweichen. Die Hash-Funktion, auf der HMAC basiert, wird in den MacData identifiziert, die den MAC enthalten. Für diese Version dieses Standards kann die Hash-Funktion eine der folgenden sein: SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 oder SHA-512/256 [ 10].

Die gleichen MAC-Algorithmen sind auch angegeben in PKCS # 5:

     B.3.  Message Authentication Schemes  . . . . . . . . . . . . .  33
       B.3.1.  HMAC-SHA-1  . . . . . . . . . . . . . . . . . . . . .  33
       B.3.2.  HMAC-SHA-2  . . . . . . . . . . . . . . . . . . . . .  33

Schließlich können Sie, wie in der Antwort von Mike Ounsworth angegeben, einen beliebigen Algorithmus auswählen, auch wenn dieser nicht in PKCS # 12 oder PKCS # 5 enthalten ist. Es muss jedoch ein OID für die Verwendung im haben) ASN.1 Darstellung der p12-Datei.

6
imgx64

Wenn Sie eine bestimmte PFX-Datei haben, die Sie überprüfen möchten, können Sie mithilfe von openssl feststellen, welche Verschlüsselungsmethoden verwendet wurden:

openssl pkcs12 -info -in cert.pfx -noout

Dies könnte Ihnen geben:

PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048

Dies setzt voraus, dass Sie das Kennwort der PFX-Datei kennen. Wenn Sie das Passwort nicht kennen, können Sie die äußerste Verschlüsselungsmethode immer noch finden, indem Sie:

openssl pkcs12 -info -in cert.pfx -nomacver -noout -passin pass:unknown

Dies ergibt zum Beispiel:

PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048

Diese bestimmte Zertifikatdatei wurde von openssl mit Standardparametern generiert und sieht folgendermaßen aus:

  • Eine äußere Verschlüsselungsschicht unter Verwendung von 40-Bit-RC2 mit SHA-1. Die äußere Verschlüsselungsschicht enthält das Zertifikat.
  • Eine innere Verschlüsselungsschicht unter Verwendung von 3DES mit SHA-1. Die innere Verschlüsselungsschicht enthält den privaten Schlüssel.

Ich denke, dies ist unsicher, da ein Angreifer die äußerste Verschlüsselung mit einer einfachen Brute Force (40-Bit-Verschlüsselung plus RC2 weist verschiedene Schwachstellen auf) aufheben und dann dasselbe Kennwort auf der inneren Verschlüsselungsschicht verwenden kann. Dies erfordert jedoch wahrscheinlich zusätzliche Untersuchungen.

8
Martin Randall

Alle Spezifikationen für das PKCS # 12-Format sind in RFC7292 definiert.

Die kurze Zusammenfassung ist, dass eine .p12 - Datei (und ich nehme auch das ältere PFX - Format von Microsoft an, aber ich habe noch nie damit gearbeitet) nur ein Containerformat ist, das die Struktur dieser Datei angibt. sagt aber nichts darüber aus, welche Art von Daten darin eingehen sollen.

Um eine sehr schlechte Analogie zu verwenden, gibt die Spezifikation für das Microsoft Excel-Format .xlsx Die Struktur einer Excel-Sicherungsdatei an, sagt jedoch nichts darüber aus, welche Daten oder Formeln sie enthalten darf. Dies wird durch die von Ihnen ausgeführte Excel-Version gesteuert.


Wenn Sie ein .p12 In einem Hex-Editor öffnen würden, würden Sie feststellen, dass eines der Felder in der Kopfzeile AlgorithmIdentifier: _____ Ist, in dem das Programm, das die .p12 Erstellt hat, A aufzeichnet ) welcher Verschlüsselungsalgorithmus zum Verschlüsseln der Daten verwendet wurde und B) welcher Hash-Algorithmus verwendet wurde, um das Passwort in einen Schlüssel umzuwandeln. Soweit ich weiß, gibt es keine endgültige Liste dessen, was hier erlaubt ist; Das Programm, das .p12 erstellt, kann jedes gewünschte AlgorithmIdentifier verwenden, einschließlich eines.

Wenn ich beispielsweise Software zum Lesen und Schreiben passwortgeschützter .p12 - Dateien schreiben würde, könnte ich AlgorithmIdentifier: AES256WithPBKDF2 Festlegen, und das wäre in Ordnung. Ich könnte aber auch AlgorithmIdentifier: MikesCipherWithCatDoodles Setzen, und solange die Software am anderen Ende weiß, was damit zu tun ist, ist es immer noch in Ordnung.


TL; DR: Das PKCS # 12-Format gibt nur die Struktur der Datei an, es wird nicht aufgeführt, welche Algorithmen zulässig sind, daher wird der tatsächlich verwendete Verschlüsselungsalgorithmus verwendet hängt davon ab, mit welcher Software die Datei .p12 erstellt wurde.

Wenn Sie wissen möchten, welche Algorithmen zum Schutz Ihrer .p12 - Dateien verwendet werden, lesen Sie die Dokumentation zu der Software, mit der Sie sie lesen/schreiben.

7
Mike Ounsworth

Da dies der Vollständigkeit halber nicht erforderlich war: OpenSSL kann eine PKCS12-Datei in mehreren Schritten analysieren, um die Informationen zu den verwendeten Algorithmen ohne Kennwort zu finden. Als Beispiel:

$ 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

Vergleicht man dies mit dem ASN.1 für das äußere PFX in PKCS12, Sek. 4 und 4.1 , so sieht man, dass das 'authSafe' im Wert des OCTET STRING-Elements am Offset 26 mit der Header-Länge (hl) 4 codiert ist Geben 30. Ignorieren Sie den (PB) MAC und sehen Sie sich das an:

$ 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)

wir sehen zwei ContentInfos - eine mit Offset 4 in authSafe (34 in der Datei), die mit pbeWithSHA1And40BitRC2-CBC und den gezeigten Salt- und 2048-Iterationen passwortverschlüsselt ist, und eine mit Offset 679 (709), die auf dieser Ebene nicht verschlüsselt ist . Wir müssten den ersten entschlüsseln, um seinen Typ endgültig zu bestimmen, aber ich weiß zufällig, dass pbe-RC2-40 immer für Zertifikatsäcke verwendet wird, und es hat zufällig die richtige Größe für mein (Beispiel-) Zertifikat. Für den zweiten können wir seinen Inhaltsteil bei 702 (732) auf einer anderen Ebene dekodieren, um 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

was wir sehen können, ist ein pkcs8ShroudedKeyBag, der wiederum ein EncryptedPrivateKeyInfo von PKCS8 ist und den mit pbeWithSHA1And3-KeyTripleDES-CBC verschlüsselten privaten Schlüssel und das angezeigte Salt und 2048 Iterationen sowie einen PKCS12Attribute enthält.

2

Wie bereits erwähnt,

das PKCS # 12-Format gibt nur die Struktur der Datei an

Daher kann es standardmäßig mit einem der folgenden Algorithmen verschlüsselt werden:

  • 128 Bit RC4 mit SHA1
  • 40 Bit RC4 mit SHA1
  • 3 Schlüssel 3DES mit SHA1 (168 Bit)
  • 2 Schlüssel 3DES mit SHA1 (112 Bit)
  • 128 Bit RC2 mit SHA1
  • 40 Bit RC2 mit SHA1

Wie Mike Ounsworth bereits erwähnt hat, kann es sich jedoch auch um einen beliebigen benutzerdefinierten Algorithmus handeln.

1