Anasayfa Makale Hash Nedir? Nasıl Çalışır?

Hash Nedir? Nasıl Çalışır?

zayıf şifre kullanımı

Bu yazımızda hashlemenin ne olduğunu, nasıl çalıştığını ve günümüzdeki önemini anlatıyoruz.

Birçok yerde mutlaka şu cümleye rastlamışsınızdır. “Şifreniz güvenli bir algoritma yardımıyla veritabanında tutuluyor.” Peki bu ne anlama geliyor? Bu algoritmalar nelerdir? Bu yazımızın ana odak noktası da bu olacak. Çeşitli şifreleme algoritmalarına, tek yönlü algoritmalara ve özetle hash kavramına değineceğiz. 

Dijital dünyada birçok servise parolalarımız aracılığıyla erişiriz. Bu, hesaplarımızı yetkisiz erişimden koruyan, onlarca yıllık basit fakat bir o kadar güvenli bir çözüm. Mail adresleriniz, sosyal medya hesaplarınız veya çeşitli işlemler için kullandığınız istemciler… Bunların hepsinde çeşitli parolalar kullanmaktayız.

Bir sisteme girebilmemiz için biz parolamızı yazıp giriş butonuna bastığımızda arka planda daha önceden belirlemiş olduğumuz parolayla bir karşılaştırma gerçekleşir. Doğruysa başarılı şekilde giriş yaparız, yanlışsa giriş yapmamıza müsaade edilmez. Bu en basit haliyle böyledir fakat bir de saldırgan gözüyle bakalım. Ortada parola ile girilen bir sistem varsa mutlaka daha önceden belirlenen bir parola da vardır ve bu bir yerde saklanıyordur. Bu şekilde parola veya diğer düz metin halinde saklanan diğer veriler ele geçirilebilir.

“Hash”leme İş Başında

İşte tam bu nedenle de günümüzde hashleme algoritmaları kullanılır. Parolalar veya çeşitli veriler asla düz metin halinde tutulmaz. Bir siteye kayıt olurken belirlemiş olduğunuz parola olduğu haliyle veritabanında saklanmaz. Tek yönlü bir algoritma yardımıyla şifrelenir ve gerçek paroladan alakasız olacak şekilde harf ve sayılardan oluşan bir hale getirilir. Dışarıdan sisteme erişen saldırgan şifrelenmiş verileri ele geçirse de bunlar bir işe yaramayacaktır zira bu çoğunlukla tek yönlü bir şifreleme biçimidir ve eski haline döndürülemez.

Peki biz nasıl doğru parolayı girince servislere güvenle erişim sağlayabiliyoruz? Aslında bu soru basit ve kendi içinde cevabını taşıyor. Önceden belirlemiş olduğumuz parola orijinal bir algoritmayla şifrelenerek veritabanında saklanıyor. Biz servislere erişmek için giriş kısmına parolamızı girdiğimizde bu parola tekrardan aynı algoritma ile şifrelenir, tuzlanır ve daha önceden kaydedilen parolanın şifrelenmiş haliyle eşleştirilir. Eğer birbirine uyuyorsa hesaba başarıyla giriş yapılır.

Peki Sadece Hashleme Yeterli mi?

Buna net bir cevap vermek hayli ilginç olacak zira bu sorunun cevabı uygulanış şekline göre değişebilmekte. Kullanılan hash algoritması, şifre ve yöntem büyük önem arz ediyor.

Şifrelemede “Plain Text” (düz metin), şifre ve şifre algoritması yardımıyla karıştırılır. Şifrelenen veri şifrenin tekrar girilmesiyle geri eski haline getirilebilir. Her daim iki yönlü bir dönüşüm vardır. Hashlenmiş veride ise böyle bir şey söz konusu değildir.

Aşağıdaki resimler konu hakkında size fikir verecek.

Hash
Encrypt ve Decrypt işlemlerinin nasıl gerçekleştiğini anlatan bir görsel. – Kaynak: Elcomsoft
Hash
Hash algoritmasının nasıl çalıştığını gösteren bir görsel. – Kaynak: Elcomsoft

Hashlemenin en ilginç ve etkin özelliği ise ele alınan veri kümesindeki en ufak parça ve en ufak bir veri değişse bile farklılık gözlemlenir. Örneğin aşağıda SHA-1 ile şifrelenen bir veri vardır.

Orijinal Metin: Technopat.NET

SHA-1 Değeri: 07a6e54ace6d72fe6aa3439e8a47318ea782b08a

Orijinal Metin: TechnopatNET

SHA-1 Değeri: 7fda47f968da0a527f3dbc202f9ad0c278bd3aa9

Orijinal Metin: Technopat.NET1

SHA-1 Değeri: ddb964d359e197935cf78dd540e004dc0029a5d9

