Kryptographische Hashfunktionen

"Wikipedia Definiert: Eine kryptologische Hashfunktion oder kryptographische Hashfunktion ist eine spezielle Form der Hashfunktion, welche kollisionsresistent oder eine Einwegfunktion (oder beides) ist.

Eine Einwegfunktion ist in der Informatik der Begriff, wenn der Weg zur Lösung einer Funktion sehr einfach ist, aber das umkehren "schwer" ist. Genaugenommen finde ich, dass eine Einwegfunktion nur dann den Namen verdient hat, wenn es nicht in praktisch ausführbarer Zeit möglich ist, die Umkehrlösung zu finden. Einwegfunktionen sind der Grundstein für asymmetrischer Kryptosysteme.

Was ist ein Hash?

Ein Hash ist ein Ergebnis einer mathematischen Operation mit einer fixen Länge, wobei der Input nicht fixer Länge sein muss. Dieser kann sogar kürzer als das Ergebnis sein.

Unterschied Kryptologische Hash vs Hashfunktion:

Hashsummen sind nicht nur immer da um anonymisiert Daten zu vergleichen, oder deren Integrität festzustellen. Eine Kryptologische Hashfunktion ist laut manchen Definitionen schon gegeben, wenn eine Einwegfunktion im Spiel ist, oder es den Zweck einer "sicheren Bereitstellung" dient. Sichere Hashfunktionen sind jedoch sehr komplex mathematisch zu entwerfen.

Wo und für was werden Hashes verwendet?

Hashes können verwendet werden, um:

  1. Eine Streuung zu verursachen
  2. In Datenbanken um Objekte schneller zu finden (Datenbankindex)
  3. Um Daten zu vergleichen (Checksumming)
  4. Deduplication (Dedup)
  5. Passwörter nicht in Klartext zu speichern (Password Hashing)

Hashes mit OpenSSL generieren:

SHA Hash von String "HashThis"
➜ ~ echo -n "HashThis" | openssl sha
f42d8d8e09a7fcbb683d91481c1e3ea5dd414339  
SHA1 Hash von String "HashThis"
➜ ~ echo -n "HashThis" | openssl sha1
e8968285ebae011473f90845c06a6d3e69806a0c  
MD2 Hash von String "HashThis"
➜ ~ echo -n "HashThis" | openssl md2
b82f6b1131c8ecf4fe0bf06d2ada3fc3  

Erklärung: echo schreibt den in " gesetzten String in Standard Output und dieser wird duch die Pipe "|" in openssl als Input "gefüttert" sha1 ist ein Optionsparameter des OpenSSL Programms.