WO und WAS sind Hashes?

Hi,

Was ist den daran so lustig? Versuch doch mal besser zu erklären, was Elderan mit
Auf legal Wege könnte man an Hash z.B. über Google gelangen (manche Passwort-Dateien sind bei google gelistet)
meint, und zwar so, dass es Daniel91 versteht!

Gruß Chris
 
Damit meinte Elderan sicher nicht, dass Foren oder CMS-Systeme Ihre Passwörter so speichern, so dass sie über Google ausgelesen können.

Wenn man z.Bsp.: 81DC9BDB52D04DC20036DBD8313ED055 bei google sucht, findet man sehr schnell das dazugehörige Passwort: 1234, dies zigmal irgend wo hingeschrieben wurde (ganz aktuell z.Bsp. in diesem Thread jetzt von mir).

Die Passworthashes werde in Foren und CMS-System in einer Datenbank abgelegt, die gesondert gesichert ist, da kommt kein Google-Bot ran.

Wenn man also den Passworthash eines Users haben möchte, braucht man Zugang zur Datenbank (PHPmyadmin etc.), oder man benutzt einen Exploit (SQL-Injektion ....), um an den Hash zu kommen.
 
Hi,

Orginal von stone.dr
Damit meinte Elderan sicher nicht, dass Foren oder CMS-Systeme Ihre Passwörter so speichern, so dass sie über Google ausgelesen können.

Das würde aber keinen Sinn ergeben. Es ging um das besorgen von Hashes. Und wenn es heißt "manche Passwort-Dateien sind bei google gelistet" bedeutet das bestimmt nicht, dass man den ursprünglichen Wert eines Hashs ergooglen kann... ;)

Gruß Chris
 
Das heisst man kommt nicht so einfach mit 10 Mausklicken an ein Hash. =)
Eigentlich hat es in Quellentexten manchmal (ich nehme an wenn es um Passwort eingeben geht:ja)Hashes? Denn das ist ja glaube ich so aufgebaut

...
if passworthash richtig -> (Log in)
else passworthash falsch -> (!Log in)
...

nur dass es vieeeeeellll komplizierter ist.


Grüsse und noch mal danke für eure Beiträge!!!!
 
Hi,

Zitat:
Orginal von stone.dr
Damit meinte Elderan sicher nicht, dass Foren oder CMS-Systeme Ihre Passwörter so speichern, so dass sie über Google ausgelesen können.


Das würde aber keinen Sinn ergeben. Es ging um das besorgen von Hashes. Und wenn es heißt "manche Passwort-Dateien sind bei google gelistet" bedeutet das bestimmt nicht, dass man den ursprünglichen Wert eines Hashs ergooglen kann... Augenzwinkern

Gruß Chris


Na dann hoffen wir mal, das niemand die Userdb vom Habo ergooglet :rolleyes:
 
Hi,

@stone.dr: Ja das wollen wir mal hoffen, und viel Spass beim Googlen einer Datenbank :D

@Daniel91: Nein die Hashs stehen nicht im Quelltext, das wäre ja schön blöd...
Normalerweise stehen die in Datenbanken, Dateien oder sonst irgentwo.

Gruß Chris
 
Ach jetzt aufeinmal stehen die in ner Datenbank (nachdem ich das 2 mal gepostet habe)?

lol

Ich errinnere Dich nochmal an Deine "qualifizierten" Postings (und da Du mit dem Smile: :rolleyes: nichts anfängst, das ist ironisch gemeint).

Deine Postings:

Am besten findet man Hashes bei Google und Wikipedia...

Wenn du z.B. Ein Forum hast, müssen diese Hashs ja irgendwo gespeichert werden. z.B in einer Datei...
Solltest du nun deine Webseite bei Google registrieren, und nicht explizit verbieten,
das die Datei mitgelistet wird, kannst du diese Datei per Google finden.

Mal ne Frage @BlackSun1102, willst Du hier nur Leute anmachen oder was?

