Wie sicher ist deine Verschlüsselung?


  • nach 32 stunden habe ich alle passwörter einer angegebenen Liste geknackt.
    d.h. ich kann in eine liste 1 Passwort schreiben und habe es spätestens nach 32 stunden gekackt oder aber ich schreibe 1000 rein und habe sie nach 32 Stunden geknackt


    zudem:


    Mitlerweile sind dir Prozessoren sogar schneller geworden und ein Programm was mehr als 4 Threads unterstützt beispuelsweise 8 für nen 8 kerner wäre noch schneller fertig.


    Ja, ist klar, mit einer Passwortliste. Hast du denn in deiner Liste das Passwort "%sKcBaädL²" drin stehen? Nein, also können wir das mal außen vorlassen, richtig? Das einzige, was bleibt, ist ein Bruteforceangriff, bei ordnetlichen Passwörtern mit allen Zeichen, die die Tastatur so hergibt, also ungefähr diese Zeichen hier (insgesamt ca. 100):
    ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz^12345678890ß´°!"§$%&/()=?`²³ü+öä#,.-Ü*ÖÄ';:_~@€µ|
    Die Wahrscheinlichkeit, da das richtige Passwort (15 Zeichen) zu erraten, liegt bei (1/100)^15, also 0,000000000000000000000000000001, richtig?
    Demnach bräuchte man im Durchschnitt 5x10^28 Versuche [(1x10^29)/2], um das Passwort zu erraten, da man nach der Hälfte der Möglichkeiten das Passwort theoretisch haben sollte - also:
    50'000'000'000'000'000'000'000'000'000 notwendige Versuche


    Wie viele Versuche pro Sekunde schafft ein Prozessor heutzutage nochmal? Angenommen, wir schaffen 2'000'000'000 Versuche pro Sekunde -->
    50'000'000'000'000'000'000'000'000'000 Versuche
    /2'000'000'000 (Versuche pro Sekunde) --> 25000000000000000000 Sekunden
    /60 (Sekunden pro Minute) --> 416666666666666666 Minuten
    /60 (Minuten pro Stunde) --> 6944444444444444 Stunden
    /24 (Stunden pro Tag) --> 289351851851851 Tage
    /365 (Tage pro Jahr) --> 792'744'799'594 Jahre
    Rechenzeit 792'744'799'594 Jahre.


    Wenn ich irgendwo einen Denkfehler habe, korregiert mich, aber ich lebe solange in dem Glauben weiter, MD5-Hashes seien (noch) sicher.


    Edit, und selbst wenn ein 8-Kerner noch 8x so schnell ist, dauerts immernoch 792'744'799'594 / 8 = 99'093'099'949 Jahre

    Einmal editiert, zuletzt von oernqsvfu_fgvaxg ()

  • Ich kann dir eine Wordlist mit 1,5 Milliarden Wörtern geben :P

    Es können 300 Milliarden Wörter sein, die Kombination ist zu random ;)
    Übrigens müsst ihr bedenken, dass das ganze exponentiell steigt.


    Ich brauche, um bis zu 4 Buchstaben hintereinander, a-z A-Z, zu knacken, um die 30 Minuten.
    Für noch einen Buchstaben mehr muss ich noch mal alle durchgehen, also 52 mal mehr.
    Noch einen Buchstaben noch mal 52 mal mehr.
    Und wenn ihr denn bei 20, 25, 30 Zeichen angekommen seit... ;)
    Ehrlich gesagt, rechne ich auch nich damit, dass jemand das geknackt bekommt ;)


    Testumgebung: Java. Script dafür auf Nachfrage, müsste es erst wieder raussuchen.


  • #nachfrage :P

  • #nachfrage :P

    Wollte gerade schreiben, dass ich das gar nicht mehr finde, aber mein Eclipse-Projektordner lässt mich ja nie im Stich :love:

    Java
    import java.io.FileOutputStream;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.math.BigInteger;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.sql.SQLException;public class MainClass {	public static MessageDigest md;	public static String pattern = "qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJKLYXCVBNM0123456789!\"§$%&/()=?{[]}\\^<>,;.:-_|";	public static Integer etage = 5;	public static void main(String[] args) throws NoSuchAlgorithmException, ClassNotFoundException, SQLException, IOException {		//Class.forName("com.mysql.jdbc.Driver");		//Connection connect = DriverManager.getConnection("jdbc:mysql://localhost/md5_hashes?user=root&password=");		FileOutputStream fos = new FileOutputStream("./codes.txt");		md = MessageDigest.getInstance("MD5");		hash("", fos);		fos.close();	}	public static void hash(String str, FileOutputStream fos) throws UnsupportedEncodingException, IOException {		etage--;		for(int i = 0; i <= pattern.length(); i++) {			String str2 = str;			if(i >= 1)				str2 += pattern.charAt(i - 1);			System.out.print(str2 +"|");			if(etage == 0) {				md.update(str2.getBytes("UTF-8"));				String md5hash = new BigInteger(1, md.digest()).toString(16);				while(md5hash.length() != 32)					md5hash = "0"+ md5hash;				fos.write(new String(str2 +":"+ md5hash +"\r\n").getBytes("UTF-8"));			} else {				hash(str2, fos);				etage++;			}		}		System.out.println();	}}

    Musst du eventuell ein bischen aussortieren, habe ein paar Zeilen rausgeschmissen, die nichts für junge Fohlen sind :whistling:

  • Ab da meint das BruteForce Programm man hätte das richtige Passwort geknackt, dabei hat man nur ein unrelevantes Passwort und könnte sich nur bei diesem Service dann einloggen. Hätte natürlich keinen Sinn, denn wenn ich schon die Datenbank dazu habe, warum sollte ich mir dann ein Passwort bruteforcen wenn ich den Hash doch einfach auf ein beliebiges neues abändern kann.


    Oh doch, den die meisten leute benutzen ds selbe Passwort auf diversen Plattformen, wenn ich nun eine datenbank habe in der e-mailadressen und gehashte pws stehen kann ich davon ausgehen, dass ich bei 25% in die e-mail konnten rein komme und wenn ich die e-mail konnten habe, kann ich mit hilfe der Funktion passwort vergessen beinahe überall rein.


    Tion:

    Zitat

    Ich brauche, um bis zu 4 Buchstaben hintereinander, a-z A-Z, zu knacken, um die 30 Minuten.


    Hm. sollte schneller gehen, ich mache mal nen test.


  • Oh doch, den die meisten leute benutzen ds selbe Passwort auf diversen Plattformen, wenn ich nun eine datenbank habe in der e-mailadressen und gehashte pws stehen kann ich davon ausgehen, dass ich bei 25% in die e-mail konnten rein komme und wenn ich die e-mail konnten habe, kann ich mit hilfe der Funktion passwort vergessen beinahe überall rein.


    Tion:


    Hm. sollte schneller gehen, ich mache mal nen test.


    Angenommen du "verschlüsselst" dein Passwort "123456" mit md5(md5("123456"));
    Nun geht jemand hin und bruteforced das durch und es würde zum unwahrscheinlichen Fall kommen, dass er eine Kollision findet. D.h. z.B. "545645645" hätte den gleichen Hash wie "123456".
    Was will er nun mit 545645645 wenn die E-Mail Provider ihre Passwörter mit SHA512 "verschlüsseln".

  • Angenommen du "verschlüsselst" dein Passwort "123456" mit md5(md5("123456"));


    ein gutes brute force programm testet auch doppelte und dreifache hashes.


    Und meine Überlegung ist leider garnicht so abwägig, wie mann immer wieder merkt...


    BTW: Hbae mich mal dran gesetzt und schreibe ein tool für meinen root Server der alle Möglichen Passwörter durchgehen soll und bis zu viermal verschlüsselt zusammen mit den blanktext in eine mysqldb eintragen soll. Dann ist mir auch egal ob dieser 5 Jahre braucht um ein 30 Zeichen PW in die datenbank zu schreiben. später habe ich innerhalb von paar sekunden die möglichen rein texte.



    Und ich denke ich bin nicht der erste der auf die idee kommt, zudem mache ich dass nur aus spass und nur mit einem Server. nicht auszudenken was jemand mit Botnetz damit machen könnte.


  • BTW: Hbae mich mal dran gesetzt und schreibe ein tool für meinen root Server der alle Möglichen Passwörter durchgehen soll und bis zu viermal verschlüsselt zusammen mit den blanktext in eine mysqldb eintragen soll. Dann ist mir auch egal ob dieser 5 Jahre braucht um ein 30 Zeichen PW in die datenbank zu schreiben. später habe ich innerhalb von paar sekunden die möglichen rein texte.

    Ein Hash ist 32 Zeichen lang, also 32 Byte.
    In ein Kilobyte bekommst du also 32 Hashes ( ohne Plain ), in ein Megabyte 32.768 Hashes, Gigabyte 33.554.432, Terrabyte 34.359.738.368
    Mach dich auf eine enorm große Datenbank mit sehr langsamen Zugriffen bereit ;)


    Anyway, ich hätte Interesse, auch wenn ich glaube, dass ich mir jemanden mit Botnet suche und die auf ein paar Freehostern sammeln lasse :D


  • Oh doch, den die meisten leute benutzen ds selbe Passwort auf diversen Plattformen, wenn ich nun eine datenbank habe in der e-mailadressen und gehashte pws stehen kann ich davon ausgehen, dass ich bei 25% in die e-mail konnten rein komme und wenn ich die e-mail konnten habe, kann ich mit hilfe der Funktion passwort vergessen beinahe überall rein.


    Tion:


    Hm. sollte schneller gehen, ich mache mal nen test.


    Wenn aber das Passwort vor dem Hashen noch verändert wird (=gesalzen), z.B. eine 1 (Achtung, zu simpel!) angehangen wird, dann kriegst du ja nur "passwort1" als Reintext, wobei der eigentliche Reintext ja "passwort" ist. Wenn ein anderer Service einen anderen String anhängt, dann kommst du mit deinem "passwort1" nicht weiter, weil dort ja "passwort2" benötigt wird. Mal davon abgesehen verhindert ja ein solches Hinzufügen eines Salts ebenfalls das einloggen mit dem herausgefundenen Passwort, denn du möchtest dich ja mit "Passwort1" einloggen --> Server vergleicht den Hash von "Passwort11" (da er ja nochmal den Saltstring anhängt) mit dem gespeicherten Hash von "passwort1" --> kein Login möglich.


    Generell ist doch die Überlegung, dass jemand an die Hashes kommt, sie aber nicht verändert, sondern lieber bruteforced doch sehr abwegig, da er, wenn er den Saltstring nicht kennt, damit auch nichts anfangen kann. Selbst wenn dieser unrealistische Fall irgendwann irgendwo auf der Erde eintritt, dass jemand den Passworthash + Saltstring kennt, aber die Hashes in der DB nicht verändert, dann gibt es immernoch Menschen mit so dummen Passwörtern, dass es für die Hashes schon die Reintexte im Internet gibt und somit würde sich niemand die Mühe machen, ein ordentliches Passwort selber zu bruten. Warum schwer, wenn es auch einfach geht?

  • Hier eine kleine Statistik was man heute so schafft mit einer GPU*: 5 Milliarden MD5 Hashesh(hab mit meiner Laptop Graka 470 Millionen geschafft, Kollege mit seiner älteren Desktop - 2Milliarden, 5 Milliarden mit einer aktuellen) die Sekunde. Jetzt Hashed euer Passwort mal ohne Salt ;)


    Weiters: Wenn jemand in euerem System drinnen ist schaut er sich auch gleich die generierung eures Passworts an, wie Trooper schon sagte hat der Angreifer nicht nur einen PC sondern gleich ein ganzes Botnet.


    Also ist es eine Frage der Zeit wie schnell er das Passwort eines Users hat, und geht bitte nicht von 100Zeichen aus die meisten User nutzen das Alphabet + Ziffern mit einer Länge von 6 Zeichen.


    Mit Methoden wie Scrypt verlängert ihr nur die Zeit(die auch der User hat um sein PW auf anderen Plattformen/Portalen zu ändern) und um das geht es hier.


    @$this->secure(); Hier geht es nicht darum das System noch abzusichern, sondern die Passwörter der User


    *Software: http://hashcat.net/oclhashcat-plus/

  • (basierend auf den oben stehenden berechneten Zahlen)
    Ok, eine Grafikkarte schafft es doppelt so schnell, also statt 792'744'799'594 Jahre 396'372'399'797 Jahre. Wie viele PCs hast du denn so in deinem Botnetz? Damit es ein Jahr dauert, müsstest du also 396'372'399'797 PC 24/7 mit 100% GPU Auslastung laufen lassen. Viel Spaß. Angenommen wir haben bei 7 Mrd Menschen auf der Welt ca. 14Mrd. Computer auf der Welt, die ALLE auch noch eine super GPU haben. Und angenommen, sie gehören ALLE deinem Botnetz an und sie rechnen ALLE 24/7 mit 100% Auslastung für dich durch, dann dauert es immernoch 28!!! Jahre, bis du EINEN MD5-Hash gebrutet hast.


    Wo liegt jetzt noch gleich die Sicherheitslücke? Die einzige, die es gibt, sind dumme Passwörter, das ist aber die Schuld der User, sie werden schließlich immer und überall darauf hingewiesen, sichere Passwörter zu wählen. Wenn sie es dann nicht tuen, dann kann ich auch nichts dafür.

  • Totale Schwachsinnsrechnung ohne Realitätsbezug. Keiner wird beim Bruteforcen so herangehen und von der schlimmstmöglichen Ausgangssituation ausgehen. Wie zabus schon sagte, nehmen Leute in der Regel lower case + numeric Passwörter. In den seltensten Fällen auch noch upper case, außer es ist Pflicht, wie in diesem Forum hier.