İlk olarak, önemli olan bazı terimler:
Karma - Bir dize alma ve orijinal dizeye geri döndürülemeyen bir dizi karakter üretme eylemi.
Simetrik şifreleme - bir karakter dizisi bir dizi alarak ve üretme hareket - (genellikle sadece 'şifreleme' olarak adlandırılır) için şifreli aynı şifreleme anahtarı kullanılarak özgün dizeye şifresi.
Gökkuşağı Tablosu - belirli bir karma algoritmada karma hale getirilmiş tüm karakter çeşitlerini içeren bir arama tablosu.
Tuz - hashing uygulanmadan önce orijinal dizeye eklenen bilinen rastgele bir dize.
.NET Framework için, Bcrypt henüz doğrulanmış bir referans uygulamasına sahip değildir . Bu önemlidir çünkü mevcut bir uygulamada ciddi kusurlar olup olmadığını bilmenin bir yolu yoktur. BCrypt for .NET uygulamasını buradan edinebilirsiniz . İyi mi yoksa kötü bir uygulama mı olduğunu söyleyecek kadar kriptografi hakkında yeterince bilgim yok. Kriptografi çok derin bir alandır. Kendi şifreleme algoritmanızı oluşturmaya çalışmayın . Ciddi anlamda.
Kendi parola güvenliğinizi uygulayacaksanız (iç çekecekseniz), birkaç şey yapmanız gerekir:
- Nispeten güvenli bir karma algoritma kullanın .
- Hashing uygulanmadan önce her parolayı tuzlayın.
- Her şifre için benzersiz ve uzun bir tuz kullanın ve tuzu şifreyle birlikte saklayın.
- Güçlü parolalar gerektir .
Ne yazık ki, tüm bunları yapsanız bile kararlı bir bilgisayar korsanı potansiyel olarak şifreleri çözebilir, bu onun için gerçekten çok uzun zaman alır. Bu senin baş düşmanın: Zaman .
Tek gereken, çünkü bcrypt algoritma çalışır beş karma uzun büyüklükte MD5 daha bir şifre emir ; (ve hala AES veya SHA-512'den çok daha uzun). Hacker'ı parolalarınızı aramak için gökkuşağı tablosu oluşturmak için çok daha fazla zaman harcamaya zorlar ve bu da parolalarınızın saldırıya uğrama riskini çok daha az azaltır.
Şifrelerinizi tuzluyor ve hashing yapıyorsanız ve her bir tuz farklıysa, potansiyel bir bilgisayar korsanı, tuzlu + karma bir şifre için bir gökkuşağı tablosuna sahip olmak için her tuz çeşidi için bir gökkuşağı tablosu oluşturmalıdır . Bu, 1 milyon kullanıcınız varsa, bir bilgisayar korsanının 1 milyon gökkuşağı tablosu oluşturması gerektiği anlamına gelir. Her kullanıcı için aynı tuzu kullanıyorsanız, bilgisayar korsanının sisteminizi başarılı bir şekilde hacklemek için yalnızca 1 gökkuşağı tablosu oluşturması gerekir.
Parolalarınızı tuzlamıyorsanız, bir saldırganın yapması gereken tek şey, oradaki her uygulama (AES, SHA-512, MD5) için mevcut bir Rainbow tablosunu açmak ve hash ile eşleşen birinin olup olmadığına bakmaktır. Bu zaten yapıldı , saldırganın bu Rainbow tablolarını kendisinin hesaplaması gerekmez .
Tüm bunlara rağmen, iyi güvenlik uygulamaları kullanıyor olmalısınız . Sitenizde başka bir saldırı vektörünü (XSS, SQL Enjeksiyonu, CSRF, vb. ) Başarıyla kullanabilirlerse , iyi parola güvenliğinin önemi yoktur. Bu tartışmalı bir ifadeye benziyor, ancak bir düşünün: Tüm kullanıcı bilgilerinizi bir SQL enjeksiyon saldırısı yoluyla alabilirsem veya kullanıcılarınızın bana tanımlama bilgilerini XSS aracılığıyla vermesini sağlayabilirsem , şifreniz ne kadar iyi olursa olsun güvenliktir .
Diğer kaynaklar:
- Jeff Atwood: Basitleştirilmiş .NET Şifreleme (hashing'e genel bir bakış için harika)
- Jeff Atwood: Senin olarak yeni giriş yaptım
- Jeff Atwood: Muhtemelen parolaları yanlış depoluyorsunuz
- Jeff Atwood: Hızlı Hashing
Not: Lütfen başka iyi kaynaklar önerin. Düzinelerce yazarın bir düzine makalesini okumuş olmalıyım, ancak çok azı Jeff'in yaptığı kadar açık bir şekilde konu hakkında yazıyor. Lütfen makaleleri buldukça düzenleyin.