Parola Güvenliği
Parolayla korunan bir uygulamaya (parolalı bir RAR dosyasına, e-postaya…) girmek isteyen bir saldırganın, parolayı bilmeden sonuca ulaşmak için birkaç yolu vardır. Bunların bir kısmı biraz zekâ, kurnazlık ve bilgi gerektirir, bir kısmı ise biraz şans ve fiziksel hazırlık. Önce saldırganın hangi seçeneklere sahip olduğunu toparlayalım.
Birinin Parolası Nasıl Kırılır
- Parolayı bilen kişiyi (örneğin e-posta hesabının sahibini) bulup parolayı ondan almak — ikna etmek, rüşvet vermek, dövmek. Bu yolu makalede daha fazla anlatmayacağım :-).
- Parolayı hesap sahibinden sezdirmeden almaya çalışmak, örneğin sahte bir e-postayla. Buna kimlik avı (phishing) denir. Yöntem şöyle: hesap sahibine bir e-posta gönderip ondan kullanıcı adını ve parolasını sana geri göndermesini istersin. Mesajın ne kadar güvenilir görüneceği sana kalmış; tek başına rica muhtemelen yetmez, bir de hikâye eklemek gerekir. Sık karşılaştığımız hikâye, veri tabanının bozulduğu ve bu yüzden tüm kullanıcılardan parola ile kullanıcı adını yeniden girmelerinin istendiği, aksi hâlde posta kutularının kapatılacağı gibi bir şeydir. Mesaj gerçekten ciddi görünüyorsa, başarı oranı küçük olmaz.
- Sözlük saldırısı — internetten en sık kullanılan parolaların bulunduğu paketleri indirip hepsini deneriz. Şanslıysak ve hesap sahibi sık kullanılan bir parola seçmişse, onu gerçekten kolayca buluruz. Buradan şu temel ders çıkar: anlamlı parolalar seçme. Mesela parolan ankara olursa, ilk acemi bilgisayar korsanı bunu birkaç saniyede kırar, garanti ederim. Muhtemelen en etkili yöntem budur; gerçekten büyük bir parola sözlüğün varsa, kullanıcıların büyük bölümünün parolasını fazla zahmet etmeden tahmin edebilirsin.
- Kaba kuvvet saldırısı (brute force) en akılsızca yöntemdir. Dünyada var olan tüm olası parolaları denemekten ibarettir. Program belirli bir algoritmaya göre harfleri sırayla birleştirir ve aranan parolayı bulup bulmadığına bakar. Bulunca parolayı kaydeder ve durur. Bu yöntemi aşağıda ayrıntılı inceleyeceğiz.
Kaba Kuvvet
Bu yöntemi kullanan program, kelimelerin farklı dizilişlerini oluşturur ve tesadüfen parolayı bulup bulmadığını dener. Böyle bir denemenin ne kadar sürebileceğini hesaplayalım.
Beş karakterlik, yalnızca İngiliz alfabesinin küçük harflerinden oluşan bir parolamız olsun (ç, ş, ğ gibi Türkçe harfler olmadan). İngiliz alfabesinde yirmi altı harf var. (Türk alfabesinde 29 harf var, ama hesabı İngiliz alfabesiyle yapacağız.) Şimdi bu beş harften kaç farklı parola kurabileceğimizi kolayca hesaplayabiliriz. Sıra bizim için önemli olduğundan dizilişleri kullanacağız (aynı harflerden oluşsa da masal parolası salam parolasıyla aynı değildir); harfler parolada tekrar edebildiği için de tekrarlı dizilişleri kullanmamız gerekir. Hesaba geçelim. Tekrarlı dizilişler için formül nr biçimindedir. n yerine seçeceğimiz harflerin sayısını — yani İngiliz alfabesindeki harf sayısını — r yerine ise parolayı oluşturan harflerin sayısını, bizim örneğimizde beşi yazarız. 265 buluruz; bu da yaklaşık on iki milyon farklı dizilişe karşılık gelir. Bu çok mu, az mı?
Bu, elimizdeki makineye de bağlı. Eski bir bilgisayar saniyede az sayıda karşılaştırma yapar, süper modern bilgisayarlar ise bunun on bin katını yapabilir. Ben bu örneklerde bilgisayarın saniyede on milyon karşılaştırma ve değerlendirme yaptığını varsayacağım. Herkes fark etmiştir: böyle bir bilgisayar beş karakterlik parolayı iki saniye içinde bulur, bu da hiç iyi bir sonuç değil. Ama pes etmeyelim.
Parolayı Güçlendirelim
Beş karakterlik parola hiç de güvenli değil; bazı mantıklı sistemler bu kadar kısa bir parolaya izin bile vermez. Parolanın sekiz karakterden kısa olmaması gerektiği söylenir. Şimdi sekiz karakterlik bir parola için kaç diziliş olduğunu hesaplayalım. Önceki durumdaki gibi yalnızca İngiliz alfabesinin küçük harflerini düşüneceğiz. Formülde yerine yazarsak 268 buluruz; bu da yaklaşık iki yüz milyar dizilişe karşılık gelir. Bu artık daha güzel bir sayı. Bilgisayar tüm dizilişleri altı saatten kısa sürede değerlendirir. Bu önceki duruma göre daha iyi, ama büyük harfleri, rakamları ve alt çizgi, tire gibi özel karakterleri de kullansaydın parolanın gücünün nasıl artacağına bakalım.
Küçük harf 26 tane, büyük harf de 26 tane; bu toplamda 52 karakter eder. Buna 10 rakamı ve bazı özel karakterleri de eklememiz gerekir. Her yerde her özel karakter serbest değil; o yüzden basit olsun diye yalnızca sekiz özel karakterle hesaplayacağım, karakter sayısı güzel bir 70’e yuvarlansın. Parolanın uzunluğu yine sekiz olsun. Yerine yazınca şu sayı çıkıyor: 708; daha iyi canlandırmak için bu yaklaşık 5,8 · 1014, yani sözle neredeyse altı yüz trilyon diziliş demek. Bu artık oldukça etkileyici bir sayı. Bizim bilgisayarımız tüm dizilişleri on altı bin saatte kontrol ederdi! Bu da iki yıldan az bir süre eder. Saldırganın parolayı makul bir sürede bulması için çok büyük bir şansa ihtiyacı olurdu. Üstelik parolanın uzunluğunu bilmesi gerekirdi; uzunluğu bilmeseydi daha az harfli dizilişleri de ayrıca taraması gerekirdi.
Bazı insanlar verileri için o kadar çok endişelenir ki yalnızca rakamlardan oluşan parolalar kullanır. Bu parolalar sözlük saldırısına karşı çok dayanıklıdır, çünkü sık kullanılan parolaların bulunduğu herhangi bir sözlükte tam olarak 41.274.390.553 sayısının olması pek olası değil. Ne yazık ki bu parolalar sözlük saldırısına karşı dayanıklı olsa da kaba kuvvete karşı daha zayıftır. Çünkü yalnızca on rakam vardır; yani diziliş sayısı her zaman 10r olur. Parolanın gücünü yalnızca uzunluğu belirler. Önceki sekiz karakterlik, her türden karakter içeren parolamızın yaklaşık 5,8 · 1014 dizilişi vardı. Sayısal parolada bunun aynısına ulaşmak için on beş rakam gerekirdi; yani neredeyse iki kat fazla karakter. Daha kısa ama daha çok karakter türü içeren bir parola seçmenin daha verimli olduğu açıkça görülüyor.
Saldırganı Hafife Alma
Saldırgan akıllı olabilir. Önceki satırları okuduktan sonra, diyelim ki mevcut “limonata” parolanı en azından “Limonata” olarak değiştirmeye karar verdin; bu, olası diziliş sayısını birkaç kat artırır, çünkü saldırgan artık algoritmasına büyük harfleri de katmak zorundadır. Ama saldırgan büyük harfin yalnızca ilk sırada olacağını varsayabilir; çünkü bu daha kolay akılda kalır ve kelimenin ortasında büyük harf olması alışılmış bir şey değildir. Bu yüzden yalnızca küçük harfli ve en fazla başta bir büyük harfi olan tüm kelimeleri tarayan bir algoritma yazar.
Önceki parolanın karmaşıklığı (burada demek istediğim, aynı biçimi korursak — sekiz küçük harf — toplam kaç diziliş olabileceğidir) 268 idi. Saldırgan düşünmeseydi yeni parolanın karmaşıklığı 528 olurdu; ama yukarıda anlatılan algoritmayı kullanırsa parolanın karmaşıklığı 52 · 267 olur. Parolanın ilk yerinde küçük ve büyük harfler değişebilir, bunlar toplamda 52 tanedir; sonraki yedi yerde ise yalnızca küçük harfler değişebilir, bu da standart bir tekrarlı dizilişe karşılık gelir.
Ayrıca saldırgan, parolanın dört harf ve dört rakamdan oluştuğunu, karışık olmadığını, yani rakamların art arda, harflerin de art arda geldiğini bilebilir. Böyle bir parolanın karmaşıklığını şöyle hesaplarız: ilk dört harfin toplam 264 dizilişi, sonraki dört rakamın 104 dizilişi vardır. Bu iki sonucu çarparız: 264 · 104. Saldırgan önce rakamların mı yoksa harflerin mi geldiğini bilmeseydi, önceki sonucu bir de ikiyle çarpmamız gerekirdi.
Parola kırma hızlarının verildiği tablolara da buradan bakabilirsin.