Mesaj Özütü (Hash) Algoritmaları

Mesaj Özütü Algoritmaları, literatürde Tek Yönlü Algoritmalar (One way Algorithms) olarak bilinir. Tek yönlü algoritmadan kasıt, algoritmanın ürettiği sonuçtan tekrar asıl metine dönüşün mümkün olmamasıdır. Peki geri dönüşüm olmayacaksa neden bu algoritmadan geçiriyoruz? İşte şifreleme algoritmalarından farkı burada ortaya çıkar. Şifreleme algoritmaları çift yönlüdür, yani üretilen sonuçtan tekrar asıl metine dönebilirsiniz. Tek anahtar şifreleme algoritmaları, bir şifre(key) ile metni şifreler, yine aynı şifre(key) ile şifreyi çözer yani deşifreler. Oysa hash algoritmalarında üretilen sonuçtan geri dönüş yoktur.

Yani algoritmanın çalışmasını şöyle özetleyelim; 
Orjinal metin veya algoritmadan geçirelecek metin P olsun.
Hash algoritması fonksiyonunu da H() ile ifade edecek olursak, sonuçta;

S= H(P)

şeklinde olur. Burada H() yani Hash fonksiyonu, her girdi için tek bir çıkış üretir. Burada P bir 10 megabaytlık bir word dosyası, 8 haneli bir şifre vs. olabilir. Sonuçta hep sabit uzunlukta değer üretilir.  Örneğin 10 MB'lık bir word dosyasını MD5 hash algoritmasından geçirdiğiniz. Sonra gidip word dosyasında 1 harfi değiştirdiniz, kaydettiniz, tekrar MD5 algoritmasından geçirdiniz. Sonuç değişecektir, önce elde ettiğiniz sonuçtan çok farklı bir sonuç elde edeceksiniz. 

Hash Algoritması, MD5, SHA veya RIPEM-D olabilir. Bu algoritmaların birçok versiyonu ve türevi vardır. MD5 algoritması ve son zamanlarda MD5 güvensiz olmasıyla terkedilmiş, popülerleşen SHA çok kullanılmaktadır. 

En çok kullanıldığı yerlerin başında veritabanında bir tabloda saklanacak kullanıcı şifresidir.  Bir hacker veya attacker veritabanındaki bazı bilgilere çeşitli tekniklerle ulaşabilir, kullanıcı şifresi bu bilgiler arasında en önemlisidir. Örneğin FaceBook sistemini düşünün, Facebook'a girişte e-mail ve şifrenizi kullanırsınız. Girdiğiniz şifre FaceBook'un MySQL veritabanındaki tabloda girdiğiniz şekilde tutulmaz. Örneğin şifreniz "abc1234" ise, veritabanında bu ifadenin 384 bitlik SHA'dan geçirildikten sonraki hali tutulur.  Veritabanını inceleyen bir kişi abc1234'ü veritabanında görmez, onun hash algoritmasından geçirilmiş halini görür ve bir sonuca varamaz.

MD5  - 128 bitlik sabit uzunlukta çıkış verir.
MD6  - 256 bitlik sabit uzunlukta çıkış verir.
SHA1- 160 bitlik sabit uzunlukta çıkış verir.

Peki, kullanıcı yeniden şifre girdiğinde ne olacak? Kullanıcının girdiği şifre, kullanıcı adı ve şifreyi girdiği ekranda GİRİŞ düğmesine bastığında hemen hash algoritmasında geçirilerek veritabanındaki ile aynı olup olmadığına bakılır. Aynıysa problem yoktur, girilebilir, değilse girmeye izin verilmez.

Genelde biz uygulamalarımızda özellikle web sitelerinde kullanıcı bilgilerini veritabanında saklarken SHA kullanırız. 160 bitlik SHA algoritması en çok kullanılanıdır. SHA'nın birçok türevi vardır. Facebook'un kullandığı 384 bitlik versiyon, 160 bitliğe göre daha güvenlidir. Hash algoritmasının ürettiği bit sayısı ne kadar fazlaysa algoritma o kadar güvenlidir, diyebiliriz. 512 bitlik SHA da 384 bitlik SHA dan daha güvenlidir. Fakat burada yanlış bir anlaşılma olmasın. Aynı algoritmanın farklı bitleri arasında karşılaştırma yapıyoruz. RIPEM-D 160 bitlikle, RIPEM-D 320 bitlik arasında karşılaştırma ya da, SHA 160 birlikte, SHA 256 bit arasında karşılaştırma yapmak doğrudur. 

Bazı algoritmalar sonuçta çok fazla bit üretse de az bit üretenden daha az güvenli olabilir. Yani farklı algoritmaları karşılaştırırken ürettiği bit sayısına bakmamalıyız. Matematiksel olarak Hash fonksiyonuna göz atmalıyız, burada matematiksel derinliğine inmeyeceğiz. Sadece hash algoritmalarının uygulama alanlarına değineceğiz.

Hash algoritmaların bir diğer kullanım yeri de internetten indirdiğiniz herhangi bir dosyanın tam inip inmediğini tesbit etmektir. Örneğin diyelim ki, web sitemizde 700 MB'lık bir Pardus.ISO dosyasının linkini koyduk. Linkin altına Pardus.ISO dosyasının SHA veya MD5 algoritmasından geçirilmiş halini de koyuyuyoruz. Pardus.ISO dosyasını sitemizden indiren kullanıcı, kendi bilgisarında indirdiği dosyayı MD5 veya SHA'dan geçiriyor, sitemizdeki ile aynı sonuç çıkarsa, sorunsuz inmiştir.

Mesaj Özütü Algoritmaları, Asp.NET ve PHP içerisinde hazır olarak gelmektedir. PHP'de md5(), sha1() fonlksiyonlarına bakabilirsiniz. Asp.NET'de Cryptography kütüphanesi mevcuttur. Buradaki linkten inceleyebilirsiniz.

Yazar: Oğuzhan TAŞ 2014

Kaynaklar:
1) Applied Cryptography - Bruce Schneier - Addison Wesley Yayınevi
2) Handbook of Applied Cryptogtaphy, Ron Rivest
3) Hash Algoritmalarının Karşılaştırılması


Bookmark and Share