Kryptografie (8) : Hashing

avatar
(Edited)

In diesem Beitrag wird beschrieben, was das sogenannte Hashing ist, wofür es gut ist und wie es verwendet werden kann.
Die Idee des Hashing besteht darin, aus einem Datensatz einen fixen Wert zu berechnen. Für diese Berechnung sind Hashfunktionen zuständig. Mathematisch gesehen sind Hashfunktionen nicht invertierbare Funktionen. Das heißt man kann aus einem Ergebnis nicht auf seine "Eingabe" zurückschließen. Zudem ist die Ursprungsmenge größer als die Abbildmenge. Eine weitere besonderheit ist, dass die Hashwerte immer gleich lang sind, egal wielange die Eingabemenge beträgt.

Damit eine Funktion für das Hashing zur Debatte steht, müssen zwei Anforderungen erfüllt sein.

  1. Nicht umkehrbar : Zu einem vorgegebenen Hashwert h ist es unmöglich eine Nachricht M zu finden, für die H(M)=h gilt.

  2. Schwache Kollisionsresitenz : Zu einer vorgegebenen Nachricht M1 ist es unmöglich, eine weitere Nachricht M2 != M1 zu finden, für die H(M1) = H(M2) gilt. Anders formuliert: es soll zu zwei unterschiedlichen Eingaben nicht derselbe Hashwert berechnet werden.

Zwei bekannte Familien für das Hashing sind MD5 und die SHAxxx-Familie, wobei MD5 und auch die älteren SHA1xx nicht mehr verwendet werden sollten.

"[...] Der Hash-Algorithmus MD5 ist veraltet und weist bekannte Schwächen auf, die auch bereits anhand praktischer Beispiele demonstriert werden konnten. Auch der Hash-Algorithmus SHA-1 ist nicht mehr für alle Einsatzzwecke geeignet. [...] [1]

Um eine Hashfunktion nach der sponge construction zu konstruieren, sollten folgende Parameter gewählt werden [2].

  1. Eine Zustandslänge b oder auch Bitvektor genannt. Ein Vektor voller 0 und 1, welcher mit einer Nachricht m XOR-Verknüpft wird.
  2. Eine Funktion f:{0,1}^b -> {0,1}^b
  3. Eine Bitrate r und ein padding-Verfahren, wie die Eingabe m auf eine Länge gebracht wird, die ein Vielfaches von r ist.
  4. Die Ergebnislänge s.

Wofür braucht man denn dieses Hashing?

  • Integrität
    Anders als bei der Verschlüsselung, wo der Wert u.a. auf Vertraulichkeit gelegt wird, geht es beim Hashing um die Sicherstellung der Integrität von Daten. Somit kann sichergestellt werden, dass eine Datei nicht manipuliert wird.

  • Adressierung
    Zum anderen kann Hashing auch für eine Adressierung von Daten benutzt werden. Das Prinzip der Adressierung wird häufig in Programmiersprachen in Form von Hashtables, Hashmaps o.Ä. zur Verfügung gestellt. Wir werden die Adressierung nicht weiter betrachten, stattdessen schauen wir uns mal ein praktisches Beispiel an.

  • Berechnung eines Hashwertes

  1. Wir legen mal eine Textdatei an und schreiben dort was rein.
    hash1.png

  2. Nun manipulieren wir diese Datei, indem wir ein zusätzliches Leerzeichen vor dem Wort "Hashwert" einfügen. (Das wird doch wohl nicht auffallen).
    hash2.png

  3. Wir berechnen den Hashwert dieser Datei einmal vor- und nach der Manipulation. Dazu wurde das Hashingverfahren SHA256 gewählt.
    hash3.png

Man kann Anhand der beiden Hashwerte sehen, dass Sie ungleich sind. Die Manipulation fällt also auf, auch wenn sie noch so minimal ist.

  • Authentisierung
    Noch ein weiteres Einsatzgebiet von Hashing ist die Passwort-Authentisierung. Registriert man sich auf einer sicheren Webseite (auf HTTPS achten!), so muss man sein Passwort als Klartext eingeben. Dieses wird verschlüsselt an den Server übertragen. Dort wird von den Passwort ein Hashwert berechnet. Um den Hashwert entgültig in eine Datenbank zu speichern, muss das Passwort erneut eingegeben werden, damit (hoffentlich) derselbe Hashwert erneut berechnet wird. Sollte dies der Fall sein, dann war die Registrierung erfolgreich.

  • Quelle(n)
    [1] https://www.bsi.bund.de/DE/Themen/ITGrundschutz/ITGrundschutzKataloge/Inhalt/_content/g/g04/g04035.html
    [2] https://keccak.team/sponge_duplex.html

Edit : alternativer Link zu Quelle [1] : https://webcache.googleusercontent.com/search?q=cache:hEsXot3R0-MJ:https://www.bsi.bund.de/DE/Themen/ITGrundschutz/ITGrundschutzKataloge/Inhalt/_content/g/g04/g04035.html+&cd=1&hl=de&ct=clnk&gl=de (Google webcache, letzer Zugriff : 15.08.2019; 16:05)



0
0
0.000
5 comments
avatar
Du hast ein kleines Upvote von unserem Curation – Support – Reblog Account erhalten. Dieser wurde per Hand erteilt und nicht von einem Bot.

Wir, die Mitglieder des German Steem Bootcamps möchten die Deutsche Community stärken.

Du findest uns im Discord unter https://discord.gg/Uee9wDB

!bootcamp1.jpg

0
0
0.000
avatar


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!

0
0
0.000
avatar

Congratulations @ozelot47! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You received more than 2000 upvotes. Your next target is to reach 3000 upvotes.

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

You can upvote this notification to help all Steem users. Learn how here!

0
0
0.000
avatar

Mathematisch gesehen sind Hashfunktionen nicht invertierbare Funktionen.

Gilt das nicht nur für kryptografische Hashfunktionen.

Bei der Kollisionsrestenz ist es ja außerdem noch wichtig, dass es auch nicht möglich sein darf, durch die Wahl der Urbilder Hashwerte nach einem bestimmten Muster zu erstellen.

Ich glaube ein weiterer Anwendungsfall ist noch als Prüfsumme, bei der iBAN zb sind die ersten zwei ziffern nach dem ländercode ein Hashwert vom rest der IBAN.

0
0
0.000
avatar

Soweit mir bekannt ist, gilt für alle Hashfunktionen dass sie nicht umkehrbar sein sollen. Durch diese Einwegeigenschaft soll erreicht werden, dass man nicht in absehbare Zeit das Element findet woraus der Hashwert berechnet wurde.

0
0
0.000