SEPTAGH
New member
hash fonksiyonu nedir?
Tek yönlü hash fonksiyonlar (One-Way Hash Functions) değişken uzunluktaki verileri belirli bir uzunluktaki rastgele görünümlü sabit bir çıktıya çeviren fonksiyonlardır. Her girdi için bir ve yalnız bir çıktı vardır, ve girdideki, 1 bit bile olsa, en ufak değişiklik çıktıda öngörülemez değişikliklere yol açarak bir öncekiyle ilişkilendirilemeyecek yeni bir çıktı verecektir. Bunlar açık fonksiyonlar olup gizli anahtar içermemektedirler. Çeşitli kaynaklarda özet fonksiyonlar olarak da isimlendiriliyorlar..
hash fonksiyonu ne değildir?
Hash fonksiyonu bir şifreleme algoritması değildir. Öncelikle içerisinde bir giz(anahtar) barındırmaz. Ayrıca çok uzun verileri bile belirli uzunluktaki kısa bir parmak izi (fingerprint) haline soktukları için veri kaybına yol açarlar. Bu sebepten ve matematiksel yapıları sonucu geri dönülemezler.
Fakat, rastgelelik ve tek-yönlülük özellikleri kullanılarak şifreleme ve veri doğruluğunu/bütünlügünü ispatlamak (integration) için kullanılabilmektedirler. Aynı şekilde blok şifre algoritmaları da uygun şekillerde kullanılarak bir hash algoritması görevi görebilirler.
Özellikleri:
Herhangi uzunluktaki verimizin sayısal karşılığı M olsun. Genel olarak bir hash fonksiyonunu h=H(M) diyerek temsil edebiliriz. Burada h çıktısı, kullanılan hash fonksiyonunun özelliği olarak sabit uzunlukta bir çıktıdır. En çok kullanılan örnekleri 128/160 bit uzunluğundadır
Bir hash fonksiyonundan beklenen en temel özellikler:
[1] girdi 'M' herhangi uzunluktaki bir veri bloğu olabilmelidir
[2] sabit uzunlukta bir çıktı verir (compression)
[3] verilen herhangi bir M için, H(M)'nin hesaplanması çok kolay olmalıdır
Bunun yanında uygulamada aranan özellikler:
[4] verilen herhangi bir hash çıktısı, h, için H(x)=h olan x'i bulmak kolay hesaplanabilir olmamalıdır. (pre-image resistance)
[5] verilen herhangi bir veri bloğu, x, için x'ten farklı H(x)=H
özelliğini sağlayan y kolaylıkla bulunamamalıdır. (2nd pre-image resistance)
[6] H(x)=H
özelliğini gösteren herhangi (x,y), veri ikilisi kolaylıkla bulunamamalıdır. (collision resistance)
1., 2. ve 3. özellikler genel olarak bir hash fonksiyonunu tanımlamaktadır. 4 ve 5 numarali özellik hash fonksiyonlarını tek yönlü yapmaktadır. Ayrıca 3, 4 ve 5. özellikler checksum, fingerprint, message digest gibi isimler için yetmektedir. Fakat birçok uygulama için tek-yönlülük yeterli değildir. Onun için 6. özellik sayesinde çakışma-direnci(bağışıklığı) (collision-resistance) özelliği eklenmiş olur. Bununla ilgili ayrıntılı bilgi için doğumgünü paradoksu (birthday paradox) başlığını inceleyiniz.
Bu özelliklerin hiçbiri keskin tanımlar değildir. Hash fonksiyonu en genel isimdir, ve kullanıldıgı yere, duyulan ihtiyaca göre isimlendirme yapılmaktadır.
Bunun yanında bu özelliklere alternatif isimler de verilebiliyor. Bazi kaynaklarda Bazi kaynaklarda 5. özellik için zayıf çakışma direnci (weak collision resistance), 6. özellik için güçlü çakışma direnci (strong collision resistance) denmeke.
sonuc olarak tanımları toparlayacan olursak:
tek-yönlü hash fonksiyonu(one-way hash function): bir hash fonksiyonunun ([1],[2] ve [3] ) kendi özelliklerinin yanında [4] ve [5] numaralı özellikleri göstermesi
çakışma-dirençli hash fonksiyonu(collision resistant hash function): bir hash fonksiyonunun ([1],[2] ve [3] ) kendi özelliklerinin yanında [5] ve [6] numaralı özellikleri göstermesi. Bu tip hashlerin kendiliğinden [5] numaralı özelliği göstermesi beklenebilir, fakat bu zorunlu değildir . Bunun yanında pratikteki neredeyse bütün uygulamalar için bu özelliğin varlığı da aranmaktadır. Onun için genel olarak hash fonksiyonu dediğimizde bütün bu özelliklerin kastedildiği düşünülmektedir.
Genel yapıları
Değişken uzunlukta girdileri kabul edip sabit uzunlukta bir çıktı verme özellikleri genel olarak hash fonksiyonlarının veri sıkıştırma fonksiyonlarının mantığından yararlanarak çalışmasına yol açmıştır.
Değişken m-bit uzunluğunda bir M verisi fonksiyon çıktısı olarak sabit n-bit elde etmek için k adet m-bit küçük veri bloklarına (m1,m2,...,mk) bölünerek işleme sokulur. Her işlemin çıktısını
hi = f( mi , hi-1 )
fonksiyonu ile tanımlayalım, i işlem(basamak) numarası olsun. Yani daha sade bir dille anlatacak olursak: her işlemin sonucu bir önceki işlemin sonucu ve o basamaktaki veri bloğunun tekrar işleme sokulması ile elde edilsin. O zaman bütün M verisinin hashlenmesi ise son blok da bu işleme sokulduğunda elde edilen sonuç olacaktır.
Mesaj belgeleyici kodlar (MAC - Message Authentication Codes)
Hash fonksiyonlarının bir gizli anahtarla birleştirerek kullanımı sonucu bir verinin, mesajın, içeriğinin o anahtarı paylaşanlardan biri tarafından gönderildiği gibi olduğunun belgelenmesi, deklare edilmesini saglar. Hash fonksiyonlarının veri bütünlüğünün (integrity) kontrolü için kullanımından farklı olarak sadece anahtar bilgisine sahip tarafların mesajın bütünlüğünü ve kaynagını kontrol edebilmesine müsade etmektedir.
Karşılıklı iki tarafın mesajın kaynak ve bütünlüğünü doğrulaması dışında MAC'ler kişinin bir veriyi saklarken bilinçli olarak değiştirilmediğini de doğrulayabilmektedir. Normalde bir hash fonksiyonu kazara olan değişiklikleri kontrol edebilirken, kasıtlı yapılmış bir değişikliği ilgili hash çıktısı da rahatlıkla saldıran tarafından tekrar üretilebileceği için ortaya çıkaramamaktadır. Bu bir virus ya da kişisel saldırı olabilir. Fakat saldırıyı gerçekleştiren kişi ya da program(virus) gizli anahtarı bilmediği için ilgili MAC'i uygun şekilde değiştiremeyecektir.
Bunun için çok çeşitli yöntemler bulunmaktadır. Fikir vermesi için çok temel bir yöntemi örnek olarak görelim: Taraflar K gizli anahtarını paylaşıyor olsunlar. Karşı tarafa m mesajının gönderilirken yanında MAC fonksiyonumuzun çıktısı M(K,m) de eklenir.
Özel bir MAC fonkiyonu kullanmak dışında, bir hash fonkisyonunu MAC olarak kullanabilmek için basit olarak m mesajının sonuna K anahtarını ekleyebiliriz. o zaman M(K,m)=H(m|K) olacaktır. Fakat safi bu şekildeki bir kullanım bir çok güvenlik açığını da beraberinde getirmektedir. Bu saldırı çeşitleri bu yazının içeriğinin dışında kalmaktadır. Ayrıntılı bilgi icin referans olarak [K2]'e bakılabilir. Alınabilecek önlemler arasında hashi H(K,m,K) olarak hesaplamak ya da 2 farklı anahtar kullanmak, H(K1,H(K2,M)), önerilebilir...
Alıntıdır cemaat...
Tek yönlü hash fonksiyonlar (One-Way Hash Functions) değişken uzunluktaki verileri belirli bir uzunluktaki rastgele görünümlü sabit bir çıktıya çeviren fonksiyonlardır. Her girdi için bir ve yalnız bir çıktı vardır, ve girdideki, 1 bit bile olsa, en ufak değişiklik çıktıda öngörülemez değişikliklere yol açarak bir öncekiyle ilişkilendirilemeyecek yeni bir çıktı verecektir. Bunlar açık fonksiyonlar olup gizli anahtar içermemektedirler. Çeşitli kaynaklarda özet fonksiyonlar olarak da isimlendiriliyorlar..
hash fonksiyonu ne değildir?
Hash fonksiyonu bir şifreleme algoritması değildir. Öncelikle içerisinde bir giz(anahtar) barındırmaz. Ayrıca çok uzun verileri bile belirli uzunluktaki kısa bir parmak izi (fingerprint) haline soktukları için veri kaybına yol açarlar. Bu sebepten ve matematiksel yapıları sonucu geri dönülemezler.
Fakat, rastgelelik ve tek-yönlülük özellikleri kullanılarak şifreleme ve veri doğruluğunu/bütünlügünü ispatlamak (integration) için kullanılabilmektedirler. Aynı şekilde blok şifre algoritmaları da uygun şekillerde kullanılarak bir hash algoritması görevi görebilirler.
Özellikleri:
Herhangi uzunluktaki verimizin sayısal karşılığı M olsun. Genel olarak bir hash fonksiyonunu h=H(M) diyerek temsil edebiliriz. Burada h çıktısı, kullanılan hash fonksiyonunun özelliği olarak sabit uzunlukta bir çıktıdır. En çok kullanılan örnekleri 128/160 bit uzunluğundadır
Bir hash fonksiyonundan beklenen en temel özellikler:
[1] girdi 'M' herhangi uzunluktaki bir veri bloğu olabilmelidir
[2] sabit uzunlukta bir çıktı verir (compression)
[3] verilen herhangi bir M için, H(M)'nin hesaplanması çok kolay olmalıdır
Bunun yanında uygulamada aranan özellikler:
[4] verilen herhangi bir hash çıktısı, h, için H(x)=h olan x'i bulmak kolay hesaplanabilir olmamalıdır. (pre-image resistance)
[5] verilen herhangi bir veri bloğu, x, için x'ten farklı H(x)=H
[6] H(x)=H
1., 2. ve 3. özellikler genel olarak bir hash fonksiyonunu tanımlamaktadır. 4 ve 5 numarali özellik hash fonksiyonlarını tek yönlü yapmaktadır. Ayrıca 3, 4 ve 5. özellikler checksum, fingerprint, message digest gibi isimler için yetmektedir. Fakat birçok uygulama için tek-yönlülük yeterli değildir. Onun için 6. özellik sayesinde çakışma-direnci(bağışıklığı) (collision-resistance) özelliği eklenmiş olur. Bununla ilgili ayrıntılı bilgi için doğumgünü paradoksu (birthday paradox) başlığını inceleyiniz.
Bu özelliklerin hiçbiri keskin tanımlar değildir. Hash fonksiyonu en genel isimdir, ve kullanıldıgı yere, duyulan ihtiyaca göre isimlendirme yapılmaktadır.
Bunun yanında bu özelliklere alternatif isimler de verilebiliyor. Bazi kaynaklarda Bazi kaynaklarda 5. özellik için zayıf çakışma direnci (weak collision resistance), 6. özellik için güçlü çakışma direnci (strong collision resistance) denmeke.
sonuc olarak tanımları toparlayacan olursak:
tek-yönlü hash fonksiyonu(one-way hash function): bir hash fonksiyonunun ([1],[2] ve [3] ) kendi özelliklerinin yanında [4] ve [5] numaralı özellikleri göstermesi
çakışma-dirençli hash fonksiyonu(collision resistant hash function): bir hash fonksiyonunun ([1],[2] ve [3] ) kendi özelliklerinin yanında [5] ve [6] numaralı özellikleri göstermesi. Bu tip hashlerin kendiliğinden [5] numaralı özelliği göstermesi beklenebilir, fakat bu zorunlu değildir . Bunun yanında pratikteki neredeyse bütün uygulamalar için bu özelliğin varlığı da aranmaktadır. Onun için genel olarak hash fonksiyonu dediğimizde bütün bu özelliklerin kastedildiği düşünülmektedir.
Genel yapıları
Değişken uzunlukta girdileri kabul edip sabit uzunlukta bir çıktı verme özellikleri genel olarak hash fonksiyonlarının veri sıkıştırma fonksiyonlarının mantığından yararlanarak çalışmasına yol açmıştır.
Değişken m-bit uzunluğunda bir M verisi fonksiyon çıktısı olarak sabit n-bit elde etmek için k adet m-bit küçük veri bloklarına (m1,m2,...,mk) bölünerek işleme sokulur. Her işlemin çıktısını
hi = f( mi , hi-1 )
fonksiyonu ile tanımlayalım, i işlem(basamak) numarası olsun. Yani daha sade bir dille anlatacak olursak: her işlemin sonucu bir önceki işlemin sonucu ve o basamaktaki veri bloğunun tekrar işleme sokulması ile elde edilsin. O zaman bütün M verisinin hashlenmesi ise son blok da bu işleme sokulduğunda elde edilen sonuç olacaktır.
Mesaj belgeleyici kodlar (MAC - Message Authentication Codes)
Hash fonksiyonlarının bir gizli anahtarla birleştirerek kullanımı sonucu bir verinin, mesajın, içeriğinin o anahtarı paylaşanlardan biri tarafından gönderildiği gibi olduğunun belgelenmesi, deklare edilmesini saglar. Hash fonksiyonlarının veri bütünlüğünün (integrity) kontrolü için kullanımından farklı olarak sadece anahtar bilgisine sahip tarafların mesajın bütünlüğünü ve kaynagını kontrol edebilmesine müsade etmektedir.
Karşılıklı iki tarafın mesajın kaynak ve bütünlüğünü doğrulaması dışında MAC'ler kişinin bir veriyi saklarken bilinçli olarak değiştirilmediğini de doğrulayabilmektedir. Normalde bir hash fonksiyonu kazara olan değişiklikleri kontrol edebilirken, kasıtlı yapılmış bir değişikliği ilgili hash çıktısı da rahatlıkla saldıran tarafından tekrar üretilebileceği için ortaya çıkaramamaktadır. Bu bir virus ya da kişisel saldırı olabilir. Fakat saldırıyı gerçekleştiren kişi ya da program(virus) gizli anahtarı bilmediği için ilgili MAC'i uygun şekilde değiştiremeyecektir.
Bunun için çok çeşitli yöntemler bulunmaktadır. Fikir vermesi için çok temel bir yöntemi örnek olarak görelim: Taraflar K gizli anahtarını paylaşıyor olsunlar. Karşı tarafa m mesajının gönderilirken yanında MAC fonksiyonumuzun çıktısı M(K,m) de eklenir.
Özel bir MAC fonkiyonu kullanmak dışında, bir hash fonkisyonunu MAC olarak kullanabilmek için basit olarak m mesajının sonuna K anahtarını ekleyebiliriz. o zaman M(K,m)=H(m|K) olacaktır. Fakat safi bu şekildeki bir kullanım bir çok güvenlik açığını da beraberinde getirmektedir. Bu saldırı çeşitleri bu yazının içeriğinin dışında kalmaktadır. Ayrıntılı bilgi icin referans olarak [K2]'e bakılabilir. Alınabilecek önlemler arasında hashi H(K,m,K) olarak hesaplamak ya da 2 farklı anahtar kullanmak, H(K1,H(K2,M)), önerilebilir...
Alıntıdır cemaat...