Şifreni kırmak gerçekte ne kadar sürer

Yayınlanma yazan David Carrero

Bir site sana şifreni kırmanın üç milyon yıl süreceğini söylediğinde, cümlenin asıl önemli kısmını yutmuş oluyor. Doğru soru ne kadar sürdüğü değil. Neye karşı ne kadar sürdüğü.

Neye karşı sorusunun cevabına da sen karar vermiyorsun. Ona, 2019’da ayakkabı aldığın mağazanın bir yazılımcısı, şifreni veritabanında nasıl saklayacağını seçerken karar verdi. Sen iki siteye de aynı yirmi karakterlik diziyi yazdın. Birinde yüzyıllarca dayanıyor, diğerinde öğle yemeğine kalmadan düşüyor.

Denklemde eksik olan sayı

Kaba kuvvet saldırısı sıradan bir aritmetiktir: denenmesi gereken aday sayısını, saniyede deneyebildiğin aday sayısına bölersin. Birinci çarpan senin şifrene bağlıdır — uzunluğuna, alfabesine, bir sözlükte olup olmadığına. İkincisinin seninle zerre kadar ilgisi yoktur.

İkinci çarpan iki şeye bağlıdır: saldırganın donanımına ve hepsinden önemlisi, sitenin şifreni kullanıcı tablosunda tuttuğu o karman çorman diziye çeviren fonksiyona. O fonksiyonun adı hash ve hepsinin hesaplama maliyeti aynı değil.

MD5 ve SHA-1 hızlı olsunlar diye tasarlandı. Bu bir kusur değil, meziyet: genel amaçlı hash fonksiyonları bunlar, mesajları özetlemek ve bütünlük doğrulamak için düşünüldüler; orada istediğin şey de bir gigabaytı sen kalkıp çay koyana kadar işlemeleridir. Biri bunları şifre saklamak için kullandığında, o meziyet sorunun ta kendisine dönüşüyor. Saniyede milyonlarca kez hesaplayabildiğin bir fonksiyon, saldırganın da saniyede milyonlarca kez hesaplayabildiği bir fonksiyondur — üstelik onda ekran kartları var ve önünde koca bir hafta sonu.

bcrypt ve Argon2 tam tersi bir hedefle tasarlandı. Bilerek yavaşlar ve — işin zarif tarafı da bu — yavaşlıkları ayarlanabilir. Niels Provos ve David Mazières, bcrypt’i 1999’da her şeyi anlatan bir başlıkla sundular: A Future-Adaptable Password Scheme. Fikir şuydu: donanım ucuzladıkça fonksiyon da yıllar içinde pahalılaşabilsin. Password Hashing Competition’ı 2015’te kazanan Argon2 ise bir kat daha ekledi: sadece zamana değil, belleğe de mal oluyor; GPU’ların en cömert davranmadığı şeye yani.

Hızlı bir hash ile iyi ayarlanmış yavaş bir hash arasındaki fark yüzdelerle ölçülmez. Büyüklük mertebeleriyle ölçülür. Hem de bir sürü mertebeyle.

Ölçümler var ve herkese açık

Bunların hiçbiri tahmin değil. Şifre kırmak için dünyanın yarısının — iyilerin de — kullandığı araç olan Hashcat, herkesin kendi makinesinde çalıştırabileceği bir kıyaslama moduyla geliyor ve algoritma algoritma, her birinin saniyede kaç kez hesaplanabildiğini ölçüyor. Piyasaya yeni bir GPU çıktığında topluluk o tabloları yayımlıyor.

O tablolarda ilginç olan şey herhangi bir sayı değil — zaten her donanım kuşağında bayatlıyorlar — satırlar arasındaki mesafe. Listeyi hıza göre sıralıyorsun, en tepede kendi gezegeninde MD5’i görüyorsun. İniyorsun, iniyorsun, tablonun dibinde bcrypt ve Argon2 duruyor; rakamların birbirine benzer hiçbir yanı yok. Şifre aynı şifre. GPU aynı GPU. Değişen tek şey, sitenin onu nasıl saklamaya karar verdiği.

Bu yüzden hangi hash’e karşı olduğunu söylemeyen “3 milyon yıl” bir ölçüm değil, pazarlama. Arabanın varış yerini söylemeden altı saatte gittiğini duyurmak gibi bir şey.

Çevrimdışı ve çevrimiçi: birbirine değmeyen iki dünya