Vielleicht beschäftigst Du Dich mal ein wenig mit den SQL Datenbanken.

.... und achja ich hoste mehrere Foren und Webseiten und hab mir mein Wissen nicht von irgend welchen anderen Postings abgeschaut um einfach nett zu flamen.

So ist mein letzter Post hier in diesem Thema, sonst nimmt das ganze kein Ende ...
 
Hi,

Wieso leute anmachen?!

Der Beitrag, über den du dich Lustig gemacht hast, war ein Erklärungsversuch! Und da ging es EINDEUTIG über Passwortdateien, die bei Google gelistet sind:

Orginal von Elderan
Auf legal Wege könnte man an Hash z.B. über Google gelangen (manche Passwort-Dateien sind bei google gelistet)

So wie man das aus deinem Posting rausgelasen hat, das du dachtest, Elderan meint man könnte die ursprüngliche Zeichenfolge eines Hashs mittels Google rausfinden. Das stimmt auch, ist aber eindeutig nicht das, was Elderen geschreiben hat.

Im nächsten Post, meintest du, dass sich hofftenlich nienmand die DB des Habo ergooglet. Wie du darauf kommst, keine Ahnung...

Gruß Chris
 
Naja Hash-Listen gibs massig im Netz...
Desswegen benutzt man gehashte Hashs und Salts... :)

@ Jeden der net weis was Salts sind:
Ein Salt ist einfach mehr oder weniger Datenmüll der zB einem Hash beigemischt wird um Bruteforcern / Onlinedatenbanken das simple vergleichen des Hashs nahezu unmöglich zu machen.
So wird zb dem Passwort "blablubb" vo dem Hashen der Salt "möp" angehängt -> "blablubbmöp" udn dann daraus der Hash gebildet...

ps: wenn ich sinnlosen Krusch schreib, einfach löschen... hab scho bissel was intus :)
 
Ich denke, daß ein großes Problem des Begriffs 'Hash' darin liegt, daß er oft uneindeutig verwendet wird. 3 Begrifflichkeiten sind mir bekannt, die gern als Hash bezeichnet werden, aber es gibt durchaus noch einige mehr:

1. Checksummen für Dateien u.a. Daten, mit denen die Unversehrtheit von Daten bzw. eine Änderung daran nachgewiesen werden kann.
2. Strings von verschlüsselten Passwörtern, die korrekterweise als Ciphertext bezeichnet werden müßten (sind aber wohl die, die hier gemeint sind).
3. Assoziative Arrays in der Programmierung, also Arrays, die immer aus Schlüssel-Wert-Paaren bestehen (gerade unter Perl-Programmierern wird dieser Datentyp gern als Hash bezeichnet).

Genau gesehen sind nur die unter 1. aufgeführten Daten Hashes, wenn man von der Definition eines Hashes ausgeht (eine Menge von Daten, die kleiner ist als die übliche Quellmenge der Daten und die die Quellmenge beschreibt). Wenn sich die Informatik-Welt da endlich mal auf eine Eindeutigkeit festlegen würde, wäre das Thema Hashes sicherlich für Einsteiger wesentlich einfacher zu verstehen und vor allem weniger mißzuverstehen.
 
1+2 sind streng genommen das gleiche, es wird jeweils eine (unterschiedlich lange) Zahlenfolge mittels hashing irreversibel verschlüsselt.
Vieleicht auch ein wichtiger Punkt mal darauf hinzuweisen was "Hashing" ist.
Im Prinzip ist es nur eine Mathematische Methode eine Zahlenfolge so zu verändern, dass am Ende eine einmalige (im Falle MD5 sollte das besser "seltene" heissen) Kombination herauskommt.
Eine einfache Möglichkeit an einen Hash heranzukommen ist sich mal die Cookies die von www.hackerboard.de gespeichert werden anzuschauen.
(im Firefox Extras -> Einstellungen -> Datenschutz -> Cookies anzeigen und dort nach hackerboard.de suchen/IE: keine Ahnung)
Dort stehen zwei MD5 Hashes, das Cookiehash (ist das jetzt so ne Art Woltlab-Session-ID für Arme?) und das Passworthash (beide sollte man übrigens nicht an einen Dritten herausgeben, da dieser sonst Zugriff auf den eigenen Account bekommen).
Zum 3. Punkt habe ich keine Ahnung, ich Programmiere kein Perl ;)
Gruss Imrahil
 
