# Kriptografik özet fonksiyonu
 Kriptografik özet fonksiyonu çeşitli güvenlik özelliklerini sağlayan bir özet fonksiyonudur. Veriyi belirli uzunlukta bir bit dizisine, (kriptografik) özet değerine, dönüştürür. Bu dönüşüm öyle olmalıdır ki verideki herhangi bir değişiklik özet değerini değiştirmelidir. Özetlenecek veri mesaj, özet değeri ise mesaj özeti veya kısaca özet olarak da adlandırılır.
İdeal bir kriptografik özet fonksiyonu şu dört özelliği sağlamalıdır:
  - Herhangi bir mesaj için özet hesaplamak kolay olmalıdır.
  - Bir özete karşılık gelecek mesajı oluşturmak zor olmalıdır.
  - Özeti değişmeyecek şekilde mesajı değiştirmek zor olmalıdır.
  - Aynı özete sahip iki farklı mesaj bulmak zor olmalıdır.
Kriptografik özet fonksiyonları, bilgi güvenliği konuları olan sayısal imza, mesaj doğrulama kodu ve diğer doğrulama yöntemlerinde yaygın olarak kullanılmaktadır. Sıradan özet fonksiyonları gibi veriyi komut çizelgesine eşlemede, eşdeğer veri bulmada, dosyaları tekil olarak tanımlamada ve veri bütünlüğü sağlamasında da kullanılır. Bilgi güvenliği konularında kriptografik özet fonksiyonları, terim anlamları farklı olsa da sayısal parmak izi, sağlama veya özet değeri ile benzer anlamlarda kullanılır.


## Özellikleri.
Çoğu kriptografik özet fonksiyonu girdi olarak değişken uzunlukta veri dizisi alarak sabit uzunlukta bir özet değeri üretir.
Kriptografik özet fonksiyonları tüm kriptografik akınlara karşı dayanıklı olmalıdır. Temel olarak aşağıdaki özellikleri sağlamalıdır:
  - "Öngörüntü direnci"
 - : Verilen bir özet o için o=ozet(m) olacak şekilde bir m mesajı bulmak zor olmalıdır. Bu durum özet fonksiyonunun tek yönlü fonksiyon olma özelliğinden kaynaklanmaktadır. Bu özelliği sağlamayan fonksiyonlar öngörüntü akınlarına açıktır.
  - "İkinci-öngörüntü direnci"
 - : Verilen m_1 girdisi için ozet(m_1) = ozet(m_2) koşulunu sağlayan m_1 m_2 olacak şekilde bir başka m_2 girdisi bulmak zor olmalıdır. Bu özellik "zayıf çakışma direnci" olarak da adlandırılır. Bu özelliği sağlamayan fonksiyonlar ikinci-öngörüntü akını açıktır.
  - "Çakışma direnci"
 - : ozet(m_1) = ozet(m_2) olacak şekilde iki farklı m_1 ve m_2 mesajı bulmak zor olmalıdır. Güçlü çakışma direnci olarak da adlandırılır. Bu özelliği sağlayan mesaj çiftlerine kriptografik özet çakışması denir. Çakışmaların doğum günü akını ile bulunamaması için gereken özet değeri, öngörüntü direnci için gereken özet değerinden iki kat uzun olmalıdır.
Bu özellikler, özeti aynı kalacak şekilde mesajın kötü amaçlarla değiştirilemeyeceğini gösterir. Buna göre, özetleri aynı olan iki dizinin birbirinin aynısı olduğu çok yüksek ihtimalle kabul edilebilir.
Bu özellikleri sağlayan bir fonksiyon istenmeyen bir takım özelliklere de sahip olabilir. Sık kullanılan kriptografik özet fonksiyonlarının bir kısmı "uzunluk artırma" akınlarına karşı zayıflık gösterir. ozet(m) ve uzunluk(m) değerleri bilinirken, m mesajı bilinmese bile uygun bir m' değeri seçilerek ozet(m||m') değeri hesaplanabilir (|| işareti bitiştirme işlemini bildirmektedir). Bu özellik kullanılarak kriptografik özet fonksiyonlarından yararlanan basit doğrulama yöntemlerini kırmak mümkündür. HMAC yapısı bu sorunun üstesinden gelmek üzere tasarlanmıştır.
İdeal koşullarda daha sıkı özelliklerin sağlanması istenir. Özetleri birbirine benzeyen iki farklı mesaj bulmanın imkânsız olması veya bir özetin mesaj hakkında hiçbir bilgi vermemesi beklenir. Bu koşulları sağlayan bir kriptografik özet fonksiyonu mümkün olduğunca rastsal fonksiyon olarak davranırken, aynı zamanda da deterministik ve verimli bir şekilde hesaplanabilir olmalıdır.
CRC32 ve diğer döngüsel artıklık denetimi algoritmaları çok daha zayıf gereksinimleri karşılamak üzere tasarlanmış olup kriptografik özet fonksiyonu olarak kullanılmamalıdır. WEP şifreleme standardı, mesaj bütünlüğünü denetlemek için kriptografik özet fonksiyonu yerine bir CRC algoritması kullanması nedeniyle saldırılara karşı savunmasız kalmıştır.