Neredeyse kimsenin anlatmadığı ve sonucu en az bunun kadar acımasızca değiştiren ikinci bir ayrım daha var.

Çevrimiçi saldırıda saldırgan, tıpkı bir kullanıcı gibi, şifreleri giriş formuna karşı deniyor. Tempoyu onun donanımı değil, sunucu belirliyor. Deneme sınırı olabilir, geçici kilit olabilir, captcha olabilir, istekler arasında gecikme olabilir, aynı adresten bin hata gelince alarm çalabilir. Düzgün korunan bir siteye karşı çevrimiçi saldırı yavaştır, gürültülüdür ve epeyce aptalcadır. Aritmetik saldırgan için o kadar kötüdür ki saf kaba kuvvet neredeyse hiç denenmez: hep aynı dört şifre milyonlarca hesaba karşı denenir, o da başka bir oyundur.

Çevrimdışı saldırıda saldırganın elinde veritabanının dökümü zaten var. Alıp evine götürüyor. Orada ne sunucu var, ne deneme sınırı, ne de bakan biri: ekran kartları ve elektrik faturası var. Kimsenin ruhu duymadan aylarca deneyebilir ve tutturduğunu hash’leri karşılaştırarak tek başına anlar. Her şeye hash’in karar verdiği yer burası, çünkü onu frenleyen tek şey kelimenin tam anlamıyla hash.

İhtimaller konusunda dürüst olmakta fayda var: çevrimdışı senaryo egzotik bir şey değil. Bir veritabanı her sızdığında olan tam olarak bu. LinkedIn 2012’de kendi veritabanını kaybettiğinde, sızan dökümün analizi şifreleri SHA-1 ile tuzsuz sakladığını gösterdi: hızlı bir hash ve önceden hesaplanmış tabloları engelleyen o malzemeden yoksun. Bu kadar çok şifrenin bu kadar hızlı kırılması sadece kullanıcıların kötü seçim yapmasından değildi. Her şeyden önce, hiçbir kullanıcının görmediği bir mühendislik kararıydı.

Burada ne yapıyoruz, neden söylüyoruz

Kontrol aracımız saniyede 10¹² deneme, çevrimdışı, hızlı bir hash’e karşı varsayıyor. Bu, sonucun hemen altında sayfanın kendisinde yazıyor; süs olsun diye bir şeffaflık değil: o veri olmadan sana gösterdiği sürenin hiçbir anlamı yok.

Bilerek kötü senaryo bu. Veritabanının çoktan sızdığını, saldırganın ciddi donanımı olduğunu, sitenin şifreni makul ölçüde mümkün olan en kötü şekilde sakladığını, üstüne bir de alfabeni ve uzunluğunu bildiğini varsayıyoruz. Site iyi ayarlanmış bir bcrypt kullandıysa gerçek rakam büyüklük mertebeleri kadar yükselir ve şifren sana söylediğimizden çok çok daha uzun dayanır.

Yanılacaksak o taraftan yanılmayı tercih ederiz. Seni tebrik eden bir kontrol aracı, aslında kendini tebrik ediyordur.

Rahatsız edici sonuç

Şifrenin bir kırılma süresi yok. Onu kullandığın her site için bir kırılma süresi var ve o süreyi, tanımadığın insanlar yayımlamadıkları ölçütlerle belirliyor.

Bundan da her zamanki iki şey çıkıyor. Birincisi: hash’i kontrol edemediğine göre, entropiyi kontrol et; denklemin sana ait olan yarısı o — üretecin sana sevimli bir yüzde değil de bit göstermesi bu yüzden. İkincisi ve daha önemlisi: her sitenin kendi şifresi varsa, onu MD5’le saklayan site ancak o sitenin şifresini hediye edebilir.

Çünkü zayıf halka senin şifren değil. Onu yazdığın en kötü site.


Kaynaklar: hashcat’in herkese açık kıyaslamaları (hashcat -b), incelenebilir ve tekrarlanabilir · N. Provos ve D. Mazières, “A Future-Adaptable Password Scheme”, USENIX, 1999 · Password Hashing Competition, 2015’te Argon2 tarafından kazanıldı · password.es kontrol aracında beyan edilen tehdit modeli: saniyede 10¹² deneme, çevrimdışı, hızlı hash · 2012 LinkedIn ihlali: şirket sızıntıyı doğruladı, tuzsuz SHA-1 kullanımı ise yayımlanan dökümün analiziyle ortaya kondu.

← Bloga dön