# Meydan okuma karşılık verme temelli kimlik doğrulama
Bilgisayar güvenliğinde, meydan okuma – karşılık verme temelli kimlik doğrulama, bir tarafın soru sorduğu (meydan okuma) ve diğer tarafın da, kimlik doğrulama için, bu soruya geçerli bir cevap (karşılık) üretmek zorunda olduğu bir protokol ailesidir.
En basit örneği, parola ile kimlik doğrulamadır. Burada, meydan okuma parolanın sorulması ile sağlanır. Geçerli karşılık ise doğru parolanın girilmesidir.
Açıkça, parola ile kimlik doğrulama sürecini dinleyen bir düşman, aynı şekilde kimlik doğrulamayı gerçekleştirebilir. Bu konudaki çözümlerden biri, her biri farklı bir belirteç ile işaretlenmiş çok sayıda parola kullanmaktır. Onaylayıcı bu parolalardan herhangi birini sorabilir. Kimliğini kanıtlayacak kişi, sorulan belirteç için doğru parolaya sahip olmalıdır. Parolaların bağımsız olarak seçildiğini varsayarsak, bir kimlik doğrulama mesaj çiftini dinleyen düşman farklı bir meydan okuma ile ilgili hiçbir ipucuna sahip değildir.
Örneğin; diğer iletişim güvenlik metotları kullanılabilir olmadığında, ABD ordusu, kimlik doğrulama ve şifreleme için AKAC-1553 TRIAD numaralı şifrelemeyi kullanır. TRIAD, 3 harflik meydan okuma kodlarının bulunduğu bir listeyi içerir. Onaylayıcı, bu listeden meydan okuma kodunu ve bu kodun karşılığını rastgele seçer. Güvenliği artırmak için, her bir kod kümesi, genellikle 24 saat olan belirli bir zaman aralığında, sadece bir kez geçerlidir.
Daha ilginç bir meydan okuma – karşılık verme tekniği şöyle çalışır: Diyelim ki “Bob”, bazı kaynaklara erişimi kontrol eden kişi. Alice giriş yapmak için gelir. Bob bir meydan okuma yayımlar, “52w72y” gibi. Alice, Bob’un yayımladığı meydan okumaya “uyan” tek karşılığı cevaplamak zorundadır. Burada “uyan” ifadesi, Bob ve Alice tarafından bilinen, algoritma tarafından belirlenmiş bir karşılıktır (Doğru karşılık “63x83z” gibi meydan okumadaki her bir karakterin bir üstüne tekabül eden bir karşılık dahi olabilir. Yine de gerçek dünyada karşılığı bulamaya yarayan bu kurallar çok daha karmaşıktır). Bob, her seferinde farklı bir meydan okuma yayımlar ve bir önceki meydan okumanın karşılığını bilmek işe yaramaz, Alice ve Bob arasındaki mesajlaşma gizli olmasa bile. Alice’in verdiği karşılığın bir parçası kimlik doğrulama yapmak isteyenin Alice olduğu bilgisini içerebilir.
1980 ve 1990’lardaki yazılımlar sıkça benzer bir metodu kullanmışlardır, kopyalamayı engellemek için: meydan okumalar şu şekilde sorular olabilir “Kullanım kılavuzunun 418. Sayfasında, üçüncü paragraftaki ikinci kelime nedir?”. Buradaki güvenlik varsayımı, kullanım kılavuzunu kopyalamanın yazılım diskini kopyalamaktan daha zor olacağı düşüncesinden gelmektedir. Bazı durumlarda kullanım kılavuzu, modern fotokopi makinelerinin sayfaları çift kopya çoğaltamayacağı şekilde çıkartılabilirdi.


## Diğer kriptografik olmayan protokoller.
Meydan okuma – karşılık verme protokolleri, gizli bir bilginin bilinmesi dışında şeyler de ileri sürebilir. CAPTCHA’lar, örneğin, Turing testinin bir türevidir ve Web uygulamasını görüntüleyenin gerçek bir kişi olup olmadığını belirlemeyi amaçlar. Görüntüleyen tarafa gönderilen meydan okuma, bir yazının bozulmuş halidir ve görüntüleyen tarafın metni girmesi beklenir. Burada bozulma, otomatik optik karakter tanımayı (OCR) zorlaştırmak ve bir bilgisayar programının insan olarak geçişini engellemek için tasarlanmıştır.


## Kriptografik teknikler.
Kriptografik olmayan kimlik onaylama, internetten önceki günlerde genellikle yeterliydi. O zamanlar, kullanıcılar parolalarını girerlerken, parolayı soranın erişmek istedikleri sistem olduğundan ve kimsenin hattı dinlemediğinden emindiler. Ancak, güvenli olmayan kanal problemini çözmek için daha gelişmiş bir yaklaşım gerekli. Birçok kriptografik çözüm 2 yönlü kimlik doğrulamayı içeriyor. Bu yöntemde hem kullanıcı hem de sistem paylaşılan sırrı (secret) bildiklerine karşı tarafa ikna etmek zorunda.
Bu uygulamayı gerçekleştirmenin bir yolu, parolayı rastgele oluşturulan meydan okumayı şifrelemek için kullanmak ve karşı tarafın da meydan okumanın karşılığını aynı şekilde şifreleyip yollaması ki böylece şifreyi bildiğini ve meydan okumayı çözebildiğini kanıtlamış olsun. Örneğin, Kerberos’ta, meydan okuma şifrelenmiş bir tam sayıdır. Karşılık ise bu sayının bir fazlasının şifrelenmiş halidir. Böylece meydan okumaya karşılık veren taraf meydan okumanın şifresini çözdüğünü, dolayısıyla anahtara sahip olduğunu kanıtlamış olur. Diğer türevlerinde ise, bir özet fonksiyonu (hash function), karşılık değerini bulmak amacıyla, parolanın ve rastgele bir değerin hash sonucunu bulmada kullanılır.
Bu tür şifrelenmiş ya da özet fonksiyonu kullanılan değişimler, dinlemeler karşısında parolanın direkt öğrenilmesini engeller. Bununla beraber, dinleyen kişinin parolanın ne olduğunu, sözlük ya da kaba kuvvet saldırılarıyla bulmasına yetecek kadar bilgi de sızdırabilir. Burada, her bir değişim için ayrı ayrı kullanılan rastgele değerin amacı tekrar saldırılarına (replay attack) karşı koymak için içindir. Bu saldırıda, değiştirilen veriyi dinleyen bir saldırgan, sonraki bir zamanda bu veriyi aynen göndererek taraflardan birini, kimliğinin doğrulanmış olduğuna dair kandırabilir.
Kimlik doğrulama protokolleri, genellikle kriptografik nonce’ları (bir kez kullanılan sayılar), her bir karşılığın eşsiz olduğundan emin olmak adına meydan okumada kullanırlar. Böylece, ortadaki adam (man in the middle) ve ardışık tekrar saldırılarına karşı koruma sağlanır. Eğer gerçek bir nonce oluşturmak pratik değilse, güçlü bir kriptografik olarak güvenli sözderastsal sayı üreteci ve özet fonksiyonu da bir kereden fazla ortaya çıkması oldukça düşük ihtimal sayılar üretebilir. Bu noktada zaman tabanlı nonce’lar kullanmamak, farklı zaman dilimindeki ve hassas olmayan saatlere sahip sunucuları yanıltacağından önemlidir.
Karşılıklı kimlik doğrulama, çift yönlü meydan okuma – karşılık verme el sıkışması uygulanarak sağlanır. Hem sunucu hem de kullanıcı, karşı tarafın sırrı bildiğinden ve hilekâr bir sunucunun gerçek sunucu yerine geçmeye çalışmadığından emin olurlar.
Meydan okuma – karşılık verme temelli kimlik doğrulama, şifreleme için oturum anahtarlarının değişiminde karşılaşılan problemi çözmede kullanılabilir. Anahtar türetme işlevi (key derivation function) kullanılarak, meydan okuma değeri ve sır tahmin edilemez bir oturum anahtarı oluşturmak için bir araya getirilebilirler. Bu yöntem, özellikle ortadaki adam saldırısına karşı etkilidir, çünkü saldırgan sırrı bilmeden meydan okumayı kullanarak oturum anahtarına ulaşamayacaktır ve böylece veri akışının şifresini de çözemeyecektir.


## Basit karşılıklı kimlik doğrulama örneği.
 - Sunucu, istemciye eşsiz bir meydan okuma değeri, sc, gönderir
 - İstemci eşsiz bir meydan okuma değeri, cc, oluşturur
 - İstemci, cr=özet(cc + sc + sır) hesaplar
 - İstemci cr ve cc değerlerini sunucuya gönderir
 - Sunucu cr değerini hesaplar ve istemcinin gönderdiği değerle kıyaslar
 - Sunucu sr=özet(sc + cc + sır) değerini hesaplar
 - Sunucu sr değerini gönderir
 - İstemci sr değerini hesaplar ve sunucunun gönderdiği değerle kıyaslar


## Parola depolama.
Parolaların depolanmasından kaçınmak için, bazı işletim sistemleri (Unix-type gibi) parolaların kendileri yerine özetlerini depolar. Kimlik doğrulama sırasında, sistem sadece girilen parolanın özeti ile kayıtlı olan özeti kıyaslar. Bu metot, parola depolanmadığından ve özet değeri verilen parolanın kendisini bulmak çok zor olduğundan; sisteme sızan saldırgan için parolaları elde etmeyi zorlaştırır. Bununla beraber, bu metot, birçok meydan okuma – karşılık verme algoritması için bir problem teşkil eder. Hem istemcinin hem de sunucunun paylaşılan bir sırra sahip olmasını şart koşmaktadır. Parolanın kendisi tutulmadığından, algoritma genellikle parolayı değil de özetini kullanır. Bu durumda da, saldırgan parola yerine özet değeri çalabilir. SCRAM bu problemi çözmüş olan bir meydan okuma – karşılık verme algoritmasıdır.


## Örnekler.
Daha gelişmiş meydan okuma – karşılık verme algoritmalarının örnekleri sıfır-bilgi parola ispatı (zero-knowledge password proof) ve anahtar anlaşma sistemleridir (Secure Remote Password, SRP gibi). Meydan Okuma-El Sıkışma Kimlik Doğrulama Protokolü (Challenge-Handshake Authentication Protocol, CHAP), CRAM-MD5, OCRA, OATH, SCRAM bazı diğer örneklerdir.
Bazı kişiler CAPTCHA’yı da bir çeşit meydan okuma – karşılık verme tabanlı kimlik doğrulama yöntemi sayarlar.