Moin!
Daher meine Frage: Kann es theoretisch sein, dass für unterschiedliche "Benutzername + Passwort + Hostname"-Kombinationen irgendwann mal der gleiche Hash-Wert erzeugt wird?
Ja, nicht nur theoretisch, sondern auch praktisch.
Das Resultat von SHA1 (und jedem anderen SHA-Algorithmus, sowie MD4, MD5 und Konsorten) kann man auffassen als eine Zahl mit ziemlich vielen, aber definiert begrenzten Stellen. Daraus folgt, dass der Algorithmus nur endlich viele Ergebnisse haben kann - aber unendlich viele Eingabewerte. Folglich gibt es sogenannte Kollisionen, bei denen zwei unterschiedliche Eingabewerte zum gleichen Ausgabewert führen.
Es ist nur nicht so leicht, solche Kollisionen absichtlich zu finden. Angenommen, ein String mit zehn Zeichen führt zu einem bestimmten SHA1-Ergebnis, dann kann ein damit kollidierender Wert vielleicht ein String mit tausend Zeichen sein. Das kann aber niemand herausfinden, ohne alle Strings mit tausend Zeichen mal durchprobiert zu haben - das ist ziemlich zeitaufwendig.
Aber ein ganz anderer Aspekt ist mir viel wichtiger:
Ich beschäftige mich für ein Projekt gerade mit dem Verschlüsseln von Zugangsdaten. Dazu möchte ich statt "Benutzername + Passwort + Hostname" einfach den zugehörigen Hash-Wert zur Kontrolle an den Server übermitteln.
Du willst also die Sicherheit erhöhen. Wie? Ein Javascript einzusetzen, welches aus den drei Informationen Username, Passwort und Hostname ein SHA1 errechnet, welches dann an den Server gesendet wird, wird dir keinerlei Zusatzsicherheit bieten, weil der böse Angreifer dann auch direkt irgendeinen hoffentlich passenden SHA1-String generieren und dir senden kann. Oder (und das ist bei unverschlüsselter Kommunikation ja auch immer möglich) er fängt den gültigen generierten SHA1-String ab und kriegt mit dem dann kompletten Zugriff, ohne sich um Usernamen etc. kümmern zu müssen.
Sicherheit erhälst du bei Logins nur durch Verschlüsselung, beispielsweise mit SSL. Alles andere ist Spielkram, macht das Verfahren komplizierter, fehleranfälliger, benutzerunfreundlicher, aber kein bißchen sicherer.
- Sven Rautenberg
"Love your nation - respect the others."