Was ist der beste Weg, um 2-Wege-Verschlüsselung mit PHP zu implementieren?

7

Ich möchte die Passwörter auf meiner Website mit einer 2-Wege-Verschlüsselung in PHP verschlüsseln. Ich bin auf die Mcrypt-Bibliothek gestoßen, aber es scheint so umständlich. Wer kennt noch andere Methoden, die einfacher, aber sicher sind? Ich habe Zugriff auf das Zend Framework, also würde eine Lösung, die es benutzt, auch funktionieren.

Ich brauche tatsächlich die 2-Wege-Verschlüsselung, weil mein Client in die Datenbank gehen und das Passwort ändern oder abrufen möchte.

    
Bamerza 15.03.2009, 09:08
quelle

4 Antworten

24

Sie sollten Passwörter hashed speichern (und richtig gesalzen ).

Es gibt keine Entschuldigung auf der Welt, die gut genug ist, um diese Regel zu brechen.

Gegenwärtig ist die Verwendung von crypt mit CRYPT_BLOWFISH die beste Vorgehensweise.
CRYPT_BLOWFISH in PHP ist eine Implementierung des BCrypt-Hash. Bcrypt basiert auf der Blowfish-Blockchiffre.

  • Wenn Ihr Client sich anmeldet, hashen Sie das eingegebene Passwort und vergleichen es mit dem in der Datenbank gespeicherten Hash. Wenn sie übereinstimmen, wird der Zugriff gewährt.

  • Wenn Ihr Kunde das Passwort ändern möchte, muss er dies über ein kleines Skript tun, das das neue Passwort korrekt hasht und in der DB speichert.

  • Wenn Ihr Client ein Passwort wiederherstellen möchte, sollte ein neues zufälliges Passwort generiert und an Ihren Client gesendet werden. Der Hash des neuen Passwortes ist im DB

  • gespeichert
  • Wenn Ihre Kunden das aktuelle Passwort nachschlagen wollen, haben sie kein Glück . Und das ist genau der Punkt des Hashing-Passworts: Das System kennt das Passwort nicht, daher kann es niemals "nachgeschlagen" / gestohlen werden.

Jeff hat darüber gebloggt: Sie speichern wahrscheinlich Passwörter falsch

Wenn Sie eine Standardbibliothek verwenden möchten, können Sie sich Folgendes ansehen: Portable PHP Password Hashing Framework und stellen Sie sicher Sie verwenden den CRYPT_BLOWFISH-Algorithmus.

(In der Regel ist es ein Ärgernis, mit den Datensätzen in Ihrer Datenbank zu experimentieren.) Viele Leute - einschließlich sehr erfahrener DB-Administratoren - haben das auf die harte Tour herausgefunden.)

    
Jacco 15.03.2009, 11:22
quelle
7

Verschlüsseln Sie keine Passwörter. Sie müssen sie nie wirklich entschlüsseln, Sie müssen sie nur verifizieren. Die Verwendung von Mcrypt ist nicht viel besser, als gar nichts zu tun, denn wenn ein Hacker in Ihre Site einbricht und die verschlüsselten Passwörter stehlen würde, wäre es wahrscheinlich auch möglich, den Schlüssel zu verschlüsseln.

Erstellen Sie eine einzelne "Passwort" -Funktion für Ihre PHP-Anwendung, wo Sie das Passwort des Benutzers nehmen, verketten Sie es mit einem Salz und führen Sie die resultierende Zeichenfolge durch die Sha-256-Hash-Funktion und das Ergebnis zurückgeben. Wann immer Sie ein Passwort verifizieren müssen, müssen Sie nur überprüfen, ob der Hash des Passworts mit dem Hash in der Datenbank übereinstimmt.

Ссылка

    
Jesse Weigert 15.03.2009 09:12
quelle
4

Wenn Sie die Kennwörter später wirklich abrufen müssen, sollten Sie mindestens private und öffentliche Schlüssel verwenden, damit ein Angreifer den privaten Schlüssel (der nicht auf demselben Computer gespeichert sein sollte) zum Entschlüsseln der Kennwörter benötigt.

Die 2 Funktionen, um dieses Ziel zu erreichen, sind openssl_public_encrypt() und < a href="http://de3.php.net/manual/en/function.openssl-private-decrypt.php"> openssl_private_decrypt()

    
tstenner 15.03.2009 09:37
quelle
1

Speichern Sie es entweder im Klartext oder speichern Sie einen Hash (d. h. NICHT reversibel) des Passworts.

Alles andere - insbesondere die symmetrische Verschlüsselung mit einem hartcodierten Schlüssel - ist im Grunde sinnlos.

Wenn Sie das tun, was Sie vorgeschlagen haben, und Ihr Computer kompromittiert wurde, erhält der Angreifer nicht nur die verschlüsselten Passwörter, sondern auch den Code und den Schlüssel, um sie zu entschlüsseln / p>

Wenn Sie Ihre Daten gegen jemanden schützen wollen, der physischen Zugriff auf die Maschine erhält, verwenden Sie ein verschlüsseltes Dateisystem (aber speichern Sie das Passwort immer noch in der Datenbank in der Datenbank). Natürlich muss bei jedem Neustart der Schlüssel manuell eingegeben werden, bevor das System benutzbar ist.

    
MarkR 15.03.2009 22:50
quelle

Tags und Links