Kryptographie-Überlegungen

  • Scheinbar ist dir der Aufbau von Rainbow Tables gänzlich unbekannt :).

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    • 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.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    • 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 Wikipedia

    Die 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

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    Einmal editiert, zuletzt von chip (15. Februar 2012 um 14:33)

  • Kannst aber auch versuchen Blowfish umzusetzen und

    In meinem Tool "AKrypto" (LINK) ist eine Blowfish-UDF enthalten !

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • 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... :thumbup:
    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...

    LG
    Christoph :)

  • Das Script musst diesen "Standard-Code" aber kenne von daher sinnlos.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • BinDannMalWeg,

    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

    2 Mal editiert, zuletzt von autoBert (16. Februar 2012 um 00:18)

  • 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!

    Einmal editiert, zuletzt von Techmix (16. Februar 2012 um 00:33)

  • 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 :)