Argon2id Password Hashing

PHP Bulletin Board: il sistema libero per la gestione di forum
Regole del forum
sezione dedicata al phpbb in generale: sviluppo, utilizzo, personalizzazioni ecc.

Argon2id Password Hashing

Messaggioda Silver Surfer » ven 13 mag 2022, 9:37

Argon2id Password Hashing in phpBB 3.0.12+!
Sempre grazie a Dion Designs

Anche se l'hashing della password PHPass utilizzato da phpBB 3.0.x è ancora abbastanza sicuro, oggi esistono algoritmi di hashing molto più sicuri. Il migliore in assoluto per i forum di discussione è l'algoritmo Argon2id e la migliore implementazione di Argon2id è in libsodium . L'estensione PHP sodium è un'interfaccia per libsodium; è integrato in PHP 7.2 e versioni successive ed è disponibile per PHP 7.0 e 7.1 tramite PECL. L'hashing Argon2id utilizzando l'estensione sodium richiede libsodium 1.0.13 o successive.
Verificare i settaggi Hosting nel caso.

I seguenti semplici hack forniranno alla tua scheda phpBB 3.0.12+ il pieno supporto per la memorizzazione e la verifica delle password con gli hash Argon2id. Converte anche una vecchia password PHPass in una password Argon2id la prima volta che un utente effettuerà il login! Il nuovo hashing si verificherà solo se la tua scheda phpBB 3.0.12+ esegue PHP 7.0+ con l'estensione sodium installata; in caso contrario, le password continueranno a utilizzare PHPass. Ciò significa che puoi applicare gli hack anche se il tuo server attualmente non supporta l'hashing Argon2id e inizieranno automaticamente a funzionare quando lo farà.

Ovviamente, per farlo funzionare, devi prima rendere la tua scheda phpBB 3.0.12+ compatibile con PHP 7+ .
Ci sono due cose molto importanti che devi tenere presente.

Innanzitutto: questo è un cambiamento a senso unico. Una volta che i tuoi utenti hanno memorizzato le loro password con gli hash Argon2id, non puoi tornare a una versione precedente di PHP, né puoi rimuovere l'estensione sodium PHP. Se ciò accadrà, le password Argon2id non funzioneranno più e gli utenti dovranno reimpostare le proprie password.

In secondo luogo, l'hashing superiore nell'estensione sodium ha il prezzo di un maggiore utilizzo della memoria, quando le password vengono generate o verificate (circa 7 MB in più rispetto a PHPass). Ciò non dovrebbe influire sul tuo sito, ma per sicurezza, potresti dover aggiungere la seguente riga al tuo file del phpBB3 config.php prima di andare oltre:

Codice: Seleziona tutto
@ini_set('memory_limit', '128M');


Ora è il momento per un po' di hacking!

La prima cosa che devi fare è eseguire la seguente query, in phpMyAdmin o usando l'applicazione mysql dalla riga di comando. Se la tua scheda phpBB 3.0.12+ ha tantissimi iscritti, l'esecuzione di questa query potrebbe richiedere diversi secondi. Se ha più di 250.000 membri, (fortunato te) pensa seriamente all'utilizzo di mysql dalla riga di comando.

Se il prefisso della tabella definito per l'installazione di phpBB non è phpbb, assicurati di modificare phpbb_users nella query seguente per utilizzare il prefisso della tabella corretto!

Codice: Seleziona tutto
ALTER TABLE phpbb_users CHANGE user_password user_password VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';


Ora dobbiamo fare tre modifiche. Per prima cosa, vai su include/functions.php e trova quanto segue nella funzione phpbb_hash():

Codice: Seleziona tutto
$itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';


Cambialo in:

Codice: Seleziona tutto
if (defined('SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13') && $hash = sodium_crypto_pwhash_str($password, 8, 8192 * 1024)) {
      return $hash;
   }

   $itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';


Quindi, vai alcune righe sotto fino alla funzione phpbb_check_hash() e trova quanto segue:

Codice: Seleziona tutto
$itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';


Cambialo in:

Codice: Seleziona tutto
if (empty($hash)) {
      return false;
   }

   if (defined('SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13') && strpos($hash, '$argon2id$') === 0) {
      return sodium_crypto_pwhash_str_verify($hash, $password);
   }

   $itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';



Salva il file. Infine, vai su includes/auth/auth_db.php e trova quanto segue (vicino al fondo):

Codice: Seleziona tutto
// Check for old password hash...
      if (strlen($row['user_password']) == 32)


Cambialo in:

Codice: Seleziona tutto
   // Check for old password hashes...
      if (strlen($row['user_password']) == 32 || (defined('SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13') && strpos($row['user_password'], '$argon2id$') !== 0))


Salva il file.

Questo è tutto! La tua scheda phpBB 3.0.12+ ora supporterà l'hashing Argon2id. Rispetto al phpBB 3.3, questo hack crea hash Argon2id più sicuri e non si limita a PHP 7.3+. (Ti crea qualche interrogativo, vero?)
”Un guerriero senza patria e senza spada
Con un piede nel passato
E lo sguardo dritto e aperto nel futuro”
Avatar utente
Silver Surfer
Principe
Principe
 
Messaggi: 82343
Iscritto il: gio 20 set 2007, 21:13

Torna a PhpBB

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti

cron