### Zorluk derecesi.
Pratik kriptografi uygulamalarında zorluk, sistemin güvenliği önemli olduğu sürece sisteme saldıracak düşmanların sistemi kıramayacakları bir derece olarak tanımlanır. Tanıma göre güvenlik ihtiyacı uygulamanın niteliğine göre değişebilmektedir. Düşmanların harcayacağı çabanın uygulamanın kırılmasıyla elde edilecek değer ile orantılı olduğu kabul edilebilir. Sistemi kırmak için gereken çaba özetin uzunluğu ile çok hızlı bir şekilde artmaktadır. Dolayısıyla özet uzunluğunu birkaç on bit artırarak, sistemi kırmak için gerekli çabayı binlerce kat artırmak mümkündür. Bu durum da sistemi kırmayı elde edilecek değere göre verimsiz hale getirecektir.
Teorik anlamda zorluk matematiksel olarak tanımlanmıştır. Asimptotik polinom zamanda kırılamayan bir güvenlik sistemi kırılması zor olarak kabul edilebilir. Bu tür tanımlar ispatlanabilir güvenlik açısından önem taşısa da pratiklikten uzak olabilmektedir. Teoride yavaş kabul edilen üstel zamanlı bir algoritma pratikte sistemi kırmak için yeterince hızlı çalışıyor olabilir. Benzer şekilde teoride hızlı kabul edilen polinom zamanlı bir algoritma pratikte çok yavaş olduğu için kullanılamayabilir.


## Uygulamaları.
### Dosya veya mesaj bütünlüğü doğrulama.
Güvenli özetlerin önemli kullanım alanlarından birisi mesaj bütünlüğü doğrulamasıdır. Bir mesajda (veya dosyada) değişiklik olup olmadığı, gönderim veya bir başka olaydan önce ve sonra hesaplanan özetlerin karşılaştırılması ile mümkündür. Çoğu sayısal imza algoritması tüm mesaj yerine yalnızca özetin doğrulamasını yapmaktadır. Özetin özgünlüğünün doğru olması mesajın kendisinin özgün olduğunu gösteren yeterli bir kanıt olarak kabul edilmektedir.
Bir diğer uygulama alanı parola doğrulamasıdır. Güvenlik gereği parolalar açık metin olarak saklanmaz, yalnızca özet değerleri tutulur. Bir kullanıcıyı doğrulanırken, kullanıcının girdiği parolanın özeti sistemde saklanan özet ile karşılaştırılır. Parolaların özeti alınarak saklanması, unutulduğunda veya kaybedildiğinde tekrar bulunamayacağı anlamına gelir. Bu nedenle böyle durumlarda parola bir yenisi ile değiştirilir.


### Dosya veya veri tanımlama.
Mesaj özetleri dosya tanımlamada da kullanılabilir. Git, Mercurial ve Monotone gibi kaynak kod yönetim sistemlerinde, dosya içeriği, klasör ağacı gibi çeşitli içeriği tanımlamada SHA-1 özetleri kullanılmaktadır. Kişiden kişiye dosya paylaşım ağlarında da dosyaların hangi kişilerde olduğunu bulmada ve indirilen dosya içeriğini doğrulamada özet değerleri kullanılır.
Özet fonksiyonların en önemli kullanım alanlarından birisi komut çizelgesinde verinin yerini bulmaktır. Özet fonksiyonların özel bir türü olan kriptografik özet fonksiyonları bu amaçla da kullanılabilir. Bununla birlikte, sıradan özet fonksiyonlarına kıyasla hesaplanması daha çok işlem gerektirdiğinden yalnızca güvenliğin ön planda olduğu sistemlerde kullanılmaları daha uygundur.


