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

  • ModNation Racers H.Q.

    ModNation Ra

    31 Ocak 2010
  • TheFlashCentre

    TheFlashCent

    22 Mayıs 2008
  • wafflepwn

    wafflepwn

    14 AĞUSTOS 2008