Kriptografik Hash fonksiyonu nedir ve hangi amaçlarla kullanılır?

Bu flood’da MD5, SHA-1, SHA-256 gibi kriptografik Hash fonksiyonlarından ve bu fonksiyonların bazı kullanım alanlarından bahsedeceğim.

Kriptografik Hash fonksiyonları aldıkları girdinin boyutundan bağımsız olarak belirli (örneğin 20 bayt) uzunluğa sahip bir çıktı üretirler. Üretilen çıktı verilen girdiye özeldir. Aynı girdi ile sürekli aynı çıktı oluşur ve iki farklı girdinin çıktısı ile birbiriyle aynı olamaz. Kriptografik Hash fonksiyonunun çıktısı “message digest”, “hash”, “checksum” ve “digital fingerprint” olarak adlandırılabilir.

Aynı çıktıyı oluşturan iki farklı girdi -”Collision”- bulunduğu anda Hash fonksiyonu “kırılmış”tır ve kriptografik olarak güçlü değildir. SHA-1 için 2017'de 6610 yıl işlemci zamanı kullanılarak bir “Collusion” tespit edilmiştir, MD5'ta ise 2005'ten beri “Collusion”’lar vardır. Tespit edilen “Collusion”’lardan dolayı MD5 ve SHA-1 Hash fonksiyonları günümüzde kriptografik olarak yeterince güçlü kabul edilmemektedir.

Şimdi, kriptografik Hash fonksiyonlarının girdi boyutundan bağımsız fakat girdiyi özel olarak tanımlayan belirli uzunluğa sahip bir çıktı üretmeleri ile yaratılan kullanım senaryolarına bakalım.

En bilinen kullanım alanı, web uygulamalarında kullanıcı parolalarını tutmak yerine Hash’lerinin alınıp veri tabanında saklanması olabilir. Kullanıcının siteye kaydı sırasında verdiği parolanın Hash’i alınır ve kullanıcı adı ile birlikte veri tabanında saklanır. Kullanıcının siteye girişi sırasında sağladığı parolanın yine Hash’i alınır ve kaydedilen Hash ile karşılaştırılır, Hash’lerin aynı olması kullanıcının kayıt sırasında verdiği parola ile giriş sırasında verdiği parolanın aynı olduğu anlamına gelir ve girişe izin verilir. Böylece kullanıcı parolası veri tabanında saklanmayarak veri tabanının ele geçirilmesi durumunda parolanın açığa çıkması engellenmiş olur. Anlatılan bu yöntem günümüzde artık güvenli parola saklama yöntemi değildir. İlerleyen flood’larda parola saklamanın daha güvenli yollarına değineceğiz.

İkinci ve yine etkili bir kullanım alanı olarak kriptografik Hash fonksiyonları, internet üzerinde yaptığımız veri alış-verişlerinde değiştirdiğimiz verinin bütünlüğünün bozulup bozulmadığını anlamamıza yardımcı olur. Örnek olarak internet’ten Ubuntu ISO’sunu indirerek bilgisayarımıza kurmak istediğimizi varsayalım, dosyayı daha hızlı indirebilmek için ise Torrent kullandığımızı düşünelim. Kötü niyetli bir grubun Torrent’te bize Ubuntu’nun virüs eklenmiş bir versiyonunu indirtmediğini anlamak için Ubuntu’nun web sitesine HTTPS bağlantı ile ulaşıp bulduğumuz Hash’i ile indirdiğimiz dosyanın Hash’i ile karşılaştırırız. Hash’ler uyuşuyorsa indirdiğimiz dosya dokunulmamış demektir.

Aşağıda indirilen iso dosyasının shasum ve openssl araçları ile SHA-1 Hash'i alınmış ve Ubuntu web sitesinden kontrol edilmiştir.

Başka bir kullanım senaryosu da içeriğini karşılaştırmanın işlemci açısından maliyetli olduğu durumlarda büyük dosyaları karşılaştırmaktır. Örneğin, bilgisayarımızda bulunan çoklamış resim ve video dosyalarını Hash’lerini alarak hızlı bir şekilde tespit edebiliriz. Bütün dosyaların bir kere Hash’ini alıp dosya yolu ile birlikte saklarsak, Hash’i aynı olan dosyaların duplike olduğunu söyleyebiliriz.

Önceki Git flood’undan hatırlayacağınız üzere Git, objelerin değişip değişmediğini SHA-1 Hash’lerini tutarak anlamaktadır.

Bir başka kullanım alanı da günümüzde popüler olan Blockchain uygulamalarıdır (Bitcoin, Ethereum, vb). Blockchain uygulamalarında Hash’ler sıklıkla kullanılırlar, anlaşılması en bariz fonksiyon “Proof-of-work” olarak verilebilir. İlgililer bu anahtar kelimeyi araştırabilir.

Kriptografik Hash fonksiyonları modern GPU’larda CPU’lardan daha efektif ve hızlı bir şekilde üretilirler. Bunun sebebi GPU’ların matematiksel işlemleri paralel yapacak şekilde CPU’dan daha yavaş ancak çok daha fazla sayıda “Core”’a sahip olmalarıdır.

CRC32 algoritması da kriptografik Hash fonksiyonlarına benzer olarak checksum oluşturur. Daha hızlı çalışmasına rağmen daha fazla “collusion” oluşturur, dolayısıyla bilinçli değişiklikleren ziyade sehven yapılan hataların tespit edilmesi işlemlerinde kullanılır.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.