Prolog
Angenommen, du möchtest mit einem Freund eine Datei austauschen. Dieser speichert sie auf einem USB-Stick und hinterlegt ihn für dich in deinem Büro.
Als du nun die Datei öffnen möchtest, überkommt dich spontan die Frage, ob nicht jemand in deiner Abwesenheit den USB-Stick und dessen Daten verändert haben könnte.
Ist es möglich, so überlegst du, zu überprüfen, ob die Datei noch dieselbe ist, welche dein Freund auf den USB-Stick kopiert hatte?
Theorie
Die grundlegende Idee ist bei Hashfunktionen recht simpel: Man kann eine beliebig große Datei oder Datenmenge in eine Zeichenfolge mit fester Länge umwandeln.
Das heißt, dass man für jede Art von Daten (Zeichenfolgen, Archive, Daten von CDs als iso...) einen Hashwert, auch Prüfsumme genannt, generieren kann.
Daten beliebiger Größe -> Zeichenfolge fester Länge
Damit wir jetzt anhand der Prüfsumme unsere Datei möglichst eindeutig identifizieren können, muss die Hashfunktion jedoch noch einige Bedingungen erfüllen.
Einweg-Funktion
Es darf nicht möglich sein, aus einer Prüfsumme die ursprünglichen Daten wiederherzustellen.
Dies gilt automatisch für schwach kollisionsresistente Hashfunktionen.
Schwache Kollisionsresistenz (second pre-image resistance)
Es darf in realistischer Zeit nicht möglich sein, zu Daten und deren Prüfsumme weitere Daten zu generieren, die dieselbe Prüfsumme haben.
Dies gilt automatisch für kollisionsresistente Hashfunktionen.
Kollisionsresistenz
Eine Kollision liegt vor, falls zwei unterschiedliche Daten dieselbe Prüfsumme ergeben.
Kollisionen können leider nicht gänzlich ausgeschlossen werden, da es bei der Umwandlung potenziell unendlich vielen Eingabemöglichkeiten auf eine begrenzte Anzahl an Prüfsummen zu Kollisionen kommen muss.
Die Kollisionsresistenz erfordert daher nur, das solch eine Kollision nicht in realistischer Zeit berechnet werden kann.
Hashfunktionen
In der Praxis werden vor allem vier Funktionen verwendet: MD5 und SHA-1-3.
Um den Post nicht zu lang zu machen, werde ich hier vorerst nur auf MD5 und SHA-1 eingehen.
SHA-2 und SHA-3 folgen in einem zweiten Teil.
MD5
MD5-Prüfsummen sind 32 Zeichen (128Bits) lang und werden in Hexadezimalschreibweise (0-9, A-F) dargestellt.
Sicherheit
Die ersten Kollisionen für das auf Endgeräten verwendete MD5 wurden 2004 von X. Wang, D. Feng, X. Lai und H. Yu gefunden. 2006 veröffentlichte V. Klima eine Möglichkeit, Kollisionen auf handelsüblichen Computern in unter einer Minute zu berechnen.
Da die Kollisionsresistenz nicht mehr gegeben ist, ist von der Verwendung von MD5 in den meisten Anwendungsfällen abzuraten.
SHA-1
SHA-1 Prüfsummen sind 160bits lang und werden in 40 Zeichen (hexadezimal) angegeben.
SHA-1 gehört zur gleichen Familie der iterativen Hashfunktionen wie MD5 und wird daher ähnlich konstruiert.
Sicherheit
Auch wenn die Kollsionsberechnung in SHA-1 derzeit noch aufwändig ist, ist es dennoch empfehlenswert, bei sicherheitskritischen Anwendungen (und anderen, wo Kollisionsresistenz wichtig ist) auf SHA-1 zu verzichten.
Die Historie derzeit bekannter Angriffe kann hier angesehen werden.
Beispiel
Über die GNU-Programme md5sum und sha1sum können Prüfsummen generiert werden.
echo "Hello World" > /tmp/myfile
md5sum /tmp/myfile
e59ff97941044f85df5297e1c302d260 /tmp/myfile
sha1sum /tmp/myfile
648a6a6ffffdaa0badb23b8baf90b6168dd16b3a /tmp/myfile
Quellen
- Hans Delfs, Helmut Knebl - Introduction to Cryptography, Third Edition
Einen Link zu meinem Vorstellungspost findet ihr hier.
This post has been voted on by the SteemSTEM curation team and voting trail. It is elligible for support from @curie.
If you appreciate the work we are doing, then consider supporting our witness stem.witness. Additional witness support to the curie witness would be appreciated as well.
For additional information please join us on the SteemSTEM discord and to get to know the rest of the community!
Please consider setting @steemstem as a beneficiary to your post to get a stronger support.
Please consider using the steemstem.io app to get a stronger support.
Congratulations @maini! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :
You can view your badges on your Steem Board and compare to others on the Steem Ranking
If you no longer want to receive notifications, reply to this comment with the word
STOP
Vote for @Steemitboard as a witness to get one more award and increased upvotes!
Congratulations @maini!
Your post was mentioned in the Steem Hit Parade for newcomers in the following category:
I also upvoted your post to increase its reward
If you like my work to promote newcomers and give them more visibility on the Steem blockchain, consider to vote for my witness!
Congratulations @maini! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Do not miss the last post from @steemitboard:
Vote for @Steemitboard as a witness to get one more award and increased upvotes!