it-swarm-eu.dev

Sicherheit des passphrasengeschützten privaten Schlüssels

Wenn ein Angreifer einen privaten Schlüssel erhält, der ohne Passphrase erstellt wurde, erhält er offensichtlich Zugriff auf alles, was mit diesem Schlüssel geschützt ist. Wie sicher sind private Schlüssel eingerichtet mit einer Passphrase? Wie schwer ist es, den Schlüssel zu kompromittieren, wenn ein Angreifer einen durch Passphrasen geschützten Schlüssel stiehlt? Mit anderen Worten, ist ein privater Schlüssel mit einer guten Passphrase sicher, auch wenn ein Angreifer darauf zugreift?

45
jrdioko

Mit OpenSSL, OpenSSH und GPG/PGP ist der Wrapping-Algorithmus stark genug, dass Sie sich keine Sorgen machen müssen (und wenn Sie sich darum kümmern müssen, haben Sie größere Probleme, und dies ist die geringste Ihrer Sorgen). .

Wie jedes Passwort oder jede Passphrase hängt es von der Stärke der Passphrase ab. Eine 40-stellige Passphrase ist so schwer zu erzwingen wie ein 256-Bit-Schlüssel (da ASCII verwendet nur 7 Bit). Hier gelten die gleichen Regeln für sichere Passwörter:

  • Zufall ist besser
  • Länger ist stärker
24
bahamat

Sobald ein verschlüsselter Datenblock in den Händen eines Angreifers ist, ist er niemals für immer sicher - es ist eine Frage, wie lange und welche Mittel zur Verfügung stehen knacken.

Hier sind Dinge zu beachten:

  • Stärke des Wrapping-Algorithmus - Ich bin bereit, Bahamat über OpenSSL, OpenSSH und GPG/PGP zu glauben - dies sind ziemlich gut geprüfte Komponenten.

  • Größe des Schlüsselraums - d. h. - Größe und Komplexität des Passworts - es gelten die typischen Kosten für das Erraten von Brute Force. Zu beachten ist, dass einige Formen der Schlüsselspeicherung die Arten von Zeichen einschränken, die in einem Kennwort verwendet werden können. Beispielsweise hat JKS (der Java Key Store)) einige Sonderzeichen eliminiert und das Potenzial verringert Größe des Schlüsselraums Seien Sie auch vorsichtig bei Systemen, die die Schlüsselgröße auf eine bestimmte Anzahl von Zeichen zuschneiden.

  • Kosten des Versuchs Wie rechenintensiv ist der Versuch, den Schlüssel auszupacken? Das wird den Brute-Force-Versuch verlangsamen.

  • welcher Algorithmus? - hängt davon ab, wie die sichere Datei gespeichert ist - ist es offensichtlich, welcher Algorithmus für die Verschlüsselung verwendet wurde?

  • Gibt es Chiffretext zum Vergleichen? Woher weiß der Angreifer, dass er erfolgreich ist - was ist sein Testmechanismus? Eines der leistungsstärkeren Elemente beim Erfassen eines Schlüsselspeichers besteht darin, dass der Angreifer möglicherweise seine Versuche testen kann, ohne dass das System den Schlüssel speichert.

  • wie viele Ressourcen stehen dem Angreifer zur Verfügung? - Im Allgemeinen umfasst die Bedrohungsanalyse die Analyse der Ressourcen des Angreifers. Hat er 1 Computer? Eine Bank von Computern? Und das gesamte virale Netzwerk gestohlener CPU-Leistung zu seiner Verfügung? Kommt darauf an, ob es sich um das 13 Jahre alte Drehbuchkind nebenan oder um eine Schurkennation handelt.

  • wie lange dauert es, bis der Schlüssel geändert wird? & wie lange müssen die Daten geschützt bleiben? - wenn der Angreifer länger braucht, um den Kennwortspeicher zu knacken, als die Nützlichkeit der darin enthaltenen Daten das Geschäft, dann gilt das Geschäft als sicher genug

15
bethlakshmi

Nach Martin Kleppmann :

der Schutz des privaten Schlüssels [Standard OpenSSH] weist zwei Schwachstellen auf:

  • Der Digest-Algorithmus ist fest als MD5 codiert, was bedeutet, dass ohne Änderung des Formats kein Upgrade auf eine andere Hash-Funktion (z. B. SHA-1) möglich ist. Dies könnte ein Problem sein, wenn sich herausstellt, dass MD5 nicht gut genug ist.
  • Die Hash-Funktion wird nur einmal angewendet - es erfolgt keine Dehnung. Dies ist ein Problem, da MD5 und AES beide schnell zu berechnen sind und daher eine kurze Passphrase mit brutaler Gewalt leicht zu brechen ist.

Wenn Ihr privater SSH-Schlüssel jemals in die falschen Hände gerät [und wenn er mit den OpenSSH-Standardeinstellungen passphrasengeschützt war und] Ihre Passphrase ein Wörterbuchwort ist, kann er wahrscheinlich in Sekundenschnelle [entschlüsselt] werden. ... Aber es gibt gute Neuigkeiten: Sie können auf ein sichereres privates Schlüsselformat aktualisieren, und alles funktioniert weiterhin!

Anschließend erklärt er, wie "PKCS # 8" gemäß RFC 5208 verwendet wird, um einen sichereren, verschlüsselten privaten Schlüssel zu erhalten:

$ mv test_rsa_key test_rsa_key.old
$ openssl pkcs8 -topk8 -v2 des3 \
    -in test_rsa_key.old -passin 'pass:super secret passphrase' \
    -out test_rsa_key -passout 'pass:super secret passphrase'
7
sampablokuper

Die Verschlüsselung des privaten OpenSSH-Schlüssels ist anfällig?

Der Schutz eines privaten Schlüssels mit einer Passphrase muss sorgfältig erfolgen, wie dies normalerweise bei Kryptoangelegenheiten der Fall ist. Im Allgemeinen besteht der Ansatz darin, den privaten Schlüssel mit einem symmetrischen Algorithmus unter Verwendung eines Schlüssels zu verschlüsseln, der aus der Passphrase über eine Schlüsselableitungsfunktion abgeleitet wird. Ein klassisches Beispiel für eine geeignete Schlüsselableitungsfunktion ist PBKDF2 von RFC 2898 - PKCS # 5: Kennwortbasierte Kryptografiespezifikation Version 2. .

Laut Colin Percivals Verschlüsselungspräsentation , "OpenSSH verwendet MD5 als Schlüsselableitungsfunktion für Passphrasen für Schlüsseldateien". Aus dem Zusammenhang geht hervor, dass er sagt, dass sie keine Salze oder Iterationen verwenden, was beängstigend ist, wenn man bedenkt, wie schnell Brute-Forcing heutzutage ist. Es gibt einige verschiedene Formate, die OpenSSH zum Speichern privater Schlüssel verwendet. Daher möchte ich mehr Details und genau wissen, welche Versionen betroffen sind, aber das klingt weit entfernt von PBKDF2 oder den anderen iterierten, gesalzenen Techniken) das gibt es schon seit 1978 .

Ich sehe eine Referenz, die behauptet, dass PGP und GPG beim Schutz eines in einer Datei gespeicherten privaten Schlüssels Iterations-/Dehnungstechniken verwenden, aber die Details noch nicht kennen.

4
nealmcb