Kısa cevaba tam kaynak koduna göz atabilirsiniz
/* We're using this method instead of == in order to provide
* resistance towards timing attacks. This is a constant time
* equality check that will always check every byte of both
* values. */
for (i = 0; i < hash_len; i++) {
status |= (ret->val[i]^hash[i]);
}
php'nin password_verify işlevinin bir alıntıdır: evet, öyle.
Uzun cevap: gerekli değil. buna gerek yok neden
anlamak için, dizeleri bakmak gerekir kıyaslanan: Aynı şifrenin 5 farklı sağlamalarının var
$2y$10$9JxHB8U1QKsLS/ynplKzm.iIO7f6gtTKYA61ppVuANYxWNCA5DW1S
$2y$10$ILlWQrYyDJvHHkxcCgjm7OThLRAmMcTzsJOZOwjaSYiRUHq8LVYde
$2y$10$8JfydDKUNbOeiybwZ9m.j.5TC8CBqkc3RZu2DX42A4dFNpNYPWfzm
$2y$10$qeG.53lr9PVVGN4Yk.kSZuOMpfone5kINyWVpAf2gUXPseU2WdSzK
$2y$10$nZUgPUwiXIvCJ9BY1wbtbuV5vH6yff9CNyumFsI/NN2eJmf20iec.
. biçimi şöyledir:
$2y$10$saltsaltsaltsaltsaltsahashhashhashhashhashhashhashhas
Şimdi, (zamanlama saldırıları çalışan olacaktır biri) uzak bir saldırgana, tuz bir sır. Ve onların deneyini yeniden kazandığımızda tuz aynı. Örneğin: Saldırgan parola "abc" çalışır
stored password "test":
hash = $2y$10$9JxHB8U1QKsLS/ynplKzm.iIO7f6gtTKYA61ppVuANYxWNCA5DW1S
ise içten password_verify()
crypt("abc", hash)
arayacak.
$2y$10$9JxHB8U1QKsLS/ynplKzm.iIO7f6gtTKYA61ppVuANYxWNCA5DW1S
$2y$10$9JxHB8U1QKsLS/ynplKzm.FTYpGS/gNDw4SB6YD0wEtCSPgGvtPim
Bildirim aynıdır tuz: Artık
$2y$10$9JxHB8U1QKsLS/ynplKzm.FTYpGS/gNDw4SB6YD0wEtCSPgGvtPim
, yanına tarafından, bu iki sağlamalarının en tarafını bakalım: Hangi sonuçlanır? İlk
.
'a kadar olan her şeyin aynı olduğuna dikkat edin. Ayrıca saldırganın tuzun ne olduğu hakkında hiçbir fikri olmadığını farkedin.
Saldırganın zamanlama saldırısını karşılaştırabiliyor olsaydı, iyi olmazdı. Çünkü onlar tuzu bilmezler (ve bu yüzden hashın tuzdan yoksun olduğu zamandan beri zamanını boşa harcadığı sonucuna varırlar). Bu nedenle zamanlama güvenliği kesinlikle gerekli değildir.
Neden dahil edilir? Çünkü herkes hata yapar. Çünkü savunma derinliği iyi bir fikir.Çünkü bu analiz, hash ile ilgili hiçbir şeyin tuz olmadan yararlı olduğunu varsaymaktadır (örneğin: bcrypt'deki bir kusur pahasına dayalı karmaları önyarsa, bu yüzden tuzu bilmiyorsanız, tuş boşluğu 72^255'ten azaltılır).
Kısacası, sahip olmak için iyi bir şey ama kesinlikle gerekli değil ...
Teşekkür ederiz! Bu repoyu daha önce hiç görmedim. – Nevertheless