2016-11-15 2 views
0

Ich lerne gerade Python und lerne über Verschlüsselungsmethoden in dieser Sprache. Dort fand ich die Funktion pbkdf2_hmac (Hash-Name, Passwort, Salz, Iterationen, Dklen = None) aus der hashlib-Bibliothek.Iteration in passwortbasierter Schlüsselableitungsfunktion 2

Der Parameter "Iterationen" funktioniert jedoch nicht so, wie ich es erwarte. Wie der folgende einfache Code zeigt, wenn ich versuche, die Funktion zweimal mit einer Iteration aufzurufen, bekomme ich eine andere Antwort, als wenn ich sie einmal mit zwei Iterationen anrufe. Da Hashing-Funktionen deterministisch sind, sollten beide Methoden das gleiche Ergebnis liefern.

import hashlib 
a=hashlib.pbkdf2_hmac("sha256",b"hallo",b"salt",1) 
b=hashlib.pbkdf2_hmac("sha256",a,b"salt",1) 
c=hashlib.pbkdf2_hmac("sha256",b"hallo",b"salt",2) 
print(b) 
print(c) 

Kann mir jemand sagen, was schief gelaufen ist?

Antwort

1

Die zweite Iteration von PBKDF2 ist nicht nur PBKDF2 (die erste Iteration).

eine vereinfachte Erklärung ist:

  • 1 Iteration: HMAC(password, salt || 00000001)
  • 2 Iterationen: HMAC(password, HMAC(password, salt || 00000001))
  • PBKDF2 (PBKDF2): HMAC(HMAC(password, salt || 00000001), salt || 00000001)

Man beachte, dass die "2 Iterationen" und " PBKDF2 (PBKDF2) "Versionen verwenden unterschiedliche HMAC-Schlüssel für die zweite Berechnung, weshalb sie unterschiedliche Ergebnisse liefern.

Soweit "Hash-Funktionen sind deterministisch": Sie sind. Wenn Sie sie mit den gleichen Eingängen aufrufen, geben sie die gleichen Ausgänge. Sie gaben ihnen verschiedene Eingaben, weil sie falsch verstanden haben, wie der zugrundeliegende Algorithmus funktioniert.

Verwandte Themen