Message Digest 5 (MD5) algoritması, verilen dosyanın veya mesajın (şifre vb.) kendine has “parmak izi” nin oluşturulmasını hash fonksiyonlarına dayalı olarak sağlayan bir algoritmadır. 1991 yılında MIT’de görev yapan Profesör Ron Rivest tarafından geliştirilmiştir. Profesör Rivest MD5’i MD4’ün bir üst sürümü olarak tasarlamıştır.

Özellikleri

  • MD5 algoritması tek yönlü çalışır. Şifreleme yapar, ancak şifre çözüm işlemi yapılamaz.
  • MD5 algoritması, üzerinde işlem yapılan dosyada (aktarma vb.) herhangi bir değişiklik olup olmadığını tespit eder.  Eğer bir değişiklik yapılmışsa, yeni dosyanın MD5 algoritmasından geçilmesinden çıkan sonuç ile ilk dosyanın MD5 sonucu birbirinden farklı olacaktır.
  • MD5 algoritması bir alt sürümü olan MD4’e göre yavaş çalışır, ancak şifrelendirme sistemi çok daha karışık ve çözülmesi güçtür.
  • Genel olarak 4 farklı aşamalı bir sisteme sahiptir. Her aşama birbirinden farklı işleyişe sahip olup 16’şar basamaktan oluşmuştur. Bir MD5 şifreleme işleminde aşağıdaki resimdeki sistemden 64 tane gerçekleşmektedir.

  • Boyutu fark etmeksizin algoritmaya girişi yapılan dosyanın çıkışı olarak 128-bit uzunluğunda 32 karakterli 16'lık sayı sisteminde bir dizi elde edilir.


Kullanıldığı Yerler

  • Bütünlük (integrity) denetimi yapımı
  • Güvenli şifre saklama sistemleri
  • Kullanıcı adı ve şifresiyle giriş yapılan sitelerde sunucu makineye şifre gönderimi


Dezavantajı

  • Kullanıcı adı ve şifre ile giriş yapılan sitelerde, kullanıcı şifresini unuttuğu takdirde sistem eski şifreyi veremez. Şifre, MD5 algoritmasından geçirilmiş halde saklandığı için, şifre çözülemez. Sistem kullanıcıya yeni şifre atar.


Brute Force Saldırılar

Brute Force saldırısı, sistem veri tabanlarında MD5 algoritmasından geçirilmiş halde saklanan şifreleri, belirli tahminler yürüterek (6 tane rakamdan oluşur, 3 tane büyük harf ve 2 rakamdan oluşur, vb.) önceden hazırlanmış karakter setli algoritmalar çerçevesinde bulmaya çalışan bir saldırı türüdür. Muhtemel bir saldırıda, 10 karakterli bir şifrede büyük harf, küçük harf, rakam ve özel karakterlerin oluşturacakları birleşim sayısı çok fazla olacağından Brute Force saldırıların şifreyi bulma süresi çok uzun olacaktır.

Yeni geliştirilen sistemler, olası sistem açıklarından yararlanarak kullanıcılarının şifrelerini ele geçirenlerin başarılı olma şanslarını en aza indirmek için şifreleri şifreledikten sonra şifrelenmiş şekilleri tekrar şifrelemektedirler.

MD5(MD5(MD5......(MD5(kullanıcı şifresi))……))

MD5 Tabloları ve RainbowCrack Projesi

RainbowCrack projesi büyük harf, küçük harf, rakam ve özel karakterlerin kendi içlerinde oluşturabilecekleri olasılıklar düşünülerek, 1 karakterli olanlardan başlanıp sonsuz karakterli olabilecek tüm şifrelerin MD5 algoritmasından geçirilmiş şekillerinin bir tabloda biriktirilmesidir. Bu proje sayesinde MD5 algoritmasından geçirilmiş şekli bilinen bir dosyanın boyutu ve neler içerdiği veya şifrelenmiş kullanıcı şifresinin kendisi saniyeler içinde tespit edilebilir. Ancak oluşacak olan olasılıklar çok fazla olduğundan bu proje bitirilememektedir.

.NET Teknolojisi ile MD5 Şifreleme

.NET teknolojisi ile yazılım geliştirenler, herhangi bir veride şifreleme yapmak için .NET Framework içerisinde yer alan System.Security.Cryptography kütüphanesini kullanmaktadırlar. Bu kütüphane içerisinde yer alan fonksiyonlar sayesinde, yazılımcı istediği platformda güvenli bir şekilde veri şifreleme ve şifre çözümleme yapabilmektedir. Yazılım geliştiricinin MD5 algoritmasını kullanarak şifreleme yapabilmesi için MD5CryptoServiceProvider sınıfını kullanması gerekmektedir. Aşağıda C# dilinde yazılmış örnek bir Windows uygulamasının kod parçacıkları yer almaktadır:

class Sifreci
    {
        private static byte[] 
ToByteArray(object value)
        {
            byte[] result = new byte[] { };
            string val = value as string;
            if (val != null)
                result = new System.Text.UnicodeEncoding().GetBytes(val);
            return result;
        }

        public static string ToMD5(string value)
        {
            byte[] hash = new System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(ToByteArray(value));
            string result = System.BitConverter.ToString(hash);
            result = result.Replace("-", "");
            return result;
        }

    } 


namespace MD5_Uygulama
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = Sifreci.ToMD5(SifreKutusu.Text);
        }
    }
}

Bazı MD5 şifreleme örnekleri

şifre: 1234
MD5 Hash: 0F037584C99E7FD4F4F8C59550F8F507

şifre: itu2008
MD5 Hash: 19626844AEDCA2286F2932D85EDC8EED

şifre: ITU2008
MD5 Hash: 0C5C136E08F3E9D0E77B2B2C3CD5475C

şifre: 123aBc?=
MD5 Hash: 35D2C8F7CF2487EF3B9051A982ED81F0

Tags: | Categories: .NET