Bu üç örnekte üç farklı durum ele alındı. İlk örnekteki metin SHA-1 ile hashlendiğinde 07a6e54ace6d72fe6aa3439e8a47318ea782b08a çıktısını elde ettik. Diğer iki örneğin birisinde TLD öncesi nokta işareti silindi, diğerindeyse ek bir sayı daha eklendi. Gördüğünüz gibi en ufak değişikliklerde bile hashleme sonucu ortaya çıkan değerler bambaşkadır. Bu nedenle hashleme sadece parolaların güvenli bir şekilde saklanılmasında değil, birtakım verilerin de doğruluğunu kontrol etmek amacıyla da kullanılır. ISO dosyaları, programlar veya gönderilen kritik dosyaların size ulaşırken bozulmaya uğrayıp uğramadığını veya başkaları tarafından müdahale edilip edilmediğini hash değerlerini kontrol ederek anlayabilirsiniz.

Tabii ki bu yine de her algoritmanın tam anlamıyla güvenli bir değer sunduğu söylenilemez. Zira görebileceğiniz gibi en ufak değişikliklerde bile hash değeri büyük oranda, çoğu zaman da birbiriyle alakasız şekilde değişir. Güvensiz algoritmalarda ise büyük ölçüde değişmek yerine, girilen düz metindeki değişiklik kadar hash değerinde değişim gözlemlenir.

Bu ne demek peki? Oldukça basit. Hash değeri baştan değişmediği için elde edilen değerden yola çıkılarak bir süre sonra düz metin kolayca ele geçirilebilir. İlk metin, ufak değişiklik yapılmış metin ve alınan hash değerlerine bakılarak ihtimaller değerlendirilir. Benzer bir yöntem maalesef ki Tally Vault adı verilen ve Hindistan’da oldukça popüler olan iş yönetimi yazılımlarından birinde kullanıldı. Merak ediyorsanız Elcomsoft’un konuyla ilgili yazısını (İngilizce) okuyabilirsiniz.

MD5 ve SHA-1 Terk Edilmeye Başlanıyor

Sadece özel olarak yazılan birtakım algoritmalar değil, genel olarak doğru kabul edilen bazı hashing yöntemlerinin de güvensiz olduğu ortaya çıktı.

MD5 (Message-Digest algoritması 5) temelde kriptografik hash algoritmalarından birisi olmasına rağmen maalesef oldukça önemli güvenlik açıkları çıkmış, kaba kuvvet saldırılarıyla kolayca kırılabilir hale gelmiştir. Ek olarak 2012 yılında ortaya çıkan Flame isimli zararlı yazılımın da yayılmasında zayıf MD5 algoritmasını kullanan Microsoft kod imza sertifikası da kullanıldı. Bunun sonucunda MD5’in güvenilirliği dünya çapında sorgulandı ve bu nedenlerden ötürü algoritma yavaş yavaş  terk edildi.

2017’de ise Google Security ekibi tarafından hazırlanan bir blog girdisinde ilk SHA-1 taklidi duyuruldu. Yapılan açıklamada kriptografi alanında adeta “İsviçre çakısı” hükmünde olan SHA-1 algoritmasının artık başarısız olabileceği, iki farklı dosyanın aynı SHA-1 değerine sahip olmasının mümkün olduğuna değinildi. Google tarafından yapılan duyuruda sektörün SHA-1 kullanımını tamamen terk etmesi gerektiği, SHA-256 gibi daha güvenli algoritmaların tercih edilmesini önerildi.

Peki neden SHA-1 güvensiz hale geldi?

SHA-1; parolalarda, veri bütünlüğünü doğrulamada, çeşitli protokollerde kullanılan bir hashleme algoritması. Google tarafından yapılan algoritmaya yönelik saldırı deneyinde aşağıdaki görselden de anlayabileceğiniz üzere aynı SHA-1 değerine sahip iki farklı dosyanın var olabileceği gösterilmiş. Temelde ne olursa olsun hash algoritmalarının birbirine denk gelmemesi gerekir. Verilerde bir bit bile değişse hash değeri çok daha farklı olmalı.

güvensiz hash algoritması
Güvensiz hash algoritmaları kullanılarak yapılabilecek bir saldırıya örnek. – Kaynak: Google Security Blog

İyi hazırlanmış bir saldırgan maalesef gelen iyi niyetli dosya yerine, temiz dosyayla aynı SHA-1 değerine sahip zararlı bir dosya hazırlayıp bunu kötü amaçlarla kullanabilir. SHA-1 algoritmasının oldukça yüksek işlem gücü kullanılarak güvenliği ihlal edildi. Yine de bu artık güvensiz olduğu gerçeğini değiştirmiyor.

Bir Hash Algoritması Nasıl Olmalı?

Makalemizi bu kısma kadar dikkatlice okuduysanız, bir hash algoritmasının aşağı yukarı nasıl olması gerektiğini tahmin edebiliyorsunuzdur. Çokça bahsettiğimiz gibi, hashleme yöntemi neredeyse bilişim güvenliğinde her yerde kullanılır. Bu nedenle bir hashleme algoritmasının oldukça hızlı hesaplanabilmesi gerekir. Bir Word dosyası doğrulamak için kimse 3 gün beklemek istemez, zaten böyle bir hash algoritması da piyasada kabul görmeyecektir.

