Vor- Nachteile verschiedener Hash-Algorithmen

Guten Tag liebe User,

Ich möchte gewährleisten dass meine .txt von Server A nach Server B zu 100% übertragen wurde und garantieren, dass es keine Verluste oder Beschädigungen an der Datei gegeben hat.

Ich habe mich im Internet etwas erkundigt über die verschiedenen Hashcodes

Da stiess ich auf folgende drei Hauptgruppen:
Gitterbasierte(keine Ahnung auf was ausgerichtet),
Prüfsummen (Übertragungsfehler orientiert), Kryptologische Hashfunktionen (kollisionen orientert).

Gitterbasierte

Ajtai
Micciancio
Peikert-Rosen
Schnelle Fourier-Transformation (FFT Hashfunktion)
LASH

Prüfsummen

Fletcher-32
Adler-32
CRC (Zyklische Redundanzprüfung)
Parität
Quersumme

Kryptologische Hashfunktionen

MD2, MD4, MD5
Secure Hash Algorithm (SHA)
RIPEMD-160
Tiger
HAVAL
Whirlpool
LM-Hash
NTLM

Diese hauptgruppen weisen noch einige untergeordnete Funktionen auf, jedoch weiss ich nicht welchen ich wählen soll…

Ich bitte euch daher, mir etwas die Vor- und Nachteile zu schildern besagter Gruppen und mir eventuel einen konkreten Vorschlag zu machen für welche Funktion ich mich entscheiden sollte und weshalb :smile:

Als letzte info ich programmiere c#

Besten Dank im voraus
Freundliche Grüsse
Der Lernende

Sorry. Bin weder C# noch Hashing Experte.
Ich nutze im Normalfall einfach die Standardalgorithmen in der Java-Standardlib.

Hallo,

Erst einmal zu der Einteilung: Gitterbasiert passt jedenfalls nicht so ganz in deine Ordnung rein. Zum Beispiel sind Ajtai und Micciancio ebenfalls kryptographische Hashfunken. Dass diese auf der Schwierigkeit von Vektoren in zweidimensionalen Gittern beruhen ist hier nebensächlich :wink:

Bleiben also 2 Verfahren übrig:

Prüfsummen und Hashfunktionen.

Vorteil von Prüfsummen:
Wenn du genügend Overhead einplanst kannst du sogar Fehler die auftreten korrigieren.
Nachteil: Wenn du nicht vor hast eine Korrektur durchzuführen, dann ist die Wahrscheinlichkeit, dass Fehler übersehen werden größer als bei Hashfunktionen.

Vorteil von Hashfunktionen:
Du kannst dir relativ sicher sein, dass du erkennst wenn die Übertragung fehlerhaft war. Hierauf beruhen ja auch Signaturen, die beispielsweise überprüfen, ob ein Dokument oder eine Mail verändert wurden -> ist also etabliertes und probates Mittel.

Nachteil:
keine Korrekturmöglichkeit

Mein persönlicher Tipp:
Nimm MD5 oder SHA, da es hierfür sehr effiziente Algorithmen gibt. Des Weiteren kann meist jede Programmiersprache damit umgehen und du findest genügend Lösungen im Web (z.B. fertige Bibliotheken).
Zudem wird beispielsweise deswegen MD5 so häufig eingesetzt, da die wahrscheinlichkeit einer Kollision sehr gering ist.

VG Sebastian_