Oluşturmanız gereken parola türünün, parolanın nasıl saklandığıyla çok ilgisi vardır.
Yıllar önce, büyük ve küçük harfler, semboller ve rakamlardan oluşan sekiz karakterli rastgele şifrelerin kırılması gerçekten zordu. Bazı durumlarda, böyle bir şifrenin kırılması yıllar aldı.
Günümüzün değişen teknolojisi ve kiralanabilir makineler sayesinde bu süre saatlere inmiştir. Ancak bu şifreler ilk etapta nasıl saklanıyor?
Parolalar Çevrimiçi Olarak Nasıl Saklanır?
Sistemler, kullanıcı parolalarını doğrudan dosyalarda veya veritabanlarında saklamaz çünkü saldırganlar, sistemlerin parolaları tuttuğu veritabanını ele geçirebilir. Bunun yerine, sistemler kullanıcı parolalarını şifreler ve saldırganlar her parolanın şifrelenmiş bir sürümüyle karşılaşır.
Sistemlerin şifreleri şifrelemek için kullandığı bazı algoritmalar vardır. Bu algoritmalardan biri de simetrik algoritmadır. Simetrik algoritma bir tür şifrelemedir. Burada hem şifreleme hem de şifre çözme için aynı anahtarı kullanabilirsiniz. Verileri şifrelemek için kullanacağınız anahtar, hem şifreleme hem de şifre çözme için aynıdır. Simetrik algoritmaların güvenliği, şifre çözme için yalnızca bir anahtar olduğu için bazı riskler taşır. Bu nedenle sistemler genellikle parola şifreleme için simetrik algoritmalar kullanmazlar.
Genellikle sistemlerin şifreleme için kullandığı yöntem hash algoritmalarıdır. Karma algoritmalar, verileri şifrelemek için değil, verilerin bütünlüğünü doğrulamak ve temsil etmek içindir. Hash algoritmaları, verileri sabit boyutlu bir hash'e dönüştürür. Bu hash'ler genellikle benzersiz bir veri hash'ini temsil eder.
Hash algoritması sayesinde eğer bir saldırgan şifre veri tabanını ele geçirmiş ise buradan geriye doğru şifreye ulaşamaz. Burada dikkat etmeniz gereken çok önemli bir nüans var. Teorik olarak, tüm parola kombinasyonları için aynı hash algoritmasını kullanan bir sistemin güvenliğini ihlal eden bir saldırgan, elde edilen sonuçları karşılaştırabilir. Saldırgan bu karşılaştırmalar sonucunda aynı değeri üretiyorsa şifrenin açık halinin ne olduğunu bulmuş demektir. Bu yöntem, tamamen deneme yanılma ile ilgilidir ve bu tür bir saldırı, genellikle kaba kuvvet saldırısı olarak adlandırılır.
2000'li yılların başında, popüler karma algoritmalarla şifrelenmiş 8 karakterlik şifreler için tüm kombinasyonları denemek yüzlerce yıl alabilirdi. Elbette bu set içerisinde "123456" veya "şifrem" gibi çok basit kombinasyonlar yer almıyor. Günümüz yazılım ve donanım teknolojilerinin gelişmesiyle birlikte şifre kırma yöntemi de oldukça değişti.
Ortaya Çıkan GPU'ların Etkisi
Grafik işlemcilerin (GPU'lar) paralel veri işleme yetenekleri zaman içinde gelişmiştir. GPU'lar, genel amaçlı CPU'lar gibi çok yönlü işlemleri gerçekleştirme yeteneğine sahip değildir. yani var olsa bile bu kadar çok çekirdek ve paralel işlem gücü, bunları hemen hemen her sorun için kullanmak mantıklı değil İŞLEMCİ.
Ancak şifreler için kullanılan bazı hash algoritmalarını GPU üzerinde oldukça verimli bir şekilde gerçekleştirmek mümkündür. Geleneksel CPU'larla elde edebileceğiniz saniyede hesaplanabilir hash'ler, yeni GPU platformlarıyla muazzam bir şekilde arttı.
Bir fikir edinmek için aşağıdaki tabloda NTLM, MD5 ve SHA1 gibi hash algoritmalarının saniyedeki hash sayılarını inceleyin. Bu algoritmaların sadece bir hash algoritması olduğunu bilmek şimdilik yeterli. Bu tabloyu oluşturmak için 25 AMD Radeon GPU'dan oluşan bir küme sistemi kullandım.
algoritma |
Saniye Başına Hash İşlemleri |
NTLM |
350.000.000.000 |
MD5 |
180.000.000.000 |
SHA1 |
63.000.000.000 |
SHA512 Şifreleme |
364.000 |
Bcrypt |
71.000 |
şifre |
33.000 |
Gördüğünüz gibi, böyle bir sistemle saniyede 350 milyar kez NTLM hash üretebilirsiniz. Bu, 8 karakterlik bir parolanın tüm kombinasyonlarını 6 saatten daha kısa sürede deneyebileceğiniz anlamına gelir. Üstelik bu örnekteki donanım yıllar öncesine ait. Günümüzün parola kırma gücünü hayal edin.
Yazılım Geliştiricileri Ne Yapmalı?
Programcıların izlemesi gereken yol oldukça basittir: Parolaları şifrelerken hash değerlerini hesaplaması daha uzun süren algoritmaları tercih etmelidirler. Geliştiricilerin yalnızca CPU üzerinde kullandıkları algoritmanın performansını değil, aynı zamanda GPU dünyasına karşı ne kadar dirençli olduğunu da öğrenmesi gerekiyor.
Geliştiriciler, Django, Ruby on gibi şifre şifreleme işlemlerini de ele alan bir yazılım çerçevesi ile çalışıyorsa Raylar ve Spring Security çerçevesinde doğru kararların verilip verilmediğini kontrol etmelidirler. güvenlik.
Örneğin, tasarlamakRuby on Rails'de kullanıcı işlemleri için en çok kullanılan kitaplıklardan biri olan, varsayılan hash algoritması olarak Bcrypt'i kullanır. Ayrıca hash algoritması olarak başka bir yöntem kullanmanıza izin verir. Bcrypt algoritması, GPU'nun kırılması hala çok uzun sürdüğü için güvenilirdir.
Özetle, hash değeri hesaplaması ne kadar uzun sürerse o kadar güvende olursunuz.
Şifreniz Kaç Karakter Olmalıdır?
Kullandığınız her ekstra karakter, şifrenizi kırmak ve şifrenizi daha güvenli hale getirmek için gereken deneme ve hata sayısını geometrik olarak artıracaktır.
Bu durumu iki farklı senaryo üzerinden ele alalım. NTLM hash algoritması için yukarıdaki tablodaki değerleri göz önünde bulundurun ve şifreyi kırmaya çalışacağınızı hayal edin. Sekiz veya daha fazla karakterden oluşan parolaları hedeflediğinizi hayal edin.
Karakter sayısı |
Büyük/Küçük harf ve rakamlar |
Büyük/Küçük harfler, sayılar ve özel semboller |
8 |
1 dakikadan az |
2 dakika |
9 |
2 dakika |
2 saat |
10 |
2 saat |
1 hafta |
11 |
6 gün |
2 yıl |
12 |
1 yıl |
200 yıl |
13 |
100 yıldan fazla |
1000 yıldan fazla |
Tabloyu incelediğinizde büyük/küçük harf, rakam ve özel sembollerin tüm kombinasyonlarını kullandığınızda minimum 12 karakterlik bir şifre kullanımının güvenli olduğunu görebilirsiniz. Özel semboller kullanmıyorsanız, güvenli şifre uzunluğu olarak 13 karakter kullanmanız gerektiği ortaya çıkıyor. Bu sistemde NTLM hash yerine Bcrypt hash yöntemini kullandıysanız 8 karakter yeterli olacaktır. Ancak web üzerinden girdiğiniz bir sistemin hangi hash yöntemi ile şifrenizi sakladığını bilme şansınız yoktur. Bu yüzden tüm olasılıkları göz önünde bulundurmalısınız.
Yazılım geliştiriciler için temel sorun, kullanıcıları minimum 12 karakterlik bir şifreye sahip olmaya ikna etmenin neredeyse imkansız olmasıdır. Günümüzde bu uzunluktaki parola kullanım oranının düşük olduğunu söylemek mümkündür. Bu nedenle geliştirilen sistemin kullanım senaryosuna göre kullanıcılar tarafından kabul edilecek bir orta yol bulunması gerekecektir. parola güvenliğini artırmak için.
geliştiriciler için son bir öneri, kullanıcıya sunduğunuz formlardan gelen girdilerin sadece minimum uzunluğunu değil, aynı zamanda maksimum uzunluğunu da kontrol etmeleridir. Özellikle güvenlik için Bcrypt gibi hesaplaması yavaş bir karma algoritmanın kullanımını etkinleştirdiğinizde tarafından girilen şifrenin maksimum uzunluğunu kontrol etmezseniz bazı risklerle karşılaşabilirsiniz. Kullanıcı. Örneğin saldırganlar, özel olarak hazırlanmış bazı isteklerle aynı anda 100 bin karakterlik onlarca şifreyi deneyerek saldırı gerçekleştirebilmektedir. Böyle bir durumda sisteminizin diğer kullanıcılara yanıt vermeme olasılığı oldukça yüksektir.
Son Kullanıcılara Tavsiye
Parolanızın uzunluğunu en az 12 karakter yapın ve büyük ve küçük harf kombinasyonlarını, sayıları ve sembolleri eklediğinizden emin olun. Parolanızı saklayan sistemlerin saldırıya uğrayabileceğini ve bilgilerinizin kötüye kullanılabileceğini asla unutmayın. Bir sistemin şifrenizi şifrelemek için hangi algoritmaları kullandığını bilemezsiniz, bu nedenle önlem almak ve güçlü şifreler oluşturmak tamamen size bağlıdır.