Scheinbar ist dir der Aufbau von Rainbow Tables gänzlich unbekannt :).
Kryptographie-Überlegungen
-
- [ gelöst ]
-
Oscar -
15. Februar 2012 um 06:10 -
Geschlossen -
Erledigt
-
-
- Offizieller Beitrag
Hallo,
Das Verfahren ist meiner Ansicht nach so in Ordnung.
Du solltest darauf achten, dass du einen guten Hashing-Algorithmus nimmst (MD5 ist unsicher, SHA-1 angeknackst, meinen Informationen nach SHA-256 noch ziemlich in Ordnung). Außerdem solltest du 1. die Eingabe hashen, also einfach eine beliebigen Text anhängen, um Rainbow-Tables wertlos zu machen und 2. mehrere (viele!) Runden hashen, wobei in der ersten Runde das gesalzene Passwort reinkommt und später immer die Ausgabe der vorherigen Runde. Hunderte Runden sind dabei durchaus üblich soweit ich weiß.Johannes
-
1. die Eingabe hashen, also einfach eine beliebigen Text anhängen, um Rainbow-Tables wertlos zu machen
Wie kommst du darauf das das Rainbow-Tables wertlos macht? In Rainbow-Tables werden einfach alle mögliche kombinationen strukturiert nacheinander abgebildet. Von daher macht das anhängen eine beliebign Textes an das Passwort keinen Unterschied bei Autoit. Wenn das PW mit angehängten Text via Rainbow-Tables gefunden wurde braucht man lediglich im decompilieren Autoitscritp zu schauen wie der Sald angehängt wurde und diesen entfernen. Schon hast Klartext-PW.
Bei anderen Sprachen oder auch Serverseitigen Sachen macht ein sald Rainbow-Tables wirklich unschädlich aber nicht bei Autoit.
-
- Offizieller Beitrag
Wie bewertet ihr die Methode, den Hashwert aus zwei einzelnen Hashes zu addieren.
Das heißt, vom Master-Passwort wird ein SHA1-Hash und ein MD5-Hash erstellt und diese werden dann addiert. Das Ergebnis speichere ich in die Ini.
Es dürfte doch ziemlich schwierig/unmöglich sein, die beiden Summanden aus der Summe zu extrahieren, um damit dann eine Rainbow-Table zu befragen. -
- Offizieller Beitrag
Wie kommst du darauf das das Rainbow-Tables wertlos macht?
Zitat von WikipediaDie Größe einer Rainbow Table steigt mit der Länge der Kennwörter, für die sie generiert werden soll. Je nach Hashtyp ist ab einer gewissen Kennwortlänge die Berechnung einer Rainbow Table nicht mehr wirtschaftlich, sowohl was die Dauer der Generierung als auch den Platzbedarf der Tabellen angeht. Lange Kennwörter entstehen z. B. bei der Verwendung von Sätzen statt eines Wortes (siehe Passphrase).
So wie ich das verstehe, müsste jemand (auch wenn er meinen Salt kennt) eine Rainbow-Table haben, die eben genau diese Daten enthält. Wenn ich also 200 Zeichen Nonsens anhänge, dann kann ich die rausgeben, weil ich das virtuelle Gesamtpasswort nicht in der Tabelle finden werde und damit nicht an den Teil vor dem Salt rankomme. Sehe ich das was grundlegend falsch?
Oscar : Zwei kaputte Methoden zu addieren halte ich spontan für keine gute Idee. Ich glaube, dass das Chaining besser ist (Ausgabe wieder in die Hashfunktion stecken).
Johannes
-
Wie bewertet ihr die Methode, den Hashwert aus zwei einzelnen Hashes zu addieren.
Das heißt, vom Master-Passwort wird ein SHA1-Hash und ein MD5-Hash erstellt und diese werden dann addiert. Das Ergebnis speichere ich in die Ini.
Es dürfte doch ziemlich schwierig/unmöglich sein, die beiden Summanden aus der Summe zu extrahieren, um damit dann eine Rainbow-Table zu befragen.Mh joa das wäre wohl eine Möglichkeit. Die Buchstaben in den hashes in Zahlen wandlen und das ganze dann addieren. Dauert dann zumindesten seine Zeit darauß zwei Hashes dann wieder zu bilden mit dem selben Wert.
Kannst aber auch versuchen Blowfish umzusetzen und zum hashen zu verwenden. Auf Blowfish ist bis heute noch keine erfolgreiche Angriff bekannt meines wissens nach: http://de.wikipedia.org/wiki/Blowfish
-
Kannst aber auch versuchen Blowfish umzusetzen und
In meinem Tool "AKrypto" (LINK) ist eine Blowfish-UDF enthalten !
-
Also ich würde das so machen, dass man im Script einen Standard-Code vorgibt, der dann mithilfe des Masterpasswortes
verschlüsselt und abgespeichert wird. Wenn nun beim Programmstart ein Passwort eingegeben wurde, entschlüsseln wir
einfach, den verschlüsselten Standard-Code aus der Datei, mithilfe des neu eingegebenen Passwort: Wenn das Ergebnis
dann dem Standard-Code entspricht, ist das Masterpasswort richtig...
So entfällt die ganze Problematik mit den Hash-werten und man hat bei entsprechender Verschlüsselung KEINE Chance
das Materpasswort zu bruteforcen...
Natürlich muss der 'Standard-Code' geheim bleiben oder zum Beispiel Computer spezifisch berechnet werden, damit man
nicht einfach eine neue Passwortdatei generieren kann, wenn man den Standard-Code kennt... -
Also ich würde das so machen, dass man im Script einen Standard-Code vorgibt, der dann mithilfe des Masterpasswortes
verschlüsselt und abgespeichert wird. Wenn nun beim Programmstart ein Passwort eingegeben wurde, entschlüsseln wir
einfach, den verschlüsselten Standard-Code aus der Datei, mithilfe des neu eingegebenen Passwort: Wenn das Ergebnis
dann dem Standard-Code entspricht, ist das Masterpasswort richtig...
So entfällt die ganze Problematik mit den Hash-werten und man hat bei entsprechender Verschlüsselung KEINE Chance
das Materpasswort zu bruteforcen...
Natürlich muss der 'Standard-Code' geheim bleiben oder zum Beispiel Computer spezifisch berechnet werden, damit man
nicht einfach eine neue Passwortdatei generieren kann, wenn man den Standard-Code kennt...Das Script musst diesen "Standard-Code" aber kenne von daher sinnlos.
-
das Problem worauf Chip, tklausl & Co. herumreiten ist AutoIt soezifisch (lässt sich leiden vielzu leicht dekompilieren, ist aber illegal). Daher ist deine Methde noch unsicherer als Oscar's Methde. Ohne die hässlichen Dekomiler würde ja schon das Schema genügen das Oscar in seiner Login-Box verwendet hat.
Die anderen Fragen sind aber: wer hat schon physikalischen Zugang zu (d/s)einem Rechner? Lohnt sich der ganze Aufwand überhaupt?
Ein möglicher Lösungsweg wäre die Verschlüsselung mit Hilfe einer php-Datei auf einen Webserver zu verlagern bzw. den Schlüssel dort verwahren und selbst dabei gibt es Probleme. Ist schon schade dass sich gegen Diebe nichts zu 100 % schützen lässt, man sollte es ihnen aber auch nicht zu einfach machen,mfg autoBert
-
Nabend!
Also ich würde es so machen wie Oscar es bereits getan hat, nur zusätzlich die Ini Crypten - ich habe gerade so ein 'Billig-System' dafür erstellt. Das Verschlüsselt mir die ini nur einmalig - ist also nicht soooo sicher, aber eine weitere Bariäre!
Außerdem wird bei mir die Gecryptete Ini nicht als Klartext iwo auf der Hdd gespeichert, sondern ich habe mir einfach die Funktionen IniRead & Co weitesgehend angepasst. Somit wird sie nur im RAM kurzzeitig als Klartext verfügbar - oder man könnte auch auf ein (Klartext) Array zurückgreifen, was aber die Sicherheit runterstuft.Grüsse!
[EDIT]
Ausserdem gibt es ja mehrere Verschlüsselungsmethoden, die kann man auch problemlos Kombinieren!
Beispiel:
Klartext
-> Hex vom Klartext
-> Ceasar Chiffre
-> Vignere Chiffre
-> Wieder Hex draus machen
-> .....
Und zum Entschlüsseln die Crypt-Reihenfolge einfach umkehren. Ist eigentlich ziemlich einfach - aber da der Angreifer nicht weiß welche Reihenfolge festgelegt wurde (die man auch mit unterschiedlichen Passwörtern versehen kann) stellt diese Vorgehensweise eine weitere Barriäre dar! Und bei diesen derzeitigen 'Hightech-Methoden' zum Crypten ist so eine Alternative eigentlich ziemlich Witzreich! -
- Offizieller Beitrag
Ich mache das jetzt so, dass ich den Hash in 100 Runden (SHA1) erstelle und zusätzlich am Schluss noch einen MD5-Hash addiere.
Das sollte einen Rainbow-Table-Angriff unmöglich machen. Es bleibt also nur Brute-Force.Danke, an alle die geholfen haben!
-
Vom Aufwand/Sicherheit-Verhältnis sicher eine vernünftige Lösung. (mehrere Runden hashen).
Im englischen Forum gibt es zudem eine crypt-udf die in Asm umgesetzt ist und somit sehr schnell ist und unter anderem sha-256 (zum hashen) und aes (zum symetrischen Verschlüsseln) bereitstellt, sehr empfehlenswert -