### Sözderastsal sayı üretimi ve anahtar türetme.
Kriptografik özet fonksiyonlarının bir başka kullanım alanı sözderastsal sayı üretimidir. Tek bir anahtar veya paroladan yeni anahtarlar ve parolalar türetmek amacıyla da kullanılabilir.


## Blok şifreleme temelli özet fonksiyonları.
Blok şifreleme yöntemlerini kullanarak özet fonksiyon oluşturmanın birkaç yöntemi vardır. Bu yöntemler blok şifre çalışma kipleri ile benzerlik gösterir. MD4, MD5, SHA-1, SHA-2 gibi iyi bilinen özet fonksiyonları blok şifreleme benzeri bileşenlerden oluşur. Geri besleme mekanizmaları ile fonksiyonun birebir ve örten olması engellenir. SHA-3 finalistleri arasında blok şifreleme ilkelerini kullanan algoritmalar olduğu gibi (Skein, BLAKE) başka tasarımlardan oluşan algoritmalar da vardır (JH, Keccak).
AES gibi standart bir blok şifreleme yöntemi özet fonksiyonlarının içindeki özel blok şifreleme yöntemlerinin yerine kullanılabilir. Böylece gömülü sistemler gibi kısıtlı kaynaklara sahip sistemlerde hem şifreleme hem de özetleme işlemleri en az kod ile yapılabilir. Ancak bu yöntemin verimlilik ve güvenlik açısından bazı sakıncaları da vardır. Özet fonksiyonlarındaki şifreler özetleme için yapılmış olup büyük anahtarlar ve büyük bloklar kullanır. Anahtarı her blok için değiştirebilir ve benzer anahtar akınlarına karşı dirençli olmak üzere tasarlanmıştır. Genel amaçlı blok şifrelerin ise tasarım amaçları farklıdır. AES'in kullandığı anahtar ve blok büyüklükleri uzun özet değerleri üretmek için elverişli değildir. AES şifreleme anahtarın her blok için değişmesi halinde verimsizleşmekte ve benzer anahtar saldırıları özet fonksiyonu olarak kullanıldığında daha az güvenli olmasına neden olmaktadır.


## Merkle–Damgård yapısı.
Bir özet fonksiyonu herhangi uzunluktaki bir mesajı sabit uzunlukta bir özet değerine dönüştürebilmelidir. Bu amaçla girdi eşit büyüklükte parçalara bölünür. Her parça ayrı bir tek yönlü sıkıştırma fonksiyonuna girdi olarak verilir. Bu fonksiyonun bir diğer girdisi de kendinden bir önceki fonksiyonun çıktısıdır. Bu şekilde zincirleme bir hesap sonucu özet değeri elde edilir.
Merkle–Damgård yapısı ile oluşturulmuş özet fonksiyonları, çakışmalara ancak kullanılan sıkıştırma fonksiyonunun olduğu kadar dayanıklıdır. Özet fonksiyonunda bulunacak bir çakışma çözümlenerek sıkıştırma fonksiyonunda karşılık gelen çakışma bulunabilir.
Oluşturulan özet fonksiyonunun güvenli olması için mesajın sonuna mesaj uzunluğu eklenir ve özet o şekilde hesaplanır. Aksi takdirde bilinmeyen bir mesajın sonuna başka bir mesaj eklemek suretiyle elde edilecek yeni mesaj için geçerli bir özet hesaplamak çok kolay olacaktır. SHA-1 ve MD5 gibi çok kullanılan özet fonksiyonları da bu yöntemi kullanmaktadır.
Merkle–Damgård yapısı çeşitli uzunluk artırma saldırılarına karşı zayıflık göstermektedir. Zincirleme hesaplama yapısı gereği paralel olarak çalışması da mümkün değildir. Bu nedenlerle farklı yapılarda kurulan yeni özet fonksiyonları tasarlanmaktadır.


