Passwort Verschlüsselung (nicht md5) ?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
art
brechen
code
dank
eins
ergebnis
gewinn
lieber lotto
lotto
machen
methode
nutz
re
sinn
sorgen
speichern
unterschiedlichen strings
url
zeichen
zweck
-
Hallo
ich habe gelesen, dass mei md5() die Möglichkeit besteht,
dass aus zwei unterschiedlichen Strings der exact gleiche Hash bei raus kommt
wie kann ich ein Passwort zum Speichern am besten verschlüsseln?
... also was sind Alternativen um ein Passwort verschlüsselt zu speichern ?
ref="/tag/dank">Danke!
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Sha 1 ist auf jeden Fall sicherer.
Doch worum geht es bei deinen Passwörtern, dass sie so gesichert werden sollen?
Top Secret?
http://php.net/manual/de/function.sha1.php -
osuche schrieb:
Super. Es ist 124.009.608.936.202 mal so wahrscheinlich, 3 mal hintereinander im Lotto zu gewinnen. Wenn du dir für deine Seite darum Sorgen machst, dann gehe lieber Lotto spielen.
Hallo
ich habe gelesen, dass mei md5() die Möglichkeit besteht,
dass aus zwei unterschiedlichen Strings der exact gleiche Hash bei raus kommt -
Oder du nimmst einfach moderne Verschlüsselungen wie den DES (ok, der ist nicht mehr ganz so modern, aber wenn man nicht gerade einen 500.000$ teuren, hochspezialisierten Rechner hat, braucht man trotzdem viele Tage um die Verschlüsselung zu brechen, was sich bei einer Privatperson nie im Leben lohnt) oder den etwas moderneren AES. Beides wird von SQL-Systemen mitgeliefert, ob das PHP auch bietet, weiß ich gerade nicht (aber der Große Google schon, also frag da mal nach)
drafed-map schrieb:
Super. Es ist 124.009.608.936.202 mal so wahrscheinlich, 3 mal hintereinander im Lotto zu gewinnen. Wenn du dir für deine Seite darum Sorgen machst, dann gehe lieber Lotto spielen.
Nichts desto trotz hat man das schon genutzt um gefälschte Zertifikte zu erstellen, die per RSA und MD5 codiert waren (der Name des Zertifikats fehlt gerade, aber trotz der hohen (Un-)Warscheinlichkeit eines Treffers kann man gezielt danach suchen, bzw. diese provozieren und damit den Hash brechen) - Mal davon abgesehen gibt es auch schon Rainbowtables zum zurückrechenen und trotzdem macht sich niemand die Arbeit, wenn nicht etwas wirklich Wichtiges/Geldbringendes damit gehasht wurde... also hast du natürlich Recht
Beitrag zuletzt geändert: 10.11.2011 16:36:09 von alphara -
osuche schrieb:
ist nur ein beispiel mit sha1:
... wie kann ich ein Passwort zum Speichern am besten verschlüsseln ...<?php $salt = 'lorem ipsum dolor sit amet'; // oder irgendein text deines wahles $pwd = 'gehtdinixan'; $res = sha1($pwd); for($i = 0; $i < 100000; $i++){ $res = sha1($res . sha1($salt . sha1($res))); } echo $res;
... also was sind Alternativen um ein Passwort verschlüsselt zu speichern ?
es 'nicht zu speichern'. auf alle fälle nicht auf die übliche art ;) [nachdenken und lösungen finden und nicht vorhandene kopieren!]
Beitrag zuletzt geändert: 10.11.2011 16:56:27 von hemiolos -
naja, wirklich viel Aufwand will ich garnicht betreiben um einfache User-Zugangs-Daten zu verschlüsseln
es soll nur einfach funktionieren, und bei der Wahrscheinlichkeit kann ich wohl getrost bei md5() bleiben
aber sha1 werde ich auch mal ausprobieren,
sooooo viel Aufwand ist das ja auch nicht, wenn ich es so mache
$pwstored ist das genau wie $pwcheck verschlüsselt gespeicherte Passwort
$pwinput = $_REQUEST['password']; $salt = 'xY61FuMt7gizR5'; $pwcheck = sha1($pwinput . $salt); if ($pwcheck == $pwstored) { // ---- OK ---- }
sonst hatte ich halt einfach md5($pwinput . $salt); anstatt sha1($pwinput . $salt);
was ja auch OK zu sein scheint, ... oder wie würdet Ihr es (anders) machen ?
Danke!
EDIT:
Danke @hemiolos für das Beispiel, aber warum machst Du eine Schleife mit 100k Schritten
ohne dann innerhalb der Schleife das $i zu verwenden ... ??? #
kapier' ich grad garnicht
warum nicht einfach so
$res1 = sha1($pwd); $res2 = sha1($res1 . sha1($salt . sha1(res1))); ...
und OK ok ... ein Passwort NICHT zu speichern ist kein guter Plan ... eher Sinnfrei ^^
Beitrag zuletzt geändert: 10.11.2011 17:21:01 von osuche -
osuche schrieb:
$i zählt nur die schritte und die müssen nicht genau 100000 sein. es ist vielmehr so etwas wie die 'verschlüsselungsstärke'. dein code verschlüsselt 'nur' 2 mal, mein code 100000 mal, weil bei jedem schritt von $i wird $res dem selben prozedere unterworfen. du kannst es so sichtbarmachen:
... warum machst Du eine Schleife mit 100k Schritten ohne dann innerhalb der Schleife das $i zu verwenden ... ??? # kapier' ich grad garnicht
warum nicht einfach so$res1 = sha1($pwd); $res2 = sha1($res1 . sha1($salt . sha1(res1))); ...
hier geht es 'nur' bis 1000 (sonst dauert die rendering im browser eine halbe ewigkeit) und wie du sehen kannst jede schritt 'verschärft' die lage.<?php $salt = 'lorem ipsum dolor sit amet'; // oder irgendein text deines wahles $pwd = 'gehtdinixan'; $res = sha1($pwd); $res1 = ''; for($i = 0; $i < 1000; $i++){ $res = sha1($res . sha1($salt . sha1($res))); $res1 .= $i . ' * ' . $res . '<br />'; } echo $res . '<hr />' . $res1;
wollte nur demonstrieren, dass man ganz 'schnell' und 'günstig' sehr gewaltiges herstellen kann. aber im prinzip ging es um die art und weise, wie das passwort erstellt wird. solche methoden kann man unzählige erfinden und anwenden.
und OK ok ... ein Passwort NICHT zu speichern ist kein guter Plan ... eher Sinnfrei ^^
es ist eine frage des plans ;) je nach anwendung gibt es immer eine lösung, wo du kein passwort abzuspeichern brauchst! (um etwas zu erfahren gibt es immer ein erstes mal ;)
z.b.:
1. kunde loggt sich ein wie üblich: username/passwort
2. wird positiv identifiziert
3. nach pos. identifizierung erhält zugang, es wir vermerkt, dass sein passwort OK war (z.b.: $_SESSION['paswd'] = true ;) -
ok, verstehe,
aber macht das Sinn für ein einfaches User-Passwort
die Verschlüsselung 100te oder 1000de male zu machen ?!
ich denke doch, dase es alleine schon durch $salt relativ sicher ist
und kann kaum ent-schlüsselt werden, ausser vielleicht mit nem "SuperComputer",
aber wer hat schon sowas ...
ich denke für meine Zwecke wird ein einfaches Verschlüsseln genügen
entwerder
$pwcheck = sha1($pwinput . $salt);
oder halt
$pwcheck = md5($pwinput . $salt);
man könnte ja auch zwei $salt machen, eins vor und eins nach dem Klartext-Passwort
sha1($salt1 . $pwinput . $salt2);
ist doch bestimmt Ressourcen-Schonender als x-mal wieder und wieder verschlüsseln
oder ?
EDIT:
die Nutzung von SESSION ist ne gute Idee,
um nicht bei jedem Aufruf das Passwort neu prüfen zu müssen
Danke
Beitrag zuletzt geändert: 10.11.2011 19:39:58 von osuche -
osuche schrieb:
je nach zweck macht es sinn oder aber auch nicht. das kannst nur du entscheiden. die stärke und/oder art der verschlüsselung ist immer anwendungsspezifisch.
... aber macht das Sinn für ein einfaches User-Passwort
...
ich denke für meine Zwecke wird ein einfaches Verschlüsseln genügen -
Hallo,
MD5 kann man nicht so einfach entschlüsseln. Es gibt ja Methoden wie Brutal Force aber die versuchen jedes Zeichen zu verschlüsseln und vergleichen dann das mit dem verschlüsselten! Also es ist fast unmöglich! -
software-programmierer schrieb:
ja was hast du denn geraucht? ;)
Hallo,
MD5 kann man nicht so einfach entschlüsseln. Es gibt ja Methoden wie Brutal Force aber die versuchen jedes Zeichen zu verschlüsseln und vergleichen dann das mit dem verschlüsselten! Also es ist fast unmöglich!
gemacht wird das so: man nehme ein wörterbuch (wortliste) einfach aus dem internet; fange mit der verschlüsselung an und speichere die ergebnisse in eine db. und fertig ist die liste von 100000-200000 (oder sogar mehr) ergebnissen. du wirst es nicht glauben, wie ruck zuck ist das. solche listen gibt es abertausende im internet. google mal nach 1753ec1889f70aa87845cc5bfd3b4409 oder 012d14475d514a7a00a66823a91a50c2 oder was weiß ich ...
genau das ist der grund dafür, dass man keine wörter aus irgenwelchen sprachen nimmt. nimmt man die wirklich nicht? ;) oh ja! und wie man die nimmt. aus dummheit/faulheit &c.
(zwar ein bisschen was anders, aber: der securityboss von microsoft hatte vor jahren in aller öffentlichkeit - vor der laufender kamera - dazu ermuntert, die passwörter auf ein blatt papier zu schreiben, zusammenzufalten und unter der tastatur afzubewahren! lach nicht! so war es.) -
Ich nutze mittlerweile nurnoch
hash("sha512", strrev(base64_encode($text)));
auch wenn man MD5 jetzt nicht direkt unsicher nennen kann (zumindest im "privaten Gebrauch"), nutze ich vorsorglich nur noch SHA.
Beitrag zuletzt geändert: 17.11.2011 3:21:47 von fabo -
Hallo,
du kannst sha256 benutzen mit der phpFunktion 'crypt' (einseitige Verschl.)
http://de2.php.net/manual/de/function.crypt.php
MfG Source-Code -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage