Seite 1 von 1
Frage zur hashlib
Verfasst: Mittwoch 31. August 2011, 18:44
von NorbertW
Hallo ich hätte eine Frage,
und zwar mit:
Code: Alles auswählen
import hashlib
string = 'Der Hund geht um die Ecke'
hashA = hashlib.sha512(string).hexdigest()
print hashA
Bekomme ich einen netten hash:
Code: Alles auswählen
c75549a1d7683fd902a4afdaa7f40c1c8a77c5adc54baeb850ffe32a023db44ebd9e9a7283f287ab8bd55cd104c79bc14e30aabb00af96ac57c4a264b35fbfe3
Aber wie wandel ich "diesen" Hash wieder in Klartext um? :K
Re: Frage zur hashlib
Verfasst: Mittwoch 31. August 2011, 19:31
von senft
Hashes sind nicht darauf ausgelegt wieder in Klartext "umgewandelt" zu werden. Das geht i.d.R. nur über Tabellen, die Hashwerte auf entsprechende Klartexte abbilden, was natürlich mit immensem Speicheraufwand verbunden ist.
http://de.wikipedia.org/wiki/Hashfunktion
http://de.wikipedia.org/wiki/Secure_Hash_Algorithm
Re: Frage zur hashlib
Verfasst: Mittwoch 31. August 2011, 20:44
von cofi
senft hat geschrieben:Das geht i.d.R. nur über Tabellen, die Hashwerte auf entsprechende Klartexte abbilden, was natürlich mit immensem Speicheraufwand verbunden ist.
Und natuerlich der Rechenaufwand

Stichwort ist dazu "Rainbow Table".
Re: Frage zur hashlib
Verfasst: Mittwoch 31. August 2011, 21:17
von NorbertW
cofi hat geschrieben:senft hat geschrieben:Das geht i.d.R. nur über Tabellen, die Hashwerte auf entsprechende Klartexte abbilden, was natürlich mit immensem Speicheraufwand verbunden ist.
Und natuerlich der Rechenaufwand

Stichwort ist dazu "Rainbow Table".
Warum sollte es?
Ich meine ich bekomme jedesmal den selben Wert für diesen Satz, also müsste es doch ohne probs möglich sein das zurück zu rechnen?
Eigentlich ist es "nur Spielerrei" aber ich hatte vor ein kleines Tool zu basteln das:
1. aus einem Passwort einen Hash bildet
2. aus einem Text einen Hash bildet
3. den Hash des des Passwords und des Textes addiert
4. Ergebnis weitergeben
Rückwerts sollte es dann doch gehen:
1. aus einem eingegebenem Password einen Hash bilden
2. vom gesammt Hash subtrahieren
3. verbleibenden Hash zurück in Klartext übersetzten. (wobei nur Sinn raus kommt wenn beide Passwörter gleich sind)
:K

