Verständnisfrage zu GnuPG, Iterated and Salted S2K

09/04/2016 - 17:28 von vevi_91 | Report spam
Ich habe bereits einige Treffer einer Suche ausgewertet, aber so richtig schlau bin ich bis dato nicht geworden. Wie funktioniert in GnuPG 2.0.x eigentlich das sog. "Passwort Mangling"?

Also beim Speichern des erzeugten privaten Schlüssels muss der Benutzer ein Passwort eingeben (Beispiel für ein denkbar schlechtes "abcd1234").

Wenn ich jetzt die Option --s2k-mode = 3 verwende, was passiert dann genau?
Ich nehme an, GPG erzeugt eine zufàllige 8-Bit-Folge und stellt diese dem Passwort "abcd1234" voran. Die so erhaltene Kombination (Konkatenation) wird an die verwendete Hashfunktion übergeben und daraus ein Hashwert berechnet.

Was passiert nun mit diesem Hashwert? Ist er bereits der Session Key, mit dem der private Schlüssel verschlüsselt wird?
Was genau passiert in einer Iteration?

Ich würde mich über eine Erklàrung dieser Prozedur sehr freuen. Leider verstehe ich die Ausführungen in RFC 4880 (http://tools.ietf.org/html/rfc4880#section-3.7.1.3) nicht wirklich (die sind nat. sehr technisch), und in den deutschen und englischen GnuPG-Mailinglisten habe ich auch keine Information gefunden, die die Sache für mich klarer machen. (Code kann ich leider keinen lesen.)

Falls die Beantwortung zu umstàndlich ist, würde ich mich auf aufschlussreich Links freuen.

Gruß Vevi
 

Lesen sie die antworten

#1 Beloumi
10/04/2016 - 10:35 | Warnen spam
Am 09.04.2016 um 17:28 schrieb vevi_91:
Ich habe bereits einige Treffer einer Suche ausgewertet, aber so richtig schlau bin ich bis dato nicht geworden. Wie funktioniert in GnuPG 2.0.x eigentlich das sog. "Passwort Mangling"?


Wenn du unter Schlüsselableitungsfunktion oder password-based key
derivation suchst, findest du wahrscheinlich mehr dazu.

Also beim Speichern des erzeugten privaten Schlüssels muss der Benutzer ein Passwort eingeben (Beispiel für ein denkbar schlechtes "abcd1234").

Wenn ich jetzt die Option --s2k-mode = 3 verwende, was passiert dann genau?
Ich nehme an, GPG erzeugt eine zufàllige 8-Bit-Folge und stellt diese dem Passwort "abcd1234" voran. Die so erhaltene Kombination (Konkatenation) wird an die verwendete Hashfunktion übergeben und daraus ein Hashwert berechnet.

Was passiert nun mit diesem Hashwert? Ist er bereits der Session Key, mit dem der private Schlüssel verschlüsselt wird?


Das stimmt soweit. Und unter der Annahme, dass die Hashfunktion sicher
ist, wàre der Output im Prinzip schon als Schlüssel geeignet - sofern
der Output lang genug ist.

Was genau passiert in einer Iteration?



Eine Passwortverschlüsselung hat immer eine Schwachstelle: es lassen
sich viele Passwörter und Kombinationen durchprobieren
(Wörterbuchangriff oder dictionary attack). Damit lassen sich
erfahrungsgemàß etwa 2/3 der Passwörter knacken. Die Idee der
Iterationen ist, den Wörterbuchangriff kostspieliger zu machen. Der
Output wird einfach als Input für den nàchsten Hash verwendet und so
weiter. Der/die Angreifer*in muss dann für jedes Passwort nicht nur eine
Hashfunktion ausführen, sondern typischerweise 1000, d.h. der Aufwand
vertausendfacht sich, der/die User*in merkt dagegen kaum etwas davon,
weil nur ein Passwort getestet wird.
Diese Idee ist inzwischen veraltet, denn ein einfacher Iteration-Count
làsst sich durch spezielle, parallel betriebene Hardware einfach
kompensieren. Dieses Verfahren von GPG ist also eigentlich nicht mehr
empfehlenswert. Neuere Verfahren, für die das nicht gilt, findest du
unter Password Hashing Competition.
Gruß
Beloumi

Ähnliche fragen