• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

MD5 Sicherheit

Status
Für weitere Antworten geschlossen.

Web_spider

Neues Mitglied
Hoi Community,

Wie ich soeben schockiert feststellte, ist md5 gar nicht sicher. Ich dachte bis jetzt, dass man mit md5 passwörter nur verschlüsseln kann und nicht entschlüsseln. Ich wurde anders belehrt:

MD5-Decrypter by xpzone.de

Gibt es eine alternative?

MfG

Richard
 
Werbung:
MD5 ist aus folgendem Grund nicht mehr Sicher. MD5 gibt es nun schon seit Anfang der 90er und somit gibts auch shcon lang die Versuche die MD5 Hashes zu knacken. Der Beste Weg ist eben dafür, sie durch sogenannte Rainbow Tables zu jagen und mit anderen Hashes, wo man schon das Passwort hat, zu überprüfen.

Wenn eine Datenbank also schon ~15 Millionen Hashes samt PW hat, kann es schon mal vorkommen, dass dein Passwort auch dabei ist.

Beste Sicherheit dagegen ist, dass man sehr lange Passwörter mit vielen Zahlen und Buchstaben nimmt.


Demnach denke ich, dass auch sha nicht mehr unbedingt die Sicherste Variante ist. Am besten ist in diesem Falle immernoch, ein selbstgeschriebener Algorythmus, wenn man wirklich Sichere Passwörter haben will.
 
Werbung:
Lange Passwörter = sicher? Wenn sie mit md5 gesichert sind dann keineswegs.

Beispielsweise kann der Hash für "hallo" genau der gleiche sein wie für "nnaudsvg2798atvol2378tdhgasdnlksds".


theoretisch bräuchte man 16^32 hashes in einer DB um alles knacken zu können, das sind in etwa 3,4 * 10^38. Wenn man 15 Millionen Hashes hat, so ist die wahrscheinlichkeit dass man ausgerechnet einen hat, der auf dein Passwort passt = 4, * 10^(-33) -> selbst bei einer million Passwörter, die man versucht zu knacken, wäre die Wahrscheinlichkeit bei 4,41 * 10^(-27) also nicht sonderlich hoch ;)


Wobei das alles nur wahrscheinlichkeiten sind und keine absolute Sicherheit.


@topic: Schau mal hier rein: http://www.html.de/tutorials/11828-php-salted-hash-verschluesselungsverfahren.html
 
Halt. Diese Passwörter müssten 1. irgendwann mal generiert worden sein und 2. von irgendwem gesammelt worden sein. Wenn du also ein Passwort hast, was für die meisten Personen keinen besonderen Sinn ergibt, für einen selbst aber schon, ist die Wahrscheinlich keit sehr gering, dass das PW geknackt wird. Die Online-Cracker funktionieren alle nur mit den Rainbow Tables und das da jemand schonmal dein Passwort hatte ist dann sehr gering.
 
Also ich selbst verwende auch md5, aber mit einem zusätzlichen Salt.
Das heißt ich erstelle ienen zufälligen Salt von zum Beispiel vier oder fünf Zeichen und verschlüssele diesen mit MD5. Anschließend das eigentliche Passwort MD5 verschlüsseln. Zum Schluss häng ich beide aneinander und verschlüssel diesen wieder mit MD5.
Soweit ich weiß, macht das vBbulletin genauso :)
 
Werbung:
Ich glaube du verstehst da was falsch.


Anzahl an möglichen hashes: 16^32
Anzahl an möglicher Passwörtern: unendlich


Da man jedes Passwort verschlüsseln kann, müssen (unendlich viele) Hashes mehrfach vorkommen (Schubfachprinzip).


Es kann sein, dass ein sehr langes Passwort, das für niemanden einen Sinn ergibt, genau den gleichen Hash besitzt wie ein kurzes. Beispielsweise kann md5("abhuiqwbu2vgvfas") == md5("a") sein (nur ein Beispiel, nichts überprüftes).
 
Ich habd as eben mal ausgerechnet. Es wären dann also 3.532.13097 unterschiedliche Hashes. Würde aber bedeuten, dass die Rainbow Tables falsche ergebnisse ausspucken könnten.

