Kryptologische HASH-Funktion

Was ist ein HASH?
Ein HASH ist eine Abbildung die eine grosse Eingabemenge (z.B. Eine Datei oder E-Mail) auf eine kleine Zielmenge reduziert.
Die Eingabemenge kann Elemente unterschiedlicher Längen enthalten, wobei die Zielmenge eine fest definierte Länge besitzt.

Eine HASH-Funktion erfüllt folgende Bedingungen:
  1. Einwegfunktion: Es ist praktisch unmöglich, zu einem gegebenen Ausgabewert einen Eingabewert zu finden. Es kann somit basierend auf dem HASH-Wert kein Rückschluss auf den Originalwert gezogen werden.
  2. Kollisionsresistenz: Es ist praktisch unmöglich, für einen gegebenen Wert einen davon abweichenden Wert zu finden, welche den Selben HASH-Wert ergibt.

Wo werden Hashes eingesetzt?
  • Datenbanken: In Datenbanken können z.B. HASH-Werte verwendet werden um Passwörter zu speichern. Somit ist auch für einen DB-Administrator nicht ersichtlich, wie das Passwort lautet. Bei der Überprüfung wird bei der Passworteingabe ein HASH-Wert generiert. Dieser kann dann mit dem in der DB befindlichen HASH-Wert verglichen werden. Stimmen diese überein, ist das Passwort korrekt.
  • Signaturen: Wir dein elektronisches Dokument signiert, wird der HASH-Wert eines Dokumentes berechnet. Dieser HASH-Wert wird dann mit einem privaten Schlüssel verschlüsselt. Nun kann der Empfänger der Nachricht ebenfalls den HASH-Wert der Nachricht berechnen. Dieser wird nun wieder mit dem übermittelten Wert verglichen. Stimmen diese überein, dann wurde das Dokument einerseits nicht verändert. Ebenfalls kann durch die Verschlüsselung (Signatur) überprüft werden, ob der Absender korrekt ist.
  • Integrität: Mittels einer HASH-Funktion kann für ein Dokument oder für eine Nachricht berechnet werden. Soll nun zu einem späteren Zeitpunkt überprüft werden, ob das Dokument oder die Nachricht verändert wurde, muss lediglich wiederum ein HASH-Wert berechnet werden. Sind diese beiden Werte identisch, kann davon ausgegangen werden, dass es sich um den Original Inhalt handelt.

Unterschied zu Prüfsummen
Bei einer Datenübertragung, kann z.B. mit einer Prüfsumme sichergestellt werden, dass die gesamte Übertragung fehlerfrei durchgeführt wurde. Die Prüfsumme unterschiedlicher Übertragungen kann jedoch mehrmals die selbe sein. Somit kann basierend auf einer Prüfsumme keine Aussage über den „Inhalt" der geschickten Nachricht gemacht werden. Hier ist der HASH-Algorithmus einzusetzen.




Python Code

MD5
import hashlib

mystring = input('Bitte Text eingeben: ')
hash_object = hashlib.md5(mystring.encode())
print(hash_object.hexdigest())

SHA1
import hashlib

mystring = input('Bitte Text eingeben: ')
hash_object = hashlib.sha1(mystring.encode())
print(hash_object.hexdigest())

SHA256
import hashlib

mystring = input('Bitte Text eingeben: ')
hash_object = hashlib.sha256(mystring.encode())
print(hash_object.hexdigest())

SHA512
import hashlib

mystring = input('Bitte Text eingeben: ')
hash_object = hashlib.sha512(mystring.encode())
print(hash_object.hexdigest())