27 Aralık 2020 Pazar
Deadlock Analiz #1
19 Aralık 2020 Cumartesi
SQL Server Deadlock #1
12 Aralık 2020 Cumartesi
Hashing için Tuzlama
Düz hashing ile temel sorun belirli bir çıktının karşılık gelen girdiye eşlenmesidir. Önceden hesaplanabilir ve saklanabilir. Bu soruna kolay bir çözüm tuzlamadır. Eklenen rastgele bir dizenin hashing işleminden önce veriler eklenir böylece çıktı önceden hesaplanmış eşlemeler kullanılarak geriye döndürülemez. Sözlüğe dayalı saldırılar dahil olmak üzere hash üzerindeki tüm saldırılar istinalar dışında etkisiz hale getirilir.
Tuz değerini daha uzun tutmak her mesaj için benzersiz bir tuz değeri kullanmak önemlidir.
Saldırgan kaba kuvvet saldırısı düzenler ve arama tablolarını kullanarak saldırı sürecini ileri almasını sağlar. Kaba kuvvet saldırısı yapılabilen anahtar germe diye bilinen bir teknik vardır. Bu işlem o kadar işi yavaşlatacak ki, hash'i kırmak en azından bir saldırgan bakış açısından birkaç ay onu kırmamak kötü sonuçları beraberinde getirecektir.
Parola Tabanlı Anahtar Türetme İşlevi 2 (PBKDF2) RSA nin bir parçası olan anahtar türetme işlevidir. PKCS serisinin PKCS # sürümü 2.yayınlanmış,RFC 2898 olarak üretilen bir önceki standart olan PBKDF1 in yerini almıştır. 160 bit uzunluğa kadar türetilmiş anahtarlardır.
PBKDF2 algoritması benzer anahtar genişletme içi standart algoritmalar bulunur. Girdiyi hash eder bir tuz değeri ile birlikte şifre veya verileri türetilmiş bir anahtar oluşturur ve bu işlemi bir çok kez tekrar eder.
Hashing , Brute-Force saldırıları bir saldırgan için zaman alıcı ve sinir bozucu hale getirir. Önerilen yineleme sayısı 1000 dir. Yineleme sayısı ne kadar yüksekse o kadar daha fazla CPU gücüne ve zamana ihtiyacı olması gerekir. Ancak bu işlemlerle verilerimizi daha güvenli hale getirebileceğiz.
Tuzlama (Salt) ve PBKDF2 kullanarak bir SHA-1 hash oluşturulan kod aşağıda örnek amacıyla paylaşılmıştır. Rfc2898DeriveBytes sınıfı SHA-1 tabanlıdır. Bunun sonucunda elde edilen karma değer örnekteki gibi SHA256 değil, SHA-1 dir.
string data = "hello";
byte[] salt = new Byte[32];
using (var provider = new RNGCryptoServiceProvider())
{
provider.GetBytes(salt);
}
Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(data, salt);
pbkdf2.IterationCount = 1000;
byte[] hash = pbkdf2.GetBytes(32);
string hashString = Convert.ToBase64String(hash);
Bu adımları nasıl kullanabileceğimiz için küçük bir alıştırma; Kullanıcı tablomuzda user_id ve password sütunlarına sahip olduğumuzu düşünelim bir sütun daha ekleyelim. Salt ve Store_hashString. Tuz değerini olduğu gibi saklayabiliriz. Bayt dizisi şeklinde, Onu bsa64 olarak kodlayabiliriz.
Kullanıcı yeniden oturum açmak istediğinde kullanıcı kimlik bilgilerini nasıl doğrulayacağının yolunu bulacağız.
string password = String.Empty; // Placeholder, şifreyi databaseden alıyoruz.
string saltString = String.Empty; // Placeholder, salt değeri databaseden alıyoruz.
string userEnteredPassword = String.Empty; // User input
var pbkdf2 = new Rfc2898DeriveBytes(userEnteredPassword, Convert.FromBase64String(saltString));
pbkdf2.IterationCount = 1000;
byte[] computedHash = pbkdf2.GetBytes(32);
bool isAuthenticCredential = password.Equals(
Convert.ToBase64String(computedHash),
StringComparison.Ordinal);
Not:
Veritabanındaki verileri şifrelemek için anahtara ihtiyacınız olacaktır. Bu anahtarı kesinlikle veritabanında saklamayın. Eğer Veritabanı SQL Injection v.b tehlikelere girerse saldırgan anahtarı ele geçirecek ve veritabanındaki şifrelerinin çözülmesi mümkün olacaktır.
6 Aralık 2020 Pazar
Güvenli Deploma için Şifre Karıştırma
Şifreleme ve Hashing arasında önemli fark hashing ile çıktının tersine çevrilememesidir. Şifrelenmiş verilerin şifresi aynı anahtar kullanılarak çözülür. Simetrik şifreleme veya asimetril şifreleme durumlarında farklı anahtar kullanılır. Hashing uygulanmış veriler sonsuz kadar karma kalır.
Bir algoritma kullanarak 123456 için "dünya barışı" karıştırırsak ve karma veriyi depolama alanımızda saklarsak buna gerek kalmıyor. Kötü niyetli birinin 123456 dan saklanmış veri olan "dünya barışı" çıkarabilmesi için endişelenebiliriz. Algoritma aracılıyla "dünya barışı" dan çevirdiğinizde 123456 verilecek. Hashing kullanımını burada devreye almayı amaçlıyoruz. Kullanıcı sistemimize giriş yaptığında giriş için kullandığı şifre hassas bilgi içerdiği için girilen parolayı hashlemek, hash için daha önceden kaydettiğimiz sonuçla karşılaştırma işlemini yapmak. Karma oluşturma şifre gibi beklemedeki hassas verileri korumak için ideal bir teknik.
Not: Hashinh güvenlik gereksinimleri için tüm verileri üzerinde kullanılabilecek bir yöntem maalesef değildir. Kredi kartlarına hashing uygulayamayız, Kredi kartları hash den kurtarılamaz.
Hashing için birden fazla algoritma mevcuttur. MD5 mesaj özeti algoritması yaygın olarak kullanılan 128 bitlik (16 baytılı) karma değer üreten algoritmadır. Kriptografi dünyasında öncülük eden birkaç zayıflığı olan Güvenlik Karma Algoritması (SHA-1) güvenlik açıkları tespit edildi. Şu anda önerilen SHA-2,SHA-3 algoritmaları.
.NET Frameworde kullanılan System.Security.Crytography alanındaki sınıflarada karşılık gelen MD5,SHA1,SHA256, SHA384, SHA512 algoritma ailesi, 256,384,512 bitlik aile ise SHA-2 ailesine aittir.
"Supercalifragilisticexpialidocious" datayı Sha256 da oluşturma için küçük bir kod.
string data = "Supercalifragilisticexpialidocious";
SHA256 hasher = SHA256.Create();
byte[] hash = hasher.ComputeHash(Encoding.UTF8.GetBytes(data));
string hashString = BitConverter.ToString(hash).Replace("-", "").ToLower();
Hash kod oluşturmak son derece basittir. ComputeHash yöntemiyle yapılan bir çağrım sonucu verecektir. BitConverter sınıfı ile bayt dizisini 16 lık dize gösterimine yardımcı olacaktır.
Hash Output:
94730f57d7e41018d963d92fbf11618dce8274ca2c1bf72274e0285a6013c17b
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
Hash kaba kuvvet kullanarak saldırabiliriz. Anında a değerini hesaplayabiliriz. Eşleme yoksa b ile devam edebiliriz. Z ye geldiğimizde aa ile başlarız ve bu şekilde devam edebiliriz. Bunun gerçekleşmesi biraz zaman ve CPU gücü alacaktır.
Bir sözcükteki sözcükler gibi karmayı önceden hesaplamak mümkündür. Karma girildiğinde sadece arama meselesine dönüşür. Hashing orjinal şifre saklama için iyi br seçim gibi görünür. Kötü niyetli bir kişi string türünden şifreyi çevrim için araçlarla kolay biçimde elde edebilir.
Bir sonraki makalede hash ek Tuzlama işlemine yer vereceğiz.