Hallo,
also wenn Hashs in Datenbanken gespeichert sind, dann werden die nur selten gelistet.
Aber bei Google findet man die ein oder andere Passwortliste (von User). Wenn man z.B. über den Webserver auf die /etc/passwd zugreifen kann, dann kann es sein, dass diese auch bei Google gelistet ist (auch wenn dies nur noch bei wenigen Servern möglich ist).

Sonst gibt es immer noch Login-Systeme die die Daten in Textdateien speichern, z.B. in pw.txt worauf dann jeder zugreifen kann und u.U. wird dies auch von Google erfasst.

Sonst werden auf manchen Seiten per Exploit die Hashs ausgelesen und dargestellt. Wäre dieses Eingabefeld z.B. für eine SQL Injection verwundbar, so dass man sich die User-Tabelle ausgeben kann, kann es sein, dass jeder der dann diesen Thread aufruft, die Usertabelle erhält, weil die SQL Injection in der DB abgespeichert wurde.
Da Google noch eine schöne Cache Funktion hat, kann es passieren, dass so ein Post evt. über mehrere Tage bei Google vorhanden ist.
 
Hallo,

ich hoffe ich darf den Thread nochmal aufwühlen.

Also habe ich die zwei Bedeutungen von Hash richtig verstanden (die ja im Grunde das selbe sind):

Die erste wäre eine Art Prüfsumme eines Objekts (Datei, usw.), die als eine Überprüfung bzw. Sicherstellung gedacht ist, um sicher(er) zu gehen, dass das vorhandene Objekt, dessen Hash man erstellt, gleich dem Objekt ist, dessen Hash man im vorhinein bekommen hat.

Die zweite Bedeutung (die ja eigtl. die selbe ist, nur halt ein 'Spezialfall'): Passwörter werden, wie ein Objekt eben, in ein Hash umgewandelt, den man nicht mehr zurückverfolgen kann.
Es wurde hier schon aber gesagt (und liegt auch nahe), dass zwei unterschiedliche Objekte zufälligerweise den gleichen Hash haben.
Beispiel Quersumme:
3423 hat den Hash (die Quersumme): 3
3432 hat den Hash (die Quersumme): 3

Das sind zwei verschiedene Objekte mit dem selben "Hash" (zufällig).
Wenn ich nun annehme, dass es noch viel mehr Möglichkeiten gibt die Quersumme 3 zu bilden (es ist natürlich ein schlechter Vergleich, i know), dann dürfte es für einen Hash auch mehr als 2 verschiedene Objekte geben.
=> Ich könnte mich mit einer ganz anderen Zeichenkombination einloggen, wenn diese zufällig denselben Hash ergibt wie mein richtiges Passwort? => Mehrere Eingaben führen in meinen Account?? => Ein Brute Forcer hat im grunde viel mehr Chancen in meinen Account zu dringen???

Dieser Gedanke ist gruselig...

Also meine zwei Fragen: In erster Linie ist ein Hash eine Prüfsummer (wie beim EAN-Code z.B.), und im Spezialfall eine Art Passwortverschlüsselung?

mfg

P.S.: Tut mir leid dass Thema noch mal ausgegraben zu haben, aber die letzte Frage musste ich stellen!
Vielleicht hab ich auch einfach was übersehen. =/
 
