Benim kimlik şifreleme herhangi bir iyi mi?

5 Cevap php

Yani PHP şifreleme hakkında bir çok okuma oldum. Yani güvenli bir şekilde giriş bilgilerini saklamak için gerçekten çok iyi bir yöntem tam olarak ne olduğundan emin değilim o kadar.

Ancak, aşağıdaki işlev ben ile geldi budur:

function loginHash($username, $password){
    $salt = str_split($password,(strlen($password)/2)+1);
    $hash = hash('whirlpool', $username.$salt[0].'centerSalt'.$salt[1]);
    return $hash;
}

Ben bunu doğru şekilde yapıyor muyum? Bu bir kullanıcı adı ile birlikte bir parola ve bir giriş doğrulamak için bir veritabanında saklanan biri ile oluşturulan karma karşılaştırmak yeteneğini kimlik doğrulaması için kullanılır.

5 Cevap

Şifreleme! = Kıyımlama. Her ikisi de genellikle Kriptografi kategorisinde olarak kabul edilir, ama bir şey şifreli olabilir, bunun Kıyımlama de böyle değil, çözülebilecek. Kıyımlama sadece karma olduğunu, ve bu kadar.

Tuz gerçekten düzgün inşa edilmez. Bir fopen () çağrısı ile / dev / urandom okuma x-bayt olmalıdır. Örneğin, tuz 16 bayt Ben şahsen kullanmak budur. Bu etkili bir gökkuşağı tablo saldırıları engeller.

Şeyler daha güvenli hale getirmek için, çok, gizli bir anahtar kullanın. Örneğin:

$hashedPassword = hash_hmac('whirlpool',$password.$salt,$key);

$ Anahtar sadece rastgele bir veridir. Sen, 64 kB dosyası oluşturabilir örneğin, o belge kök üzerinde gizli bir klasörde "key.bin" denir ve karma işleminden önce file_get_contents () kullanın.

Neden gizli anahtarlar kullanılır? Eğer dosya sistemindeki bir veritabanı ve anahtarı sağlamalarının ve tuzları depolamak, o zaman bu sizin saklanan karma ve tuzları ellerini olsun eğer karma çatlama herkes engeller. Yani, bir saldırganın sağlamalarının çatlamak veritabanı ve dosya sistemi hem kırmak gerekir, ama onlar zaten karma düzeni iyi olduğunu ima bütün uygulama, kırık varsa herkes artık sağlamalarının çatlamak için anlamsız olduğunu fark ediyorum.

Aslında bir tuz kullanılarak değiliz.

Tuz hash fonksiyonu için giriş dahil bir randomly oluşturulan dizedir. Bunun gibi, her zaman farklı olacaktır.

Fikir bir kullanıcı bir parola depolar ve bu tuz veri depolama dahil olduğu zaman bir tuz oluşturmak olduğunu. Doğrulanması, size saklı tuz ile verilen şifreyi önek, tuz ve saklanan karma almak ve birlikte iki karma. Sonra saklanan karma ile sonucu karşılaştırın.

Benim tavsiye, kendi şifreleme ve hash fonksiyonları yazmak asla asla asla etmektir. Hatta uzmanlar yanlış her zaman yapmak, böylece kendiniz deneyin Yüklü.

Ive phpass (Openwall) güzel bir karma çerçeve, bunu kullanmak öneririm olduğunu duydum.

Onlar sağlamalarının tuzları kullanmak ve karma çimdik oldukça bazı parametreler var.

Ben yukarıdaki kodu iki kutu denetler düşünüyorum.

  • (Tuzu ile) gökkuşağı tablo saldırıları önleme
  • Güvenli Giriş

tuz kullanarak iki problemleri çözer:

  1. rainbow tables: gökkuşağı tabloları sadece kaynak değeri ile saklanır sağlamalarının, önceden hesaplanmış edilir. sağlamalarının karşılaştırarak, size unhashed değeri (şifre) olsun. Saldırgan, özel bir karma tablo oluşturmak için tuz bilmeniz gerekir - tuz ekleyerek karmaşık bir katman var.

  2. difference of hashed values: tuz olmadan, aynı 2 şifreleri aynı 2 sağlamalarının oluşturmak. şimdi iki kullanıcı (burada zayıf noktası gökkuşağı tabloları ile yaklaşık olarak aynıdır, ama hala) aynı şifreyi kullanmak olmadığını görmek kolaydır. o kadar tutarı, ama yine de bir endişe noktasıdır olmayabilir.

ayrıca, parola karma için hızlı algoritmalar kullanmak gerekir. md5 hızlı, sha hızlı. yavaş, daha iyi.

matsano chargen blog güvenliği ile ilgili ipuçları ve işaretçileri için iyi (ve komik) bir kaynaktır.