PHP OpenSSL decrypt: prüfen, ob Passwort richtig war ?

xep22

Banned
Registriert
Apr. 2018
Beiträge
395
ich nutze folgenden Befehl zum entschlüsseln von texten :

Code:
openssl_decrypt('text', 'AES-128-CTR', $password, 0, $key);

doch bei falscher Passworteingabe erscheinen einfach kryptische Zeichen. kann man irgendwie direkt prüfen lassen ob das PW richtig ist ? gibts da direkt eine Funktion von openssl ?
 
Richtige codierung? Sprich UTF-8 überall eingestellt?
 
Ja, dann gib das PW so weiter. Wirst ja dann merken ob es korrekt ist oder nicht, den Fehler gibst du dann ja nur weiter.

Sonst musst du deinem Text vor dem Verschlüsseln eben mit einem Marker/Header versehen, damit du weißt, wann korrekt entschlüsselt wurde, indem du auf die Validität des Markers/Headers prüfst, nicht aber auf den Inhalt.

Wie gehst du das eigentlich an? Kommt mir etwas konfus vor, wenn du nach der "erfolgreichen" Authentifizierung einen Text zu entschlüsseln versuchst und dann merkst, dass das Passwort falsch ist?!
 
Soll das Passwort zur Authentisierung dienen oder willst Du nur eigene Passworte später wieder für die weitere Verwendung entschlüsseln?
Falls ersteres, dann auf keinen Fall die Passworte selber speichern. Auch nicht wenn Du sie mit einem AES-Key verschlüsselt. Für solche Fälle benutzt man einen Passwort-Hash, aus dem man nicht mehr das ursprüngliche Passwort berechnen kann.
Falls Du den Code für eine Art Passwort-Tresor nutzen willst, könntest Du z.B. noch einen bekannten Wert verschlüsseln und erst mal prüfen, ob nach der Entschlüsselung dieser Wert wieder herauskommt.

Auf jeden Fall solltest Du Dich hier gründlich einlesen, da man bei Passworten so viel falsch machen kann.
 
  • Gefällt mir
Reaktionen: Raijin
Also ich will einfach quasi per PHP den verschlüsselten Text dann entschlüsselt ausgeben. der user gibt das Passwort ein, wenn es falsch ist soll eben nicht das kryptische sondern eine Fehlermeldung erscheinen. darum gehts mir.
 
liggy schrieb:
Falls ersteres, dann auf keinen Fall die Passworte selber speichern. Auch nicht wenn Du sie mit einem AES-Key verschlüsselt. Für solche Fälle benutzt man einen Passwort-Hash, aus dem man nicht mehr das ursprüngliche Passwort berechnen kann.
Namentlich auch PBKDF2 genannt mit ner entsprechenden Anzahl an Runden. Heutzutage dann aber eher Argon2.

Ich hoffe aber, dass das bereits berücksichtigt wurde und man heutzutage nicht mehr explizit drauf hinweisen muss...
 
  • Gefällt mir
Reaktionen: FranzvonAssisi
Ansonsten ist ne einfache Lösung - ohne jetzt die Sicherheit mit zu bedenken - dass du den Text immer mit ner Zeichenkette vorne beginnst. Z.B. "--------Start--------".

Die fügst du direkt vorm Verschlüsseln ein, so dass der Nutzer es nicht mitbekommt und beim Entschlüsseln schaust du dann, ob diese vorhanden ist. Wenn ja -> Zeichen entfernen und dem Nutzer liefern, wenn Nein -> Passwort falsch.

Lg
 
Yuuri schrieb:
Namentlich auch PBKDF2 genannt mit ner entsprechenden Anzahl an Runden. Heutzutage dann aber eher Argon2.

Ist BCrypt schon wieder out? Das sollte soch eigentlich recht gut sein, da man die Runden einstellen kann.
 
Cool Master schrieb:
Ist BCrypt schon wieder out?
Schon wieder? Argon2 wurde 2015 als Sieger erkoren... :o

Ich sag mal so, BCrypt war nie gut, sondern lediglich ein besserer Kompromiss. SHA1 und MD5 haben zeigen ja bereits Kollisionen, fallen also dadurch schon komplett raus. Weiterhin ist es nicht nützlich, dass man Funktionen für Prüfsummen als Passwort-Hash verwendet, die quasi nur auf Geschwindigkeit optimiert sind. Argon2id ist eben auch gegen FPGAs und ASICs gehärtet, wo BCrypt bereits versagt. Auch kann BCrypt nicht mit mehr als 56 Bytes umgehen.

Allerdings ist Argon2 bspw. noch nicht wirklich in den Distros mit PHP angekommen... Mein letzter Versuch vor ner langen langen langen Weile hat immer noch maximal bcrypt hervorgebracht und nicht argon2. Eigentlich erbärmlich, wo doch sonst so viel für die Sicherheit getan wird, aber bei "blöden" Hashes kommt man nicht aus dem Knick... :/

Argon2 erlaubt außerdem die Anpassung von Threads, der Speichermenge und dem Zeitfaktor.
 
  • Gefällt mir
Reaktionen: Cool Master
Das erreichst Du, indem Du ein Authenticated Encryption with Associated Data (AEAD)-Schema verwendest.
Für AES ist das beispielsweise der Galois/Counter Mode (GCM).
 
Zurück
Oben