Ja mit deiner Zusammenfassung hast du ganz recht, nur mit dem einzigen Unterscheid, dass bei den Hashalgorithmen, die meistens für Passwörter verwendet werden, dei Wahrscheinlichkeit, dass zwei Zeichenfolgen den gleichen Hashwert haben extrem gering ist. Je nachdem, welche Zeichen in der Zeichenfolge vorkommen, ist es mehr oder weniger warhscheinlich eine solche Kollision zu finden, da dies sehr zeitaufwändig ist.
Mit anderen Worten, wenn du ein sicheres Passwort mit Sonderzeichen, Groß- und Kleinschreibung etc. verwendest, bist du ziemlich auf der sicheren Seite.
 
Original von lookshe
? dass bei den Hashalgorithmen ?die Wahrscheinlichkeit, dass zwei Zeichenfolgen den gleichen Hashwert haben extrem gering ist

Diese Wahrscheinlichkeit ist nicht gering. _Sollte_ eine Brute Force Attacke (ohne Wörterbuch!) ein gültiges Passwort finden, so ist es sogar sehr wahrscheinlich, dass es sich um ein vollkommen kryptisches Passwort handelt, was von dem tatsächlich vergebenen Passwort meilenweit entfernt ist.

Original von lookshe
? wenn du ein sicheres Passwort mit Sonderzeichen, Groß- und Kleinschreibung etc. verwendest, bist du ziemlich auf der sicheren Seite.

Diese Aussage ist korrekt, allerdings hinkt die Erklärung ein wenig. Du kannst mit dieser Syntax nicht die möglichen Kollisionen beeinflussen. Du kannst aber damit verhindern, dass eine Wörterbuchattacke erfolgreich ist. Diese wäre ungleich schneller, als eine Brute Force Attacke, die sämtliche Buchstaben / Zahlen / Sonderzeichen einzeln und in Kombination zueinander ausprobieren muss, um ein gültiges Passwort zu finden. Im arithmetischen Mittel wäre hier der Zeitaufwand für eine solche Attacke einfach zu groß. Auf der anderen Seite könntest Du mit etwas Glück auch schon nach wenigen Versuchen erfolgreich sein, obgleich das Originalpasswort 100 Zeichen lang ist (auch wenn dies eine statistische Sensation wäre, denn wesentlich wahrscheinlicher wäre da ein Lottogewinn kurz nachdem Dein Schwiegerdrache von einem Blitz erschlagen wurde ? unwahrscheinlich aber nicht unmöglich).

Bye, nz
 
Zum ersten:

Die Bruteforce-Attacke würde aber relativ lange brauchen, was die Wahrscheinlichkeit etwas zu finden wieder gering mach (zeitlich betrachtet). Zudem ist es dem Algorithmus nach bei einer Bruteforce-Attacke, die geradewegs immer alles durchprobiert unwahrscheinlich schnell eine Kollision zu finden, da die Kollisionen ja meist sehr unterschiedliche Zeichenfolgen sind. (zumindest meines Wissens nach)

Zum zweiten:

Schon etwas spät und ich wollt seit fast 3 Stunden schlafen, kann es aber nicht, deshalb etwas dürftig/schlecht erklärt.
 
Kann man nun irgendwie berechnen, wie viele verschiedene Möglichkeiten für ein Passwort in Frage kommen?
Und warum ist das ausgerechnet so gemacht? Ich meine, ist es mit einer Verschlüsselung mit Wordkey (http://de.wikipedia.org/wiki/Polyalphabetische_Substitution#Kryptoanalyse) o.ä. nicht etwas sicherer, als stattdessen der Brute Force Attacke mehr Chancen zu lassen (die ja vermutlich am häufigsten verwendet wird)? Die Verschlüsselung könnte zwar rein theoretisch zurückverfolgt werden, aber wenn man das geschickt macht, sollte diese Möglichkeit doch sicherer sein.
Hm, interessantes Thema. :)
 
Also zu den Möglichkeiten würde ich mal sagen, unendlich viele. Denn es wird immer wieder irgendeine Zeichenfolge geben, die mit MD5 die gleichen 32 Zeichen liefert. Nur werden die halt immer länger und das berechnen würde dauern.
 