## Diğer kriptografik birimlerin yapısına katkıları.
Kriptografik özet fonksiyonları diğer kriptografik birimlerin yapılarında kullanılabillir. Kriptografik güvenliği sağlamak için bu tür yapılar oluşturulurken dikkat edilmelidir.
Anahtarlı özet fonksiyonları olarak da adlandırılan mesaj doğrulama kodları özet fonksiyonları kullanılarak oluşturulur. HMAC bu duruma örnektir.
Blok şifrelemenin özet fonksiyonlarında kullanılabildiği gibi özet fonksiyonları da blok şifreleme yapılarında kullanılabilir. Luby-Rackoff yapısı içerisinde kullanılan özet fonksiyonları güvenli olduğu sürece güvenlidir.
Sözderastsal sayı üreteçleri yapısında özet fonksiyonlarını barındıran bir başka kriptografik araçtır. Gizli bir çekirdek değerini bir sayaç ile birleştirip özetlemek suretiyle sözderastsal sayılar elde edilebilir.
Akış şifrelemeyi sabit uzunlukta çıktı üreten özet fonksiyonları ile gerçeklemek mümkündür. Özet fonksiyonları kullanılarak yapılmış sözderastsal sayı üreteçlerinden elde edilen sayılar akış şifrelemede anahtar olarak kullanılabilir.


## Kriptografik özet fonksiyonlarının bitiştirilmesi.
Birden çok özet fonksiyonunun çıktılarının bitiştirilmesiyle elde edilecek bir özet, çakışma direnci açısından fonksiyonların en dirençlisi kadar dirençli olacaktır. Taşıma Katmanı Güvenliği algoritmasının eski sürümleri özet değeri olarak MD5 ve SHA-1 özetlerini birlikte kullanmaktaydı. Böylece, bu iki özet fonksiyonunun herhangi birinde çakışma bulunması algoritmanın güvenliğini etkilemeyecekti.
Farklı özet fonksiyonlarının Merkle–Damgård yapısı ile zincirleme birbirine bağlanması neticesinde kurulacak bir özet fonksiyonunun çakışma direnci, bileşenlerinin direncinden daha fazla değil, en fazla en dirençlisi kadar olacaktır.


## Kriptografik özet algoritmaları.
Mevcut birçok özet fonksiyonu bulunsa da birçoğunda güvenlik açıkları tespit edildiğinden kullanılmamalıdır. Bir özet fonksiyonu doğrudan kırılmamış olsa bile zayıflatılmış bir türevinin kırılmış olması fonksiyona olan güveni azaltır. Ağustos 2004'te SHA-0, RIPE-MD ve MD5 gibi zamanın gözde algoritmalarında bulunan zayıflıklar, bu algoritmalar temel alınarak yapılmış SHA-1, RIPEMD-128 ve RIPEMD-160 gibi algoritmaların güvenliğinde de kuşkuya yol açmıştır.
SHA-0 ve SHA-1 özet fonksiyonları Ulusal Güvenlik Teşkilatı tarafından geliştirilmiştir. Şubat 2005'te SHA-1'e karşı başarılı olan ilk saldırı duyurulmuştur. Bu saldırıya göre, 160 bitlik bir özet fonksiyonunda çakışma bulmak için gereken 280 işlemden daha kısa zamanda, 269 özetleme sonucu çakışma bulunmuştur. Ağustos 2005'te açıklanan bir başka saldırı ile bu sayı 263'e kadar düşmüştür. Yeni uygulamalar SHA-2 gibi SHA ailesinin daha üst düzey fonksiyonlarını kullanarak güvenliği sağlayabilirler. Rastsal özetleme kullanılarak da çakışma akınlarına karşı güvenlik sağlanabilir.
Özet fonksiyonu kullanan uygulamaların uzun dönemde güvenliğini sağlamak adına, SHA-2'nin yerini alacak olan SHA-3 algoritması için NIST'in düzenlediği yarışmanın 2012 yılı içinde sonlanması beklenmektedir.
Sık kullanılan özet fonksiyonlarının bir kısmının özellikleri aşağıdaki çizelgede verilmiştir.
Not: "İç durum", yapı içindeki sıkıştırma fonksiyonu bloklarının çıktısını bildirmektedir. Birçok algoritma özetlenen veri boyutu başta olmak üzere birçok farklı değişken de tutabilmektedir.