Rehash Password

Bilakah masa yang kita perlu hash semua (rehash) kata laluan kita?

Setakat ini saya hanya jumpa satu masa sahaja iaitu apabila kita menukar sebarang setting kepada teknik hash sama ada faktor kerja (eg. ulangan) atau kita menukar algoritma atau library hash itu sendiri (eg. Bcrypt kepada Argon)

Pemeriksaan sama ada kata laluan tersebut memerlukan hash semula atau tidak hanya dibuat apabila pengguna membuat log masuk ke dalam sistem dengan menggunakan kata laluan sedia ada. Contoh kes, Ali mempunyai kata laluan “rahsia” untuk log masuk ke dalam sistem. Pada tahun lepas, hash untuk kata laluan Ali tersebut adalah 

$2y$10$3xEVXIUumHCpZU59ZJFoJuOs3lED9ZaNaszlzX71YVETC.tR/W8d.

Menggunakan Bcrypt, dengan faktor kerja ulangan sebanyak 10 ulangan. (rujuk $2y$10 di hadapan hash). Tetapi pada tahun ini, sistem telah menukar algoritma kata laluan kepada Argon dengan faktor kerja memori 1024, bebenang 2, dan masa adalah 2. Ali masih boleh menggunakan kata laluan yang sedia ada dan hash yang sedia ada untuk masuk ke dalam sistem kerana sistem akan tahu bahawa hash yang Ali ada sekarang adalah bersifat Bcrypt bukannya Argon yang baharu.

Selalunya kes ini akan berakhir begitu sahaja sehinggalah Ali menukar kata laluannya. Tetapi kita boleh membuat satu pemeriksaan tambahan selepas Ali berjaya masuk ke dalam sistem dengan memeriksa sama ada hash untuk kata laluannya memerlukan hash semula atau tidak dengan membuat kod seperti ini;

if (Hash::needsRehash($user->password)) {
    $user->password = Hash::make($request->password);
    $user->save();
}

Selepas itu, jika diperlukan untuk membuat hash semula, sistem akan menjana hash yang baru untuk kata laluan Ali dan menyimpannya ke dalam pangkalan data. Hash kata laluan Ali yang baru adalah

$argon2i$v=19$m=1024,t=2,p=2$Y0tPY1dGOXhsR3VZSkozaQ$xYEN90AjVjBqp6j27m2YmtfqrOtG6l6Qk6A0NHIxLxs

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.