Kryptographie-Überlegungen

    • Offizieller Beitrag

    Ich bin gerade dabei ein Programm zu schreiben, das Passwörter verschlüsselt ablegen soll (ähnlich wie Keypass, nur nicht so umfangreich).
    Mir geht es jetzt darum, ob das so, wie ich das umgesetzt habe, sicher ist.

    Ich beschreibe mal kurz den Ablauf:
    1. Beim ersten Start des Programms wird ein Master-Passwort abgefragt (min. 6stellig).
    2. Von diesem Master-Passwort erstellt das Programm eine Checksumme (SHA1) und speichert sie in eine Inidatei.
    3. Beim "normalen" Start des Programms wird nun nach diesem Master-Passwort gefragt.
    4. Der Benutzer gibt das Master-Passwort ein (das muss er bei jedem Start des Programms tun).
    5. Das Programm generiert aus der Eingabe die Checksumme (SHA1) und vergleicht diese mit der Gespeicherten.
    6. Wenn Übereinstimmung, wird das Programm gestartet, ansonsten beendet.
    7. Nun kann man Benutzername-/Passwort-Einträge erstellen.
    8. Beim speichern dieser Einträge werden die Daten mit AES (256 Bit) verschlüsselt (mit der Crypt-UDF). Der Key (_Crypt_DeriveKey) wird aus dem eingegebenen Passwort generiert.

    Es wird also nirgendwo im Programm das Passwort gespeichert. Lediglich die Checksumme wäre angreifbar (Brute-Force).
    Oder gibt es da eine Schwachstelle, die ich übersehen habe?
    Wäre schön, wenn sich mal die Krypto-Experten melden würden. :)

  • Morgen,

    zu Punkt 1 : Passwort sollte Alphanumerisch sein also (Zahlen, Zeichen, Buchstaben (am besten in Groß & Kleinschreibung))
    zu Punkt2: bin mir nicht sicher ob deine Checksumme SHA1 ein MD5 Hash ist wenn nicht würde ich auf einen MD5 Hash umsteigen

    der Rest ist okay :)

    Gruß Marvin

  • Wenn das mit Autoit machen willst sind die Punkte 1-6 hinfällig da diese direkt übergangen werden können.

    Punkt 8 ist auch einsehbar von daher kannst gleich direkt _Crypt_EncryptData nehmen.

    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

    @Protex: Dass das Master-Passwort "sicher" sein sollte, ist mir schon bewusst, nur kann ich das als Programmierer nur begrenzt beeinflussen. Da ist dann der Benutzer gefragt.
    Ich denke, dass SHA1 sicherer sein soll als MD5, oder irre ich mich da?

    chip: Nein, so einfach kann man das nicht übergehen, denn das eingegebene Passwort wird ja zum entschlüsseln der Datenbank verwendet. Mit einem falschen Passwort würde nur Datenmüll rauskommen.

  • Chip, wie kann man das ganze denn Umgehen?

    Aso noch zum Startpost, deine Datenbank muss natürlich mittels des Passworts verschlüsselt werden, sonst könnte man die INI einfach löschen und dass Programm denkt es wäre der Firstrun und man könnte alle Daten einsehen..


    EDIT: Okay hab mich gerade mal neu belesen .. MD5 hat eine geringere Verschlüsselung als SHA1 sind aber beide nicht umkehrbar also ists egal :P
    Gruß Marvin


  • chip: Nein, so einfach kann man das nicht übergehen, denn das eingegebene Passwort wird ja zum entschlüsseln der Datenbank verwendet. Mit einem falschen Passwort würde nur Datenmüll rauskommen.

    Dein SHA1 Hash geschichte mit Masterpasswort kannst komplett ausklammer weil ja nicht mit dem SH1-Hash deine Daten verschlüsselst sondern mit dem Klartextpw, von daher ist im Grund die SHA1 sache sogar eine Sicherheitslücke weil es eine Angriffspunkt darstellt.

    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.

  • chip : er kann doch aus dem MasterPW + dem SHA1 Hash einen Hash generieren & mit diesem die DB Verschlüsseln


    €: der SHA1 Check ist doch nur für den Programmstart gedacht, und in wiefern stellt dies eine Nenneswerte Lücke ? soweit ich weiß kann man SHA1 und MD5 nicht entschlüsseln zumindest nicht in den Nächsten Jahren .. oder habe ich da falsche Informationen?

    €2: möchte nicht immer ein Neuen Post machen^^, wie sollte es denn zu so etwas eine Tabel geben? dass PW ist doch sowas von Random angenommen man hat ein MasterPw von
    " @tr0Ll"%" " und generiert daraus einen SHA1 und wiederrumm aus dem SHA1 + dem PW wieder einen SHA1 Hash. dass dieser Hash zu finden ist ist doch Relativ gering oder nicht? aber ich meine Alles ist ja möglich..
    Gruß Marvin

    Einmal editiert, zuletzt von Protex (15. Februar 2012 um 07:56)

  • chip : er kann doch aus dem MasterPW + dem SHA1 Hash einen Hash generieren & mit diesem die DB Verschlüsseln

    Gruß Marvin

    Und dann? SHA-1 Tables findest inzwischen im Inet wie Sand am Meer und es ist in den meisten fällen eine Sache von paar Minuten maximal 1-2 Stunden das passende Klartext-PW dazu zu haben. Und den passenden Hash kannst aus dem Autoitscript nach decompilieren holen. Wenn dann musst das über Zwischenschritt z.B. via DLL machen und darin dann das pw für die verschlüsselung generieren.


    €: der SHA1 Check ist doch nur für den Programmstart gedacht, und in wiefern stellt dies eine Nenneswerte Lücke ? soweit ich weiß kann man SHA1 und MD5 nicht entschlüsseln zumindest nicht in den Nächsten Jahren .. oder habe ich da falsche Informationen?

    Ja bist du und zwar sehr sehr sehr falsch Informiert. MD5 und SHA-1 sind nicht sicher. Selbst SHA-256 ist inzwischen als Sicherheitsmaßnahme nichtmehr zu gebrauchen. Außer dein PW hat eine Länge >30 Zeichen ;).

    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.

  • Mh.. okay und welche Möglichkeiten bieten sich denn dann noch um eine Brauchbare Verschlüsselung zu schaffen in Autoit kann man doch sowieso alles Dekompilieren, also im Script was zu hinterlegen nutzt schon mal nichts, MD5 und SHA1 fallen auch weg, und wir müssen ja für den Start und das Entcrypten an das Klartext PW kommen .. besteht denn die Möglichkeit mit Zertifikaten über Autoit zu arbeiten? ggf Lege deine Datenbank auf einem Server ab und Arbeite mit SSL usw.. ^^

  • Hab ja gesagt über z.B Zwischenschritt mit einer DLL welche mit einem eigenen Algorithmus das PW zur ent-/verschlüsselung generiert.

    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.

  • Oder eine Möglichkeit wäre doch auch dass Passwort einfach zu erweitern auf 35 Stellen oder daraus den Hash zu verstellen dieser RandomString wird einfach irgendwo in der Reg abgelegt und später in Verbindung mit dem SHA1(MasterPW+Randomstring) geprüft, wäre doch auch eine Möglichkeit oder nicht? hattest ja gesagt der SHA1 String wird ab >30+ Sicherer

    Gruß Marvin

  • Da man Autoit problemos decompilieren kann ist diese Maßnahme genauso nutzlos hehe. Da das Scritp selbst ja wissen muss wo in der Registry der RandomString steht kann man es dort auch auslesen.

    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

    Also, um das mal zu verdeutlichen.
    Wie groß ist der Aufwand, den man treiben müsste, um an das Passwort zu kommen (SHA1-Hash -> Passwort)?
    Ich will ja keine Hochsicherheits-Software programmieren, sondern lediglich einen Passwort-Speicher für Passwörter von Online-Foren, Shops, das eigene WLAN und ähnlichen.
    Es wird ja sicher keiner "Tage/Monate/jede Menge Geld" investieren, um an diese Daten zu gelangen. Vor allem müsste er ja erstmal an die verschlüsselten Daten kommen (die sind nämlich nicht online). :D

  • Also, um das mal zu verdeutlichen.
    Wie groß ist der Aufwand, den man treiben müsste, um an das Passwort zu kommen (SHA1-Hash -> Passwort)?

    Auf ein Webseite gehen, SHA-1-Hash eingeben dann siesht es entweder direkt oder spätestens nach paar Tagen bekommst es z.b. per Email.

    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.

  • Auf ein Webseite gehen, SHA-1-Hash eingeben dann siesht es entweder direkt oder spätestens nach paar Tagen bekommst es z.b. per Email.


    Mit einer leistungsstarken GPU sind MD5's teilweise in 2-10 Minuten geknackt. SHA1 sollte etwas länger dauern, aber auch die sind nicht unknackbar.

    Ich würde ein bisschen mit Salts rumhantieren und doppelt und dreifach hashen


  • Mit einer leistungsstarken GPU sind MD5's teilweise in 2-10 Minuten geknackt. SHA1 sollte etwas länger dauern, aber auch die sind nicht unknackbar.

    Ich würde ein bisschen mit Salts rumhantieren und doppelt und dreifach hashen

    Was ihm nichts bringt wenn er das in Autoit direkt macht.

    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.


  • Was ihm nichts bringt wenn er das in Autoit direkt macht.


    Doch. Man kann zumindest keine Rainbow-Table mehr nutzen und muss es tatsächlich knacken lassen.

  • Klar kannst Rainbow-Tables weiterhin nutzen. Da der sald bekannt ist, ist er genausoviel wert wie garkeiner :).

    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.

  • Klar kannst Rainbow-Tables weiterhin nutzen. Da der sald bekannt ist, ist er genausoviel wert wie garkeiner :).


    Kannst du nicht! Du müsstest für jeden Salt eine neue Table erstellen. Tables die bereits existieren sind nutzlos.