SORU
16 Aralık 2013, PAZARTESİ


ASP.NET Kimlik varsayılan Şifre elinde olursa, nasıl çalışır ve güvenli mi?

Hava varsayılan MVC 5 ile gelen UserManager uygulanan ve Kimlik Çerçevesinde, yeterince güvenli ASP.NET bir Parola İnanılmaz merak ediyorum? Ve eğer öyleyse, eğer nasıl çalıştığını bana açıklayabilir misiniz?

İPasswordHasher arayüzü bu gibi görünüyor:

public interface IPasswordHasher
{
    string HashPassword(string password);
    PasswordVerificationResult VerifyHashedPassword(string hashedPassword, 
                                                       string providedPassword);
}

Gördüğünüz gibi, bir tuz sürmüyor, ama bu konu söz edilir: "7**" perde arkasında tuz aslında yok. Çok merak ediyorum bu nasıl oluyor? Ve nerede bu tuz nereden geliyor?

Benim endişem tuz statik, oldukça güvensiz oluşturma.

CEVAP
16 Aralık 2013, PAZARTESİ


Varsayılan uygulama olarak çalışıyor. Rastgele tuz Key Derivation Function karma üretmek için kullanır. Tuz, TURUNCU, çıkış parçası olarak dahil edilmiştir. Böylece, her zaman, "karma" farklı sağlamalarının alacak aynı şifre. Karma doğrulamak için çıktı, tuz ve diğerlerinden ayrılır, TURUNCU, şifreyi tekrar belirtilen tuz ile çalıştırın. Eğer sonuç ilk çıkış geri kalanı için eşleşirse karma doğrulanır.

Karma:

public static string HashPassword(string password)
{
    byte[] salt;
    byte[] buffer2;
    if (password == null)
    {
        throw new ArgumentNullException("password");
    }
    using (Rfc2898DeriveBytes bytes = new Rfc2898DeriveBytes(password, 0x10, 0x3e8))
    {
        salt = bytes.Salt;
        buffer2 = bytes.GetBytes(0x20);
    }
    byte[] dst = new byte[0x31];
    Buffer.BlockCopy(salt, 0, dst, 1, 0x10);
    Buffer.BlockCopy(buffer2, 0, dst, 0x11, 0x20);
    return Convert.ToBase64String(dst);
}

Doğrulama:

public static bool VerifyHashedPassword(string hashedPassword, string password)
{
    byte[] buffer4;
    if (hashedPassword == null)
    {
        return false;
    }
    if (password == null)
    {
        throw new ArgumentNullException("password");
    }
    byte[] src = Convert.FromBase64String(hashedPassword);
    if ((src.Length != 0x31) || (src[0] != 0))
    {
        return false;
    }
    byte[] dst = new byte[0x10];
    Buffer.BlockCopy(src, 1, dst, 0, 0x10);
    byte[] buffer3 = new byte[0x20];
    Buffer.BlockCopy(src, 0x11, buffer3, 0, 0x20);
    using (Rfc2898DeriveBytes bytes = new Rfc2898DeriveBytes(password, dst, 0x3e8))
    {
        buffer4 = bytes.GetBytes(0x20);
    }
    return ByteArraysEqual(buffer3, buffer4);
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Official Clouds

    Official Clo

    1 HAZİRAN 2011
  • Tek Syndicate

    Tek Syndicat

    23 Temmuz 2008
  • tutvid

    tutvid

    19 AĞUSTOS 2006