Re: Frage zur hashlib
Verfasst: Mittwoch 31. August 2011, 21:35
von EyDu
Hallo.
Lese doch einfach mal den entsprechenden Wikipediaeintrag zu Hashfunktionen
Sebastian
Verfasst: Mittwoch 31. August 2011, 21:52
von lunar
@NorbertW: Eine Funktion und ihre Umkehrfunktion sind eben nicht dasselbe. Nur weil eine Funktion selbst bekannt und einfach berechenbar ist, muss das nicht auch gleich automatisch für die Umkehrfunktion gelten. Und es lassen sich eben Klassen von Funktionen finden, für die das nicht so einfach möglich ist.
Das kannst Du schon im Kleinen beobachten: Die analytische Berechnung der Quadratfunktion oder der Kubikfunktion ist einfach, aber die Quadratwurzel oder gar die Kubikwurzel zu ziehen, ungleich schwerer. Hashfunktionen sind nur das Extrem dieses Phänomens.
Re: Frage zur hashlib
Verfasst: Mittwoch 31. August 2011, 22:19
von BlackJack
@NorbertW: Um noch eine ganz einfache Funktion als Analogie hinzuzuziehen:
Code: Alles auswählen
In [6]: abs(1)
Out[6]: 1
In [7]: abs(-1)
Out[7]: 1
In [8]: abs(x)
Out[8]: 1
Hier kann man jetzt auch nicht ohne zu raten, sagen welchen Wert `x` hat. Im Gegensatz zur `abs()`-Funktion, wo es nur zwei Möglichkeiten gibt was `x` gewesen sein könnte, gibt es für Deinen Hashwert *unendlich* viele Möglichkeiten für den Eingabewert der zu diesem Hash führt.
Re: Frage zur hashlib
Verfasst: Mittwoch 31. August 2011, 23:18
von cofi
Kleine Ergaenzung zu BlackJack: Das intuitive Argument fuer "unendlich viele" Moeglichkeiten ist, dass beliebige Textlaengen auf 128 Bit, 256 Bit, o.ae. Laengen verkuerzt/verlaengert werden und nach dem Pigeon-Hole Prinzip muss es dann Werte geben, die auf denselben Wert abgebildet werden.
Re: Frage zur hashlib
Verfasst: Mittwoch 31. August 2011, 23:20
von jbs
Als andere Analogie schlage ich mal die Quersumme vor.
Re: Frage zur hashlib
Verfasst: Mittwoch 31. August 2011, 23:45
von NorbertW
Okay, jetzt hab ich es dank Antworten und Links endlich verstanden
Und hab mal gebastelt
Code: Alles auswählen
def crypt(password, content, decrypt=False):
rand = random.Random(hashlib.sha512(password).hexdigest()).randrange
if (decrypt):
content= base64.b64decode(content)
content = ''.join([chr(ord(elem)^rand(256)) for elem in content])
if not (decrypt):
content = base64.b64encode(content)
return content
password="Testpassword"
text = "Ich bin ein etwas längerer Testtext"
crypt_text = crypt(password, text)
print "Verschlüsselt: %s" % (crypt_text)
print "Entschlüsselt: %s" % (crypt(password, crypt_text ,True))
Wobei der Hashwert vom Passwort hier wohl irgendwie nicht sein müsste...
Also Danke erstmal an alle, ich probiere und lese weiter
EDIT: Sorry für die zwei Tippfehler die eben drinn waren!
Re: Frage zur hashlib
Verfasst: Mittwoch 31. August 2011, 23:50
von jbs
Du solltest hier schon lauffähigen Code posten.
Re: Frage zur hashlib
Verfasst: Mittwoch 31. August 2011, 23:59
von NorbertW
jbs hat geschrieben:Du solltest hier schon lauffähigen Code posten.
Habs gemerkt, sorry nochmal und ist ausgebessert. Ist schon zu spät ich geh dann mal ins Bett, so langsam muss ich mich daran gewöhnen das bald die Ferien rum sind, leider!
Re: Frage zur hashlib
Verfasst: Donnerstag 1. September 2011, 00:08
von jbs
Ich würde zwei getrennte Funktionen schreiben. Eine zum ver- die andere zum entschlüsseln.
Gefühlt würde ich auch eher zuerst den Parameter `content` dann `password` nehmen.
`if` braucht keine Klammern.
Die LC kannst du als GE ohne eckige Klammern schreiben.
Re: Frage zur hashlib
Verfasst: Donnerstag 1. September 2011, 08:55
von EyDu
Ich würde hier auch nicht unbedingt das random-Modul verwenden. Zum einen kann der entsprechende Algorithmus durchaus schnell mal ausgetauscht werden, zum andern sollte der Hashwert an sich schon gestreut genug sein.
Re: Frage zur hashlib
Verfasst: Donnerstag 1. September 2011, 12:04
von BlackJack
@EyDu: Der Hashwert ist aber recht kurz im Vergleich zu einem "endlosen" Strom von "Zufallszahlen". Vergleich mal die Periode von beiden.
Re: Frage zur hashlib
Verfasst: Donnerstag 1. September 2011, 12:12
von lunar
@BlackJack: Der Unterschied ist aus kryptographischer Sicht wohl eher egal, als OTP-Schlüssel taugt beides nicht.
Re: Frage zur hashlib
Verfasst: Donnerstag 1. September 2011, 14:14
von BlackJack
@lunar: So egal ist das nicht. Wenn Du etwas Längeres verschlüsselst als der Hash, dann müsstest Du den ja wiederholen, und 32 sich wiederholende Bytes sind sicher einfacher zu analysieren als ein Pseudozufallszahlengenerator mit einer Periode von 2**19937-1. Ich finde gerade das Paper nicht wieder, aber ich bin mir ziemlich sicher gelesen zu haben, dass man ≈600 generierte Zahlen braucht um beim Mersennetwister sagen zu können in welchem internen Zustand der sich gerade befindet. Und da sind die 32-Bit-Zahlen gemeint. Wenn die von `randrange()` noch mal auf 8-Bit runter gestutzt werden, gehen ja Informationen davon verloren.