Ek olarak hashing algoritması kesinlikle tek yönlü olmalıdır. Orijinal veri kesinlikle hash değerine göre yeniden oluşturulamamalı, farklı veriler aynı hash değerine sahip olmamalı. Elinizde hashlediğiniz parolanız bulunuyorsa ve parolanızı unuttuysanız geri elde etmek için hash algoritmasını kırmakla uğraşmak yerine kaba kuvvet saldırısı yöntemini denemelisiniz. Zira kullanılan hashleme yöntemi her ne ise tek yönlüdür, tersine çevrilemez. Bu deneme yanılma yöntemiyle sonuca ulaşmanız parolanızın ne şekilde oluştuğuna bağlı olarak yıllar da sürebilir.

Hash Algoritmalarının Hızları

Bir veri kümesini, metni veya parolayı hash algoritmaları yardımıyla güven altına alacaksanız, algoritmaların işlem süresini de bilmelisiniz. Makalenin başında da belirttiğimiz gibi kimlik doğrulama gibi kullanımlarda, veritabanındaki hash değeri ile girilen parolanın hash değerinin karşılaştırılması yapılır, doğru ise giriş başarıyla gerçekleşir.

Her hash algoritması birbirinin aynısı değildir, bu nedenle hız bakımından her algoritma farklılık gösterebilir. Unutulmaması gereken şey şudur ki, hash fonksiyonlarında veriler yalnızca bir tur yenilenmez. Binlerce kez karıştırılır ve sonuç öyle elde edilir. Eğer hash yöntemleriyle tek yönlü şekilde bambaşka hale getirilen veriler tek yinelemeyle gizlenseydi, modern donanımlarla kolayca bunları kırabiliyor olurduk.

Yinelemenin düşük olmasından dolayı olsa gerek 5 yıllık bir Intel i5 işlemci yardımıyla iOS 10.0 sürümünde saniyede 6 milyona kadar parola denemesi yapılabiliyordu.

Her ne kadar tur sayısı kullanım yerine göre değişse de, biraz sayısal konuşacak olursak Microsoft Office yazılımının son sürümlerinde belgelerin 100.000 kez -ki merkezi işlemcilerle yapılan bir denemede artık saniyede 10 parola denenebilir- iOS 10.2 sürümü ve sonrasında kullanılan yedeklemelerdeki karıştırma işlemi ise 1.000.000 kez yapılır. Bu değişiklikler sonrasında ise CPU yardımıyla yapılan bir kaba kuvvet saldırısı sonucunda dakika başı bir avuç parola deneyebilirsiniz.

Özetle hashlerin yinelenme sayısı arttıkça parola güçlenir, kaba kuvvet saldırıları yavaşlatılır fakat bunun bir nebze de olsa hıza olumsuz etkisi olabilir.

Aşağıda VeraCrypt Benchmark ile yapılmış bir hız testi bulunuyor. Ortalama 500.000 tur yinelenen algoritmaların parolanızı doğrulamak için ne kadar zaman aldığını örnek olarak görebilirsiniz.

VeraCrypt Benchmark ile elde edilen hash algoritması hız değerleri. – Kaynak: Technopat.net

Salting Nedir?

Peki ya zeki birisi en çok kullanılan parolalara karşılık gelen çok sayıda dizenin karmasını hesaplayıp işi kolay yoldan çözmek isterse? Hash değerlerini bu şekilde kırmak kolay olmaz mıydı? İşte bu nedenle hashlenmeden önce parolalara benzersiz ve rastgele bir veri ekleniyor. Bu işleme salting, yani tuzlama deniliyor. Bu işlemlerin sonunda elde edilen parolaya da tuzlanmış, yani salted password denilemkte. Tuzlanıp hashlenerek tutulan parolayı doğrulamak istersek yine salt değerine ve parolanın kendisine ihtiyaç duyarız.

Sonuç ve Özet

Günümüz dünyası dijitalleşmeye devam ettikçe, birtakım güvenlik riskleri de beraberinde geliyor maalesef. İnternetin yeni gelişmeye başladığı dönemlerde parolalar düz metinle tutuluyordu fakat günümüzde bunun yapılması hiç doğru değil. Her gün yüzlerce veri ihlali haberiyle karşılaşıyoruz. Hash algoritmaları işte bu tarz ihlaller sonucunda parolaların doğrudan ele geçirilmesini engelliyor, süreci oldukça yavaşlatan en önemli etkenlerden birisi oluyor.

Özetle bu yazımızda hash algoritmalarına, hashlemenin önemine ve birçok temel kavramdan bahsettik. Merak ettikleriniz için Technopat Sosyal’de konu açabilir, eklemek istedikleriniz varsa yorumlarda belirtebilirsiniz. Esen kalın.