karma olarak sha256 kullanarak ve kullanıcının kimliği ile tuzlama

5 Cevap php

Ben benim kullanıcıların şifreleri güvenli, benim site için kullanacağım sha256 değilim, ve tuz gibi ben usings kullanıcıları id (int AUTO_INCREMENT) düşünüyordum. o eşsiz ama çok uzun ve sert olmamak ve kamu (User.php? id = 1) ama eşsiz doğru olmadığını sadece önemli olacak?

hash('sha256', $id . $password);

5 Cevap

Evet, tuz (collissions yeterince düşüktür) tektir, ama aynı zamanda yeterli entropi (rastgele ve yeterince uzun olması) sahip olması önemlidir. Kullanıcı kimlikleri rastgele değildir ve çok kısa olabilir, bu yüzden en iyi bahis rastgele oluşturulan dizeleri kullanmak ve karma yanında kendi veritabanında saklayabilirsiniz etmektir.

UID 9 aptal bir şifre seçer ile bir kullanıcı varsayalım: password. Karma edilecek sonuç dizesi daha sonra olabilir 9password. Hatta bu durumda, tam dize rainbow tables (orijinal dize ile çok ve karma sürü içeren tablolar) görünebilir hayal edebiliyorum.

Bu durumda tuz olurdu, örneğin, OTAzMzYzODQzMjk5NTM1NDc1N, karma edilecek dize gökkuşağı tabloları görünmesini çok daha muhtemel olan, OTAzMzYzODQzMjk5NTM1NDc1Npassword olduğunu. Ayrıca, giriş dizeleri kaba kuvvet saldırıları riskini azaltarak, çok uzundur.

Bu işe ancak tuz kullanmanın amacı crypt algoritması güçlendirmek için kare tuşuna ayırt etmektir. Bu tuz için benzersiz bir, rastgele üretilen / saat tuzlu dize kullanmak çok daha iyi olurdu. Ayrıca aynı tabloda tuz ve karma anahtarını eklemek için değil daha iyi olurdu.

Sizin tuz kolayca tahmin edilebilir olmamalıdır. Birinde daha basit formlar var, sen sadece kullanarak mevcut TIMESTAMP dayalı bir tuz oluşturabilir

   date('U')

çok daha güvenli nedeniyle uzunluğu, teklik, ve DB saklayın ve kamuya açık yapmazlar aslında hangi. Daha sonra böyle bir şekilde bunu kullanmak istiyorum:

$hash = date('U');
$pass = hash('sha256', $hash . $password);

ve bildiğim kadarıyla giriş şifreleri kontrol gibi:

// return query object based on matching email/username
if ($userobj->pass === hash('sha256', $userobj->salt .$_POST['pass'])) {
    // correct pass
}

I don't think that is a good choice: I would use a more random salt saving it into the user record. Maybe saving in the password field this string: sha256($password . $randomSalt) . '$' . $randomSalt

Bu şekilde daha sonra oturum açma parolann kontrol etmek için tuz alabilirsiniz.

(Neyse ayrıca yalnız tuz için başka bir alanı kullanabilirsiniz)

Sürece tuz her kullanıcı için farklı olduğu gibi, bu iyi.