Hallo,
Original von NeonZero
Diese Wahrscheinlichkeit ist nicht gering. _Sollte_ eine Brute Force Attacke (ohne Wörterbuch!) ein gültiges Passwort finden, so ist es sogar sehr wahrscheinlich, dass es sich um ein vollkommen kryptisches Passwort handelt, was von dem tatsächlich vergebenen Passwort meilenweit entfernt ist.
Dies ist so leider nicht richtig.
Wenn man einen Brute-Force angriff startet, so schrenkt man die Anzahl der zuverwendenen Zeichen ein, oft auf a-z und 0-9 (ggf. noch Großbuchstaben).
Des Weiteren fängt man mit kruzen Eingaben an, also erst 1 Zeichen, dann 2 Zeichen bis hin z.B. 8 Zeichen.

Denn keiner wird als Eingabe alle 256 möglichen Werte für ein Byte/Zeichen verwenden, sondern dieses immer einschränken, auf 36 oder ggf. 62 Variationen pro Zeichen, sonst würde das Finden einer Kollision viel zu lange dauern.
Des weiteren werden die meisten User wohl kaum ein 0x00-Byte, einen Backspace o.ä. in ihrem Passwort verwenden.

Original von lookshe
? wenn du ein sicheres Passwort mit Sonderzeichen, Groß- und Kleinschreibung etc. verwendest, bist du ziemlich auf der sicheren Seite.
Ich würde diese Aussage so schon unterstützen, denn dass man eine Kollision findet, mit H(PW) = H(PW') und PW != PW' ist so gerring, dass man diese vernachlässigen kann.
Was man also meistens findet, ist das orginal Passwort und keine Kollision die die oben genannten Bedingungen erfüllen.
Verwende ich Klein- & Großbuchstaben, Zahlen und hab eine Passwortlänge von 10 Zeichen, so gibts immerhin über 10^17 Kombinationen. Hab ich 100 Rechner mit 100 Mio. Versuchen/Sek, dauerts immerhin noch gute 2 1/2 Jahre um alle Kombinationen auszuprobieren.


Und eine beliebige Kollision bei einem sicheren Hashverfahren zu finden ist nicht so einfach. Aufgrund des Geburtstagsparadoxon muss ich im Schnitt nur 2^(n/2) (n: Bitlänge des Hashs) Hashwerte erstellen, was bei MD5 z.B. ca. 2^64 Hashwerte wären.

Im März 2004 startete ein Projekt (MD5CRK), welches eine beliebige Kollision in MD5 finden sollte. Um eine Kollision in ~3 Wochen finden zu können, benötigt man rund 6000 Rechner mit 2 Gigaflops Prozessoren.
Allerdings hat man dann nur eine beliebige Kollision gefunden.

Um eine Kollision zu finden, für einen vorgegebenen Hashwert x, muss man im Schnitt (2^n)/2 bzw. 2^(n-1) also bei MD5 2^127 Hashwerte berechnen.

Dies ist ein 10^18 mal so großer Aufwand, mit den 6000 Prozessoren würde man nicht mehr 3 Wochen, sondern 3*10^18 Wochen (oder 60 Billiarden Jahre) brauchen.

Eine Kollsion mit H(PW) = H(PW') und PW != PW', mit gegebenem H(PW) zu finden, ist so gut wie unmöglich, sofern der Hash-Algorithmus stark kollisionsresistent ist, was MD5 und SHA1 zur Zeit noch sind.
Verwende ich also ein Passwort, welches aus einer groß Menge stammt, z.B. 12 Zeichen lang und 62 Zeichen zur Auswahl, ist auch fast unmöglich, dieses Passwort zu finden.

Und klar kann ich beim ersten Testen eine Kollision per Glück finden (mit den oben genannten Bedingungen), aber es ist 600 mal wahrscheinlicher, dass beim Lotto fünf mal nacheinander die gleichen Zahlen gezogen werden.

Natürlich immer vorrausgesetzt, die Hashfunktion ist Kollisionsresitent, was die Quersumme z.B. ja nicht ist.


PS: MD5CRK wurde ~5 Monaten eingestellt, weil ein chinesisches Wissenschaftlerteam die erste Kollision in der vollständigen MD5-Funktion gezeigt haben, wobei sie aber kein Bruteforce verwenden haben, sondern analytische Methoden (seit dem gilt MD5 nicht mehr als schwach Kollisions sicher).
Für spezielle Kollisionen mit vorgegebenem Hashwert kann man diese Methode aber nicht verwenden, wo Brute Force die schnellste Attacke bleibt.

@Sic!:
Eine Verschlüsselung zu verwenden bringt mehr Nachteile als Vorteile.
Wie du gesehen hast, ist eine Kollision für dein Passworthash sooooo unwahrscheinlich, dass man es vernachlässigen kann.
Verwendet man einen Verschlüsselungsalgorithmus wie z.B. AES, so hat man das Problem, wo bewahrt man sicher den Key für den Algorithmus auf?
Denn wenn jmd. in deinem Server einbricht, und die User-Tabelle kopiert, so hat er dann oft auch Zugriff auf den Key für den Algorithmus, und kann bequem alle Passwörter der User entschlüsseln.
Wenn die als Hashwerte hinterlegt sind, muss der Angreifer erst eine Wörterbuch/Rainbow/Brute Force Attacke starten, und bei guten Passwörter wird dies mit einer Wahrscheinlichkeit von 99,99999[...]99% nicht zum Ziel führen.

Des Weiteren gibts ja auch böse Admins, die sich für die Passwörter der User intressieren. Die rufen dann die User-Tabelle auf, verwenden den Key und entschlüsseln das Passwort. Bei einem Hashwert ist dies so nicht möglich.

Dann gibts noch das Problem des Backups. Wenn ich die Passwörter per AES verschlüssel und ein Backup der Usertabelle mache, wäre es sinnvoll, auch den AES Schlüssel zu sichern, denn wenn die Festplatte mal den Geist aufgibt => AES Schlüssel weg => User Passwörter weg.
Also muss ich den AES Schlüssel irgendwie sichern.
Bei einem Hashverfahren gibts das Problem nicht.

Auch kann ich so leichter die Passwörter portieren. Hat man z.B. ein Board, und möchte dass die User-Acc auch für das CMS gilt, welches aus einem fremden Server liegt, so kann ich die Hashwerte einfach rüberkopieren.

Ein anderes Problem ist bei Anwendungen, die geheime Werte kaum schützen können, wie z.B. PHP Scripts.
Würde das WBB z.B. AES anstatt MD5 verwenden, müsste der Key irgendwie in einer PHP Datei hinterlegt sein, damit man keinen Root-Server benötigt um ein wBB zum Laufen zu bringen.
Das führt zum Problem, dass der AES Key _offen_ im PHP Script hinterlegt ist, und jmd. der deinen FTP Acc. klaut, oder irgendwie sonst Dateien am Server auslesen kann, kann nun den AES Key auslesen.

Wie du siehst, führt Verschlüsselung nicht zum Ziel, und vor Panikmache vor Kollisionen rate ich ab, denn diese sind so unwahrscheinlich...
Verwendet man dann z.B. SHA1 statt MD5, ist eine Kollsion noch 4 Milliarden mal unwahrscheinlicher...

Um seine User aber vor schlechten Passwörtern zu schützen, sollte man eine Salt verwenden (verhindert Rainbow-Attacken) sowie evt. über den Einsatz eines HMAC Gedanken machen.

In PHP ist HMAC sehr schnell realisiert:
$hash = sha1("secret_key".$user_password);

Wobei "secret_key" dann selber natürlich kein "schlechtes" Passwort sein darf.
 
Zurück
Oben