Raketenwilli: PHP-Funktion password_hash für Python: Lösung PASSWORD_ARGON2ID - Nachtrag: Stärke des Hashes

Beitrag lesen

Mit der Methode ARGON2ID kann ich Passwörter in Python erzeugen und in PHP verifizieren oder in Python3 erzeugen und in PHP verifizieren.

Statt Anleitung: Mein Test

Hm. Beim Python-Teil hab ich von mir selbst falsch abgeschrieben... Es fehlen Klammern hinter PasswordHasher.

Dazu kommt dann noch: Die PHP-Funktion

password_verify($hash, PASSWORD_ARGON2ID )

liefert für die so erzeugten Hashes ein true, was andeutet das diese zu schwach sind.

Mist!

Aber in den Tiefen des Handbuchs der wohl von Support lebenden Hersteller von argon2-cffi (Version jetzt 21.3.0) fand ich dann den Hinweis, dass ich deren argon2.PasswordHasher() anders initialisieren kann…

Mit

Python:

# pip install argon2-cffi nicht vergessen!

import argon2

time_cost   = 4       #Default wäre 3, mehr ist stärker
memory_cost = 65536   #mehr wäre stärke
parallelism = 1       #Default wäre 4, weniger ist auf der eigenen Maschine
                      # „stärker“ (verlangsamt die Erzeugung/Verifizierung)
                      #(Hacker beachten das aber nicht, wenn diese mit
                      #eigenen Programmen erbeutete Hash knacken wollen)
hash_len    = 32      #mehr (→längerer Hash) wäre stärker, 64 funktioniert…
salt_len    = 22      #Default wäre 16, andere sehen 22 als besser an
encoding    = 'utf-8'

passwordHasher = argon2.PasswordHasher(
    time_cost,
    memory_cost,
    parallelism,
    hash_len,
    salt_len,
    encoding
)

passwordHasher.hash("correct horse battery staple")

wird dann ein hash generiert, den dann in PHP die Funktion password_verify($hash, PASSWORD_ARGON2ID ) akzeptiert, also false liefert.

Dieses Problem ist also erst einmal gelöst. PHP kann man übrigens nach Konstanten fragen:

PASSWORD_ARGON2_DEFAULT_MEMORY_COST	«65536»
PASSWORD_ARGON2_DEFAULT_TIME_COST	«4»
PASSWORD_ARGON2_DEFAULT_THREADS	«1»
…

Da fehlt nur die Länge des Salts.