Beudetet, wenn der Hash 598d4c200461b81522a3328565c25f7c = "Hallo" bedeutet, kann es auch sehr gut sein, dass dieser "Tschüss" bedeutet, seh ich das richtig? Was, wie ich bereits sagte, die Rainbow Tables verfälschen würde.
 
Ich hätte da ´ne andere frage:
Wenn ich ein Passwort mit einem Salt versehe und dann verschlüssele,
wie kann ich es dann z.B. bei einem Login vergleichen?
 
Werbung:
Du hast 16^32 Hashes, was deutlich mehr ist als 353.213.097


Und selbst wenn du nicht das richtige Passwort eingibst, es reicht wenn es den gleichen hash hat wie das richtig Passwort!
 
Ich hätte da ´ne andere frage:
Wenn ich ein Passwort mit einem Salt versehe und dann verschlüssele,
wie kann ich es dann z.B. bei einem Login vergleichen?

man vergelicht NIE passwort mit hash.

eingabe passwort -> den schlüssel verwenden und das ergebnis vergleichen. sonst macht md5 auch keinen sinn und man kann das passwort gelich als text sichern.

16^32 möglichkeiten als unsicher zu bezeichnen ist irgendwie witzig ...!
 
Unsicher ist relativ... wenn man ein passwort wie Hallo oder 564268723546 verwendet kann ich dir den hash davon innerhalb von einer minute via Rainbow Table knacken.

Aber einen Hash wie "[-]4]_[_Q " würde ich warscheinlich in 2 bis 3 Monaten noch nicht geknackt haben da selbst die Warscheinlichkeit eine Kollision mit einem Anderen strign zu finden seeeehr gering ist.

Also zwing deine User einfach mindestens ein Sonderzeichen in ihrem Passwort zu verwenden... dann vielleicht noch mindestens 1 großbuchstabe ein kleiner und eine zahl und dann eine Mindestlänge von 8 dann ist eigentlich alles ok =)

Dann kannst ja noch etwas versuchen wie
PHP:
$pass = sha1( md5( $pass ) . "mein Key" . sha1( $pass ) );
das gehört dann schon fast wieder zu dem Salt verfahren also einfach n bissel rumprobieren :)

Mehr fält mir gerade net ein :p

MFG Miah
 
Werbung:
man vergelicht NIE passwort mit hash.

eingabe passwort -> den schlüssel verwenden und das ergebnis vergleichen. sonst macht md5 auch keinen sinn und man kann das passwort gelich als text sichern.
Ja, aber
PHP:
<?php
    if (md5($_POST['passwd']) == $passwd_aus_db) {
        /*dies und das*/
    }
?>
geht ja dann nicht mehr,
weil der Salt ja zufällig generiert wird und so kann ich es doch dann nicht mehr vergleichen, oder?
 
du arbeites ja mit

PHP:
if(Salt($_POST['pass'], $db_salt) == Salt($db_hash))
{
    // bla
}

und dafür schreibst du dir dann och eine extra funktion die du auch nachlesen kannst :p
 
was spricht gehen sowas

sleep(1);
if(abfragen pro minute > 10) { sleep(1) }
$pass = md5( md5($x1) ^ sha1($x2)).sha1( md5($x2) ^ sha($x1));
$pass = mcrypt(MCRYPT_3DES, $pass, $fistlogin, MCRYPT_ENCRYPT)

ist natürlich nur nen ansatz kein fertiger code ;Jump, aber denjenigen der den wert via bruteforce rausbekommt will ich sehen, sobalt er einmal weiss wie du decodest ist es einfacher, aber ich denke immernoch recht zeitaufwendig, da es keinen ottonormaldecoder gibt.

100%schutz gibt es nicht, aber ich denke das ist ein guter weg, ich werde mal ein wenig drüber nachdenken, da gibts sicherlich bessere verfahren.
 
Werbung:
freak131 nette idee mit dem ^ ;) bin ich noch nicht drauf gekommen aber hier mal eben ne kleine funktion die ein passwort mit einer konstanten länge von 40 zeichen generiert ^^

PHP:
function myCrypt($pass, $key)
{
    $a = md5($pass) ^ sha1($key);
    $b = md5($key) ^ sha1($pass);
    return base64_encode($b ^ $a);
}

ein einfacher fester key den der admin der page erstellen sollte und das pass das der user eingegeben hat :p

Danke nochmal an freak131 für den denkanstoß ^.^
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben