# Anahtar türetme fonksiyonu
Kriptografide, anahtar türetme fonksiyonu (ATF), bir veya daha fazla gizli anahtarı, ana anahtar, parola veya geçit parolası gibi unsurlardan bir sözderastlantısal fonksiyon kullanarak türetir. ATF'ler, anahtarlar boyutlarını uzatmak veya belirli formatlarda anahtarlar elde etmek için kullanılabilirler. Diffie-Hellman anahtar değişimi sonucunda oluşacak bir grup unsurların, AES'in kullanılabileceği bir simetrik anahtara dönüştürülmesi bu kullanıma örnek olarak gösterilebilir. Anahtar kullanılan kriptografik özet fonksiyonları, anahtar türetme için kullanılan sözderastlantısal fonksiyonların popüler örneklerinden biridir.


## ATF'lerin Kullanım Alanları.
  - Ortak bir gizli değerden, bir veya daha fazla anahtar türetmek için gizli olmayan parametrelerle birlikte kullanılır (bazen "anahtar çeşitlendirme" olarak da adlandırılır). Bu tür bir kullanım, türetilmiş bir anahtarı alan bir saldırganın, giriş sırrı değeri veya türetilmiş diğer anahtarlardan herhangi biri hakkında faydalı bilgiler öğrenmesini önleyebilir. Bir ATF ayrıca, türetilmiş anahtarların, bazı özel şifreleme sistemlerinde "zayıf anahtarların" önlenmesi gibi istenen diğer özelliklere sahip olmasını sağlamak için de kullanılabilir.
  - ATF'lerin en genel kullanım alanı, passwd dosyası veya gölge parola dosyası tarafından kullanıldığı gibi, şifre doğrulamasına bir parola özeti yaklaşımıdır. ATF'ler, başlangıçta bu amaç için tasarlanmamış olsalar bile, bir parola özetleme fonksiyonunun karakteristik özelliklere sahiptirler. Bu bağlamda gizli olmayan değişkenlere " tuz " denir.
 2013 yılında, yeni bir parola özetleme algoritma standardı seçmek için, bir Parola Özetleme Yarışması yapılacağı duyuruldu. 20 Temmuz 2015 tarihinde yarışma sona erdi ve kazananın Argon2 olduğu duyuruldu. Dört farklı algoritma ise özel tanınırlık kazandılar (Catena, Lyra2, Makwa ve yescrypt).
  - Çok istemli anahtar anlaşma protokollerinin ana bileşeni olarak kullanılır. IEEE Std 1363-2000'de tanımlanan KDF1 ve ANSI X9.42'deki benzer fonksiyonlar, bu kullanıma örnek olarak verilebilir.
  - Gizi parolalar ve geçit parolalarından anahtarlar türetmek için kullanılır.
  - Halihazırda bulunan anahtarlardan yeni anahtarlar türetmek için kullanılır. HKDF bu amaçla kullanılan ATF'lere örnek olarak gösterilebilir.
  - Anahtar uzunluğunun artırılması ve anahtarların güçlendirilmesi amacıyla kullanılır.


### Anahtar uzunluğunu artırılması ve anahtarların güçlendirmesi.
Anahtar türetme fonksiyonları, doğrudan kriptografik anahtarlar olarak kullanılmak üzere istenen özelliklere sahip olmayan, gizli şifrelerden veya şifrelerden anahtarlar türetme uygulamalarında da kullanılırlar. Bu tür uygulamalarda, genel olarak anahtar türetme işlevinin, kaba kuvvet saldırılarını veya parola veya parola giriş değerindeki sözlük saldırılarını engellemek için kasten yavaş yapılması önerilir.
Bu tür bir kullanım TA = ATF(anahtar, tuz, yineleme) olarak ifade edilebilir. Burada TA türetilmiş anahtar, ATF anahtar türetme fonksiyonu, anahtar, orijinal anahtar veya şifre, tuz, şifreleme tuzu olarak işlev gören rastgele bir sayı ve yineleme, bir alt fonksiyonun yineleme sayısını ifade eder. Türetilmiş anahtar, sistemin anahtarı olarak orijinal anahtar veya parola yerine kullanılır. Tuzun değerleri ve yineleme sayısı (eğer sabit değilse), özetlenmiş parola ile saklanır veya şifreli bir mesajla düz metin olarak gönderilir.
Kaba kuvvet saldırılarının zorluğu, yineleme sayısıyla birlikte artar. Yineleme sayısı üzerindeki limit, kullanıcıların bir bilgisayara girmek veya şifresi çözülmüş bir mesajı görmek istediklerinde, fark edilebilir derecede bir gecikme yaşamak istememelerinden kaynaklanmaktadır. Tuz kullanımı, önceden hesaplanmış, türetilmiş anahtarlardan oluşan bir sözlükler kullanan saldırganları engeller.
Başka bir yaklaşım ise anahtarların güçlendirilmesidir. Anahtar rastgele bir tuz ile genişletilir ancak anahtar uzatılmasının aksine tuz güvenli bir şekilde silinir. Bu durum hem saldırganı hem de meşru kullanıcıları tuz üzerine kaba kuvvet saldırıları yapmaya zorlar. Anahtar uzatılmasını tanıtan makale eski bir teknik olarak tanıtıp, kasıtlı olarak farklı bir ad seçmesine rağmen, şimdilerde "anahtar güçlendirilmesi" terimi genellikle anahtar uzatılması olarak kullanılıyor.


## Tarihçe.
İlk kasıtlı olarak yavaş (anahtar uzatılması) parola tabanlı anahtar türetme fonksiyonu "crypt " (veya el kitabı sayfasından belirtildiği gibi "crypt(3)") olarak adlandırıldı ve 1978'de Robert Morris tarafından icat edildi. Bu fonksiyonla kullanıcı şifresinin ilk 8 karakterini anahtar olarak kullanarak, değiştirilmiş bir DES şifreleme algoritmasıyla 25 yineleme gerçekleştirip (hesaplamalar için gerçek zamanlı bilgisayar saatinden okunan 12 bitlik bir sayının kullanıldığı ) bir sabiti (sıfır) şifrelenir ve elde edilen 64 bitlik sayı yazdırılabilir 11 karakter olarak kodlanır ve daha sonra Unix şifre dosyasına kaydedilir. O zamanlar için büyük bir ilerleme olsa da, PDP-11 döneminden itibaren işlemci hızlarının artmasıyla birlikte, kaba kuvvet saldırıları crypt'e karşı uygulanabilir hale geldi ve depolama alanındaki ilerleme 12 bit tuzlamayı yetersiz hale getirdi. Ayrıca crypt fonksiyonlarının kullanıcı şifrelerini 8 karakter ile sınırlaması, anahtar alanını ve güçlü geçit parolası oluşturmayı sınırlandırdı. 
PBKDF2 ([rfc:2898 RFC 2898'de] belirtilen) gibi modern parola tabanlı anahtar türetme işlevleri, SHA-2, daha fazla tuz (örneğin 64 bit ve daha büyük) gibi bir şifreleme karma ve yüksek yineleme sayısı gibi kriptografik özetleme kullanırlar. (genellikle on veya yüz binlerce).
NIST, en az 128 bit rastgele tuz ve NIST tarafından onaylanmış bir şifreleme işlevi gerektirir, örneğin SHA serisi veya AES gibi(MD5 onaylanmadı). Her ne kadar yüksek verim, genel amaçlı özet fonksiyonlarında arzulanan bir özellik olsa da, kaba kuvvet kırılmasına karşı savunmanın birincil öncelik olduğu şifre güvenliği uygulamalarında durum bunun tersi geçerlidir. GPU'lar, FPGA'lar ve hatta ASIC'ler gibi paralel donanımların artan kullanımı, kaba kuvvet saldırısı için uygun algoritmaların seçimini daha da kritik hale getirdi, çünkü iyi algoritma sadece belirli bir miktarda hesaplama maliyetini artırmamalı, aynı zamanda bu tür görevler için modern paralel platformların maliyet / performans avantajlarına da karşı da dirençli olmalıdır. Bu amaçla, bcrypt, scrypt ve daha yakın bir zamanda Argon2 (Parola Özetleme Yarışmasının galibi) dahil olmak üzere çeşitli algoritmalar tasarlandı. Saldırganlar tarafından kabaca 36 milyon parola özetinin çalındığı büyük ölçekli Ashley Madison veri ihlali, parolaların korunmasında algoritma seçiminin önemini göstermiştir. Her ne kadar karma özetleri korumak için bcrypt kullanılsa da (büyük ölçekli kaba kuvvet saldırılarının yapılmasını masraflı ve zaman alıcı hale getirdi), risk altındaki verilerdeki hesapların önemli bir kısmı, 11 milyondan fazla parolanın haftalar içerisinde kırılmasını mümkün kılacak genel amaçlı MD5 algoritmasına dayanan bir parola özeti içeriyordu.
Haziran 2017'de, NIST dijital kimlik doğrulama kılavuzlarının yeni bir revizyonunu yayınladı: NIST SP 800-63B-3. Kılavuza göre: "Sağlayıcılar hafızaya aldıkları gizli bilgileri(parolalar gibi) çevrimdışı saldırılara karşı dayanıklı olacak bir şekilde depolayabilirler. Hafızaya alınan sırlar, uygun bir tek yönlü anahtar türetme işlevi kullanılarak tuzlanır ve karıştırılabilirler. Anahtar türetme fonksiyonları parola, tuz ve bir maliyet faktörü girdisi alır, ardından bir parola özeti oluşturur. Amaçları, parola özet dosyası elde etmiş bir saldırgan tarafından yapılan tüm şifre tahmin denemelerini daha masraflı hale getirmektir ve bu nedenle tahmin saldırılarının maliyeti yüksektir." ve "Tuz, depo edilmiş özetler arasındaki çakışmayı en aza indirmek için, en az 32 bir uzunluğunda olmalı ve rastgele olarak seçilmelidir."