 | |
02.05.2006, 22:10
| Nach oben
#21 | | Benutzer
Registriert seit: 31.12.2005
Beiträge: 90
|
So, nun schalte ich mich auch mal ein
Ich habe eine Userverwaltungsklasse. Darin kommt natürlich häufig (bei den ganzen Abfragen und so) md5() vor. Sollte ich das eventuell durch
myPwd()
ersetzten, sodass ich später die Passwortfunktion selbst ändern kann und das nur einmal in myPwd() machen muss.
Also solange ich md5() verwende, einfach alle md5()'s durch myPwd() ersetzten, und myPwd so definieren: PHP-Code: function myPwd($str) { return md5($str); }
später kann ich das immernoch durch sha1() ersetztzen oder sogar crypt() einsetzten.
Und ja, wenn man mal logisch denkt, ist das, was Waq gesagt hat, richtig:
md5(md5($var)) ist unsicherer als md5($var);
stellt euch folgendes vor: PHP-Code: $str = '876%/79 =ß *# *987 )(/ Klk asl ) as as asd2 34r d'; echo md5($str); echo md5(md5($str));
nun, wenn man nun md5($str) verwendet, dann muss der BrutoForcer also "876%/79 =ß *# *987 )(/ Klk asl ) as as asd2 34r d" erraten / generieren ... da kann er lange scannen. Aber wenn man md5(md5($str)) verwendet, dann muss der BrutoForcer ja nur noch das erraten, was md5($str) zurückgibt. Und md5($str) ist ja ein kürzerer String, der noch dazu aus einfacheren Zeichen besteht (also [a-z0-9] und so) ...
edit: http://www.sitepoint.com/forums/show...ybrid&t=213723 recht interessant
Geändert von björn (02.05.2006 um 22:13 Uhr).
|
| |
02.05.2006, 22:17
| Nach oben
#22 | | me pro ok?
Registriert seit: 07.09.2005 Ort: Pulheim bei Köln
Beiträge: 964
| Zitat: |
Und md5($str) ist ja ein kürzerer String, der noch dazu aus einfacheren Zeichen besteht (also [a-z0-9] und so)
| Und genau das ist der Punkt, der bei allen Hash-Algorithmen und Einwegverschlüsselungen zu Kollisionen führt.
__________________
Gedanken aus Draht stricken einen Zaun.
|
| |
02.05.2006, 22:49
| Nach oben
#23 | | Johannes Müller
Registriert seit: 15.09.2005 Ort: Königreich Flieden
Beiträge: 521
| Zitat: |
Zitat von björn sodass ich später die Passwortfunktion selbst ändern kann und das nur einmal in myPwd() machen muss.
[...]
später kann ich das immernoch durch sha1() ersetztzen oder sogar crypt() einsetzten. | dann kannst du aber auch allen usern neue passwörter zuschicken, weil die db-hashes ja nicht mehr stimmen.
__________________
Weißt Bescheid - Scheiß wie weit
|
| |
03.05.2006, 00:08
| Nach oben
#24 | | Erfahrener Benutzer
Registriert seit: 18.08.2005
Beiträge: 108
| Zitat: |
Zitat von Fat Tony d.h. läuft eine Anwendung zu erst auf einem Windows Server und zieht zB auf einen Linux um so sind alle Passwörter "fürn arsch". | Weniger. md5-crypt sollte auf jedem Linux und BSD der letzten Jahre verfügbar sein.
Auf exotischeren Unices (Solaris, AIX...) mag das anders sein, mit denen kenne ich mich nicht aus.
Und auf Windows bringt PHP die crypt-Funktionalität schon recht lange selbst mit, und da sollte md5-crypt dabei sein, vielleicht muss man es über einen entsprechenden Salt statt des Standards auswählen. Zitat: |
Zitat von Fat Tony Außerdem verwendet crypt nur die ersten 8 Buchstaben. | Das ist nur das olle DES-Crypt aus der Unix-Steinzeit... 2 Zeichen Salt und max. 8 Zeichen Passwort. md5-crypt hat diese Beschränkung nicht. Zitat: |
Zitat von Fat Tony Meiner Meinung am sichersten:
Mit md5 verschlüsseln und einen SALT verwenden. | Kann man machen... natürlich mit sha1 statt md5.
Ob das jetzt sicherer oder unsicherer als md5-crypt oder blowfish ist kann ich nicht beurteilen.
|
| |
03.05.2006, 07:17
| Nach oben
#25 | | Benutzer
Registriert seit: 31.12.2005
Beiträge: 90
| Zitat: |
Zitat von Lars Zitat: |
Und md5($str) ist ja ein kürzerer String, der noch dazu aus einfacheren Zeichen besteht (also [a-z0-9] und so)
| Und genau das ist der Punkt, der bei allen Hash-Algorithmen und Einwegverschlüsselungen zu Kollisionen führt. | ? Zitat: |
Zitat von $traight-$hoota Zitat: |
Zitat von björn sodass ich später die Passwortfunktion selbst ändern kann und das nur einmal in myPwd() machen muss.
[...]
später kann ich das immernoch durch sha1() ersetztzen oder sogar crypt() einsetzten. | dann kannst du aber auch allen usern neue passwörter zuschicken, weil die db-hashes ja nicht mehr stimmen. | ja, ich meinte ja nur, dass man dann, sofern man das Script auf einem anderen Server aufsetzt, dort anfangs noch die Verschlüsslung bestimmen kann (z.B. wenn die aktuelle nicht unterstützt ist oder nicht erwünscht ist). auf jeden fall ist man mal flexibler!!
|
| |
06.05.2006, 13:13
| Nach oben
#26 | | Benutzer
Registriert seit: 22.01.2006
Beiträge: 31
| Zitat: |
Zitat von björn Aber wenn man md5(md5($str)) verwendet, dann muss der BrutoForcer ja nur noch das erraten, was md5($str) zurückgibt. Und md5($str) ist ja ein kürzerer String, der noch dazu aus einfacheren Zeichen besteht (also [a-z0-9] und so) ... | Programmablauf:
1)Der "Bruteforcer" gibt eine Passwort möglichkeit die md5($str) entspricht
2)Das Programm wendet 2x md5() auf die gehashte passwort an um zu gucken ob es stimmt
3)Der Key der Herauskommt ist natürlich ein komplett anderer. [ md5(md5($str)) != md5(md5(md5($str))) ]
Der angreifer muss trotzdem das komplexe Passwort [oder eine Kollision davon] herausfinden, für md5(md5()) gibt es vermutlich keine rainbow tables fazit: md5(md5()) ist viel sicherer. viele Forensysteme benutzen doppeltes md5() mit jeweils einem salt - das knackt so schnell niemand ps: wo ist md5() eine Leiche? wer es einfach nur so einsetzt ist halt selber schuld ; )
__________________ PHP-Code: $x[] =& $x;
$x == $x;
Geändert von niklasboelter (06.05.2006 um 13:17 Uhr).
|
| |
06.05.2006, 13:35
| Nach oben
#27 | | Jann Hendrik Bekaan
Registriert seit: 02.12.2004 Ort: Wildeshausen
Beiträge: 2.213
| Zitat: |
Zitat von niklasboelter viele Forensysteme benutzen doppeltes md5() | Als das da wären?
|
| |
06.05.2006, 13:35
| Nach oben
#28 | | Christian Mühlroth
Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
| Zitat:
Programmablauf:
1)Der "Bruteforcer" gibt eine Passwort möglichkeit die md5($str) entspricht
2)Das Programm wendet 2x md5() auf die gehashte passwort an um zu gucken ob es stimmt
3)Der Key der Herauskommt ist natürlich ein komplett anderer. [ md5(md5($str)) != md5(md5(md5($str))) ]
Der angreifer muss trotzdem das komplexe Passwort [oder eine Kollision davon] herausfinden, für md5(md5()) gibt es vermutlich keine rainbow tables fazit: md5(md5()) ist viel sicherer. viele Forensysteme benutzen doppeltes md5() mit jeweils einem salt - das knackt so schnell niemand ps: wo ist md5() eine Leiche? wer es einfach nur so einsetzt ist halt selber schuld ; )
| Genau diesen Gedankengang bin ich auch gegangen.
verschachtelte MD5s mit einem Salt können nicht so schnell geknackt werden, wie auch? Woher will der angreifer wissen, wie oft er (das ja quasi transparent, da er an die Verschlüsselten Passwörter ja nicht wirklch rankommt) de-md5en muss? Weiß er nicht. Bei öffentlichen Scripten kann er diese zwar runterladen und ansehen, aber dennoch.
|
| |
06.05.2006, 13:37
| Nach oben
#29 | | Gast | Zitat:
Programmablauf:
1)Der "Bruteforcer" gibt eine Passwort möglichkeit die md5($str) entspricht
2)Das Programm wendet 2x md5() auf die gehashte passwort an um zu gucken ob es stimmt
3)Der Key der Herauskommt ist natürlich ein komplett anderer. [ md5(md5($str)) != md5(md5(md5($str))) ]
Der angreifer muss trotzdem das komplexe Passwort [oder eine Kollision davon] herausfinden, für md5(md5()) gibt es vermutlich keine rainbow tables fazit: md5(md5()) ist viel sicherer. viele Forensysteme benutzen doppeltes md5() mit jeweils einem salt - das knackt so schnell niemand ps: wo ist md5() eine Leiche? wer es einfach nur so einsetzt ist halt selber schuld ; )
bei einer bruteforece attacke werden keine hashes ausprobiert sondern stink normale mögliche passwörter.
| d.h. md5(md5()) = md5(md5())
wenn man aber salts einsetzt ist das nicht der fall, weil
md5(md5()) <> md5 ($salt.md5().$salt)
MfG Fat Tony
| |
| |
06.05.2006, 13:49
| Nach oben
#30 | | Erfahrener Benutzer
Registriert seit: 18.08.2005
Beiträge: 108
| Zitat: |
Zitat von niklasboelter Der angreifer muss trotzdem das komplexe Passwort [oder eine Kollision davon] herausfinden, | Nein, eine Kollision der Kollision geht werden des doppelten md5() auch. Zitat: |
Zitat von niklasboelter für md5(md5()) gibt es vermutlich keine rainbow tables | Das ist aber auch der einzige Vorteil, und von jedem mit etwas Ahnung, ein oder zwei leeren Festplatten und einer Woche Zeit zu ändern. Auf einen Vorteil, der mich vor dummen Script-Kiddies oder eine Woche lang schützt würde ich nicht viel geben.
Durch ein zweites md5 kann sich die Anzahl der Kollisionen nicht verringern, nur erhöhen, und ich habe meine arge Zweifel, dass md5 auf der Menge der 32-stelligen hexadezimalzahlen einen Isomorphismus darstellt, das wäre der einzige Fall, in dem md5 die Anzahl der Kollisionen nicht erhöht.
Und kryptoanalytisch sollte die Vermehrung der Kollisionen das brute-forcing vereinfachen.
Einem Hacker mit Ahnung macht man die Sache durch doppeltes md5() also einfacher.
Das ist wahrlich nicht meine Vorstellung von "viel sicherer". Zitat: |
Zitat von niklasboelter viele Forensysteme benutzen doppeltes md5() mit jeweils einem salt - das knackt so schnell niemand | Aber nur wegen des Salts.
Ich würde mich nicht darauf verlassen, was Horden von PHP-Programmierern machen... wenn man sich danach richten würde, hätten wir immer noch standardmässig register_globals... Zitat: |
Zitat von niklasboelter ps: wo ist md5() eine Leiche? wer es einfach nur so einsetzt ist halt selber schuld ; ) | md5 ist seit sha1 eine Leiche.
Der einzige Grund, warum dieser Zombie noch rumläuft sind die ganzen Totenbeschwörer, weswegen ich strikt dagegen bin, md5 in irgendeiner Weise öffentlich zu verteidigen.
|
| |
06.05.2006, 13:54
| Nach oben
#31 | | Erfahrener Benutzer
Registriert seit: 18.08.2005
Beiträge: 108
| Zitat: |
Zitat von Chr!s Woher will der angreifer wissen, wie oft er (das ja quasi transparent, da er an die Verschlüsselten Passwörter ja nicht wirklch rankommt) de-md5en muss? Weiß er nicht. | Die Passwort-Knackerei fängt dann an, wenn der Hacker an die Verschlüsselten Passwörter gekommen ist.
Davon auszugehen, dass der Hacker an die Datenbank kommt aber nicht an den PHP-Quellcode halte ich für... fahrlässig.
"gehe davon aus, dass der Angreifer dumm ist"
Sowas hat bei Sicherheitsüberlegungen nichts zu suchen.
|
| |
06.05.2006, 13:56
| Nach oben
#32 | | Benutzer
Registriert seit: 22.01.2006
Beiträge: 31
| Zitat: |
Zitat von Jann Hendrik Zitat: |
Zitat von niklasboelter viele Forensysteme benutzen doppeltes md5() | Als das da wären? | vBulletin , invision power board und yaBB SE (alle mit salt) [ich habe aber nicht die allerneuesten versionen] SMF hat sehr viele verschiedene algorhythmen [auch die von vBulletin und Invision] hier mal auszug aus smf LogInOut.php wenn das default verfahren von smf nicht klappt: ( sha1() mit salt) PHP-Code: if ($user_settings['passwd'] != $sha_passwd)
{
// Maybe we were too hasty... let's try some other authentication methods.
$other_passwords = array();
// None of the below cases will be used most of the time (because the salt is normally set.)
if ($user_settings['passwordSalt'] == '')
{
// YaBB SE, Discus, MD5 (used a lot), SHA-1 (used some), SMF 1.0.x, IkonBoard, and none at all.
$other_passwords[] = crypt($_REQUEST['passwrd'], substr($_REQUEST['passwrd'], 0, 2));
$other_passwords[] = crypt($_REQUEST['passwrd'], substr($user_settings['passwd'], 0, 2));
$other_passwords[] = md5($_REQUEST['passwrd']);
$other_passwords[] = sha1($_REQUEST['passwrd']);
$other_passwords[] = md5_hmac($_REQUEST['passwrd'], strtolower($user_settings['memberName']));
$other_passwords[] = md5($_REQUEST['passwrd'] . strtolower($user_settings['memberName']));
$other_passwords[] = $_REQUEST['passwrd'];
// This one is a strange one... MyPHP, crypt() on the MD5 hash.
$other_passwords[] = crypt(md5($_REQUEST['passwrd']), md5($_REQUEST['passwrd']));
// Snitz style - SHA-256. Technically, this is a downgrade, but most PHP configurations don't support sha256 anyway.
if (strlen($user_settings['passwd']) == 64 && function_exists('mhash') && defined('MHASH_SHA256'))
$other_passwords[] = bin2hex(mhash(MHASH_SHA256, $_REQUEST['passwrd']));
}
// The hash should be 40 if it's SHA-1, so we're safe with more here too.
elseif (strlen($user_settings['passwd']) == 32)
{
// vBulletin 3 style hashing? Let's welcome them with open arms \o/.
$other_passwords[] = md5(md5($_REQUEST['passwrd']) . $user_settings['passwordSalt']);
// Hmm.. p'raps it's Invision 2 style?
$other_passwords[] = md5(md5($user_settings['passwordSalt']) . md5($_REQUEST['passwrd']));
}
schön viele methoden ; ) phpBB das unglückliche entchen kommt natürlich mit einfachem md5() daher
__________________ PHP-Code: $x[] =& $x;
$x == $x;
Geändert von niklasboelter (06.05.2006 um 14:05 Uhr).
|
| |
07.05.2006, 09:15
| Nach oben
#33 | | Erfahrener Benutzer
Registriert seit: 30.10.2005
Beiträge: 279
|
Kann man nicht hingehen und einige Methoden zusammenmachen und dann verketten und dann halt varchar auf 100 erhöhen? PHP-Code: $hash = md5($pass.$salt).md5($pass);
|
| |
07.05.2006, 09:18
| Nach oben
#34 | | Benutzer
Registriert seit: 22.01.2006
Beiträge: 31
|
wenn du mir verrätst warum du fuer 64 zeichen ne feldlänge von 100 brauchst gerne
__________________ PHP-Code: $x[] =& $x;
$x == $x;
|
| |
07.05.2006, 15:43
| Nach oben
#35 | | Erfahrener Benutzer
Registriert seit: 18.08.2005
Beiträge: 108
| Zitat: |
Zitat von ex³ Kann man nicht hingehen und einige Methoden zusammenmachen und dann verketten und dann halt varchar auf 100 erhöhen? PHP-Code: $hash = md5($pass.$salt).md5($pass);
| Und was sollte das bringen?
|
| |
07.05.2006, 17:10
| Nach oben
#36 | | Benutzer
Registriert seit: 22.01.2006
Beiträge: 31
|
Na ist doch offensichtlich: es bringt gar nichts aber man verbraucht doppelt so viel speicher und CPU last!
warum nicht die Wirtschaft etwas ankurbeln? den hardware herstellern gehts doch sowieso schlecht.
[wer ironie findet...]
__________________ PHP-Code: $x[] =& $x;
$x == $x;
Geändert von niklasboelter (07.05.2006 um 17:12 Uhr).
|
| |
08.05.2006, 10:16
| Nach oben
#37 | | Erfahrener Benutzer
Registriert seit: 30.10.2005
Beiträge: 279
|
Dachte mir halt wenn man zwei Hashs aneinander hängt, hat man die doppelte Länge und zig mehr Kombinationen...wird das dann nicht sicherer? Dauert doch um einiges länger einen doppelt so langen String zu knacken.
Also ich will nicht md5() auf den Kram nochmal anwenden nur eben einen verketteten String speichern.
Oder hat jemand ne andere Idee wie man auf nem shared hoster mit sha1 oder md5 ne überaus guten php Schutz hinkriegt?
Geändert von ex³ (08.05.2006 um 10:19 Uhr).
|
| |
08.05.2006, 12:07
| Nach oben
#38 | | Martin Breuer
Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.642
|
soweit ich verstanden habe, ist doch sha1 schon sicher oder nicht?
|
| |
08.05.2006, 15:28
| Nach oben
#39 | | Benjamin Steininger
Registriert seit: 02.06.2005 Ort: weiher im tiefsten Odenwald
Beiträge: 1.180
| Zitat: |
Zitat von WarrenFaith soweit ich verstanden habe, ist doch sha1 schon sicher oder nicht? | sicher ist immer relativ, auch für sha-1 gabs wenn ich mich richtig erinne bei heise.de nen eintrag, dass man es auf irgendeine art schneller als rein auf brute-force lösen kann (glaub die potenz der anzahl der gebrauchten versuche ist um 2 oder 3 gesenkt worden .... ), aber alles spekulation.
mfg
robo47
|
| |
08.05.2006, 16:18
| Nach oben
#40 | | Benutzer
Registriert seit: 22.01.2006
Beiträge: 31
| Zitat: |
Zitat von ex³ Dachte mir halt wenn man zwei Hashs aneinander hängt, hat man die doppelte Länge und zig mehr Kombinationen...wird das dann nicht sicherer? Dauert doch um einiges länger einen doppelt so langen String zu knacken.
Also ich will nicht md5() auf den Kram nochmal anwenden nur eben einen verketteten String speichern.
Oder hat jemand ne andere Idee wie man auf nem shared hoster mit sha1 oder md5 ne überaus guten php Schutz hinkriegt? | Du schneidest die letzte hälft vom string ab und knackst die ganz normale md5 verschlüsselung. wo ist die Sicherheit? es ist zumindestens theoretisch noch unsicherer als normales md5()
@WarrenFaith: benutz es auf jedenfall mit einem salt, dann ist es "sicher"
__________________ PHP-Code: $x[] =& $x;
$x == $x;
|
| | |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | | |
Forumregeln
| Es ist dir nicht erlaubt, neue Themen zu verfassen. Es ist dir nicht erlaubt, auf Beiträge zu antworten. Es ist dir nicht erlaubt, Anhänge hochzuladen. Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten. | | |