Bu Yazımda MD5 ve SHA1 şifreleme algoritmaları anlatıp çalışan kodlarını vermeye çalışacağım.

Şifreleme tekniklerinin genel adına Kriptografi denir. Bilgi teknolojilerinde birok şifreleme tekniği vardır. Bazı şifreleme teknikleri şifreyi korumaya yönelik iken bazıları da bilgiyi korumaya yöneliktir. Biz MD5 ve SHA-1 isimli iki popüler şifreleme tekniğini anlatmaya çalışacağız.

Bilgisayar bilimlerinde Database’lerin, yani bilgilerin saklandığı merkezlerin güvenli olması için birçok yöntem denenir. Aralarında giriş çıkışların denetlenmesi,  izinler vb. gibi şifreyi korumaya yönelik klasik birçok teknik vardır.  MD5 ve SHA-1 bu sistemlerden çok uzak ve çok daha güvenli olan, bilgiyi korumaya yönelik iki şifreleme tekniğidir.

MD5

Web uygulamalarında birçok sistemde hala aktif olarak kullanan bu şifreleme tekniği, mevcut yazıyı-karakteri-numarayı 128bitlik, 35 hanelik unique(yegâne-tek) bir numara dizisine çevirir. Güvenli olmasının nedeni 128 bite çevrildikten sonra geri çevrilememesidir. MD5’in çözülebilmesi teorik olarak imkânsızdır.

Örnek olarak benim şifremin “12345” olduğunu farz edelim; MD5 ile şifremizin şifrelenmiş hali “827ccb0eea8a706c4c34a16891f84e7b” dır. Şifrem 123456 olsa idi şifremin md5’li hali “e10adc3949ba59abbe56e057f20f883e” olacaktı.

Bazı veritabanları, 8 haneye kadar tüm tahmini değerlerin MD5 kayıtlarını tuttuğu için, MD5’den geri dönüşüm yapıyor gibi görünse de 1991 yılında Ron Rivest tarafından bulunan bu şifreleme tekniği hala tam geri dönüşüm algoritması yapılamamış olan bir tekniktir ve güvenli sayılabilir. Uzun süre, SSL sertifikalar ve Dijital imzalarda kullanılmıştır. Fakat son araştırmalarda sahte MD5 şifreleri üretilmiş ve MD5 şifreleme tekniğinde bazı hatalar olduğu ortaya koyulmuştur. Bu hataların boyutlarının çok küçük olmasından dolayı ileri güvenlik önlemi gerekmeyen alanlarda hala kullanılmaktadır. Mevcut en güvenli şifreleme tekniği ise SHA-2 olarak öngörülmüştür.

SHA-1

National Security Agency tarafından 2005 yılında tasarlanmış olan tek yönlü şifreleme sistemidir (sonrasında daha güvenli olan SHA-2 yayınlanmış ve şimdi SHA-3 için çalışmalar sürmektedir). Genel olarak MD5 ile aynı mantıkta çalışır. Veri bütünlüğü ve kimlik doğrulaması gibi uygulamalarda tercih edilir. SHA-1’in kendisinden 10 sene önce tasarlanan MD5’den farkı 160bit’e kadar çeviri yapması ve algoritma çeşididir.

SHA şifreleme fonksiyonunda 1 tekrarlamanın durumu:
A, B, C, D ve E cümlenin 32-bit’lik kelimeleridir ;
F  doğrusal olmayan bir değişkendir.
n  n yerinden sol parçadaki rotasyonu ifade eder.
n  her operasyon için farklıdır.
Wt t’nin etrafındaki genişletilmiş mesajdır.
Kt t çemberinin değişmez çemberidir.32.
  • JAVA’da SHA-1 Kullanım Örneği*
public String sha1cevirisi(String sifre) throws NoSuchAlgorithmException, UnsupportedEncodingException   {MessageDigest md;
md = MessageDigest.getInstance(“SHA-1”);
byte[] sha1hash = new byte[40];
md.update(sifre.getBytes(“iso-8859-1”), 0, sifre.length());
sha1hash = md.digest();

return convertToHex(sha1hash);
}

private static String convertToHex(byte[] data) {
StringBuffer buf = new StringBuffer();
for (int i = 0; i < data.length; i++) {
int halfbyte = (data[i] >>> 4) & 0x0F;
int two_halfs = 0;
do {
if ((0 <= halfbyte) && (halfbyte <= 9))
buf.append((char) (‘0’ + halfbyte));
else
buf.append((char) (‘a’ + (halfbyte – 10)));
halfbyte = data[i] & 0x0F;
} while(two_halfs++ < 1);
}
return buf.toString();
}

 

Üstteki örnekte sifre değişkeni MD5’e dönüştürülüp geri gönderilmiştir (return edilmiştir).
PHP’de SHA-1 Kullanım Örneği**

<?php
$str = ‘Hello’;
echo sha1($str);
?>
Kodun Çıktısı:     f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0

 

Kullanım Yerleri

  • SMF, V-Bulletin gibi hazır web sistemlerinde şifrenin MD5 veya SHA-1’li hali database’de tutulur ve kullanıcı şifresini girdiğinde, girilen şifre SHA-1’li haline çevrilir. Kullanıcı şifresinin daha önceden database’de tanımlanmış-saklanmış SHA-1’li hali ile yeni elde edilen SHA-1’li şifre karşılaştırılır, aynı ise şifre doğru kabul edilir. (Mevcut Yazılım Kulübü web sitemizde bu sistem ile çalışmaktayız.) Bu tür sistemlerde databaseler yanlış kişilerin eline geçse de şifreler-bilgiler çözülemez, kullanılamaz.
  • Bankalar veya güvenli iletişim gerektiren yerlerde bilgiler saklanırken,
  • SSL sertifikalarında kullanılır.


İpucu

  • Konuyu  “cryptographic hash function” adı ile araştırırsanız ayrıntılı bilgi elde edebilirsiniz.
  • Piyasadaki birçok site direk SHA-1’i kullanmaktansa
    “$sifre = md5(sha1(md5(sha1(“şifrelenicek metin “))));”
    gibi birbirinin içine girmiş şifreleme teknikleri kullanmaktadır. (Biz de sitemizde bu tip bir ikincil şifreleme tekniği kullanmaktayız.)


Platform: JDK 7, NetBeans 6.9.1,  Apache Tomcat:6.0.3

Kaynakça
1) * http://www.anyexample.com/programming/java/java_simple_class_to_compute_sha_1_hash.xml
2) http://en.wikipedia.org/wiki/SHA-1
3) http://en.wikipedia.org/wiki/MD5
4)** http://www.w3schools.com/php/func_string_sha1.asp
NOT:Bu Yazı Fırat Üniversitesi Yazılım Kulübü Script Dergisinin 1.Sayısında Yayımlanmıştır.
Dergiye: http://script.yazilimkulubu.com/ adresinden ulaşabilirsiniz.

Reklamlar