kostenloser Webspace werbefrei: lima-city


Passwort Verschlüsselung (nicht md5) ?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    osuche

    osuche hat kostenlosen Webspace.

    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!

  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Sha 1 ist auf jeden Fall sicherer.:cookie:
    Doch worum geht es bei deinen Passwörtern, dass sie so gesichert werden sollen?
    Top Secret? :spammer:

    http://php.net/manual/de/function.sha1.php
  4. osuche schrieb:
    Hallo

    ich habe gelesen, dass mei md5() die Möglichkeit besteht,
    dass aus zwei unterschiedlichen Strings der exact gleiche Hash bei raus kommt
    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.
  5. 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
  6. osuche schrieb:
    ... wie kann ich ein Passwort zum Speichern am besten verschlüsseln ...
    ist nur ein beispiel mit sha1:
    <?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
  7. Autor dieses Themas

    osuche

    osuche hat kostenlosen Webspace.

    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
  8. osuche schrieb:
    ... 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)));
    ...
    $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:
    <?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;
    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.
    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 ;)
  9. Autor dieses Themas

    osuche

    osuche hat kostenlosen Webspace.

    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
  10. osuche schrieb:
    ... aber macht das Sinn für ein einfaches User-Passwort
    ...
    ich denke für meine Zwecke wird ein einfaches Verschlüsseln genügen
    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.
  11. software-programmierer

    software-programmierer hat kostenlosen Webspace.

    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!
  12. software-programmierer schrieb:
    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!
    ja was hast du denn geraucht? ;)

    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.)
  13. 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
  14. Hallo,

    du kannst sha256 benutzen mit der phpFunktion 'crypt' (einseitige Verschl.)

    http://de2.php.net/manual/de/function.crypt.php

    MfG Source-Code
  15. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!