Mesaj Doğrulama Kodu

Mesaj doğrulama kodu (kısaca MDK) kriptografi biliminde bir mesajın doğruluğunu kanıtlamak için kullanılan küçük boyutlu bilgilerdir.
Mesaj doğrulama kodu algoritması, (ayrıca anahtarlı (kriptografik) özet fonksiyon olarak da bilinir), girdi olarak gizli anahtar ve doğruluğu ispatlanacak olan herhangi bir uzunlukta mesaj alır. Çıktı olarak Mesaj doğrulama kodu  verir. Bu değer mesajın hem veri bütünlüğünü hem de doğruluğunu kontrol etmeyi sağlar. Bu sayede gizli anahtara sahip kişi (doğrulayıcı) gelen mesajda değişiklik olup olmadığını anlayabilir.

Güvenlik

MDK fonksiyonları kriptografik özet fonksiyonlara benzemelerine rağmen güvenlik gereksinimleri bakımından farklıdırlar. Bir mesaj doğrulama koduna güvenli denilebilmesi için, kullanılan MDK fonksiyonunun seçilmiş açık mesaj saldırısı altında varoluşsal sahtekarlığa dayanıklı olması gereklidir. Bunun anlamı, eğer saldırı yapan kişi, gizli anahtara sahip ve saldıran kişinin istediği mesajların bu anahtar ile oluşturulmuş bir MDK'sini veren bir Kahinli Turing makinesine sahip olsa bile, bu mesajlardan başka bir mesaja karşılık gelen MDK'yi olası bir zaman dilimi içinde oluşturamamalıdır.
MDK'ları sayısal imzalardan ayıran temel özellik, hem oluşturma hem de doğrulama aşamasında aynı gizli anahtarın kullanılıyor olmasıdır. Bu da, simetrik şifrelemeye benzer şekilde, gönderici ve alıcının iletişimden önce ortak bir gizli anahtar üzerinde anlaşmalarını gerektirir. Aynı özellikten dolayı MDK'lar sayısal imzaların sağladığı inkar edilemezlik özelliğini sağlayamazlar. Çünkü herhangi bir MDK'yı doğrulayabilen bir kişi aynı zamanda herhangi bir mesaj için geçerli bir MDK da oluşturabilir.

Mesaj bütünlük kodları (MBK)

MBK ve MDK birbirlerine kelime olarak çok benzemelerine rağmen kriptografik olarak farklıdırlar. MDK'nın aksine MBK üretilirken herhangi bir gizli anahtar kullanılmaz. Dolayısıyla MBK ile mesajın bütünlüğü kontrol edilmek istendiğinde, oluşturulan MBK ya şifrelenmeli ya da olası değiştirme müdahalelerine karşı korunmaya alınmalıdır.Aynı MBK üretme algoritmasının kullandıldığı varsayımı altında aynı mesaj için her zaman aynı MBK oluşacaktır. Buna karşı, MDK üretirken kullanılan gizli anahtar ve başlangıç vektörüne bağlı olarak oluşan MDK değişiklik gösterecektir. MBK'lar gizli anahtar kullanmadıkları için MDK'lara göre mesaj bütünlüğünü koruma adına daha zayıftırlar.

Uygulama

MDK algoritmaları kriptografik özet fonksiyonlar ya da blok şifreleme algoritmaları kullanılarak oluşturulabilir. özet fonksiyonlar ile oluşturulan algıritmalara örnek olarak en:HMAC, blok şifreleme kullanılarak oluşturulan algoritmalara ise OMAC, en:CBC-MAC ve PMAC verilebilir. Buna rağmen, en:UMAC ve en:VMAC gibi hızlı MDK üretme algoritmaları evrensel özetlemeye dayalı olarak oluşturulmuştur.

Örnek

Bu örnekte, gönderici, mesajına ait MDK oluşturmak için bir MDK algoritması kullanıyor. Oluşan MDK ve mesaj alıcıya gönderiliyor. Alıcı, ulaşan mesajı, sadece gönderici ve kendisnin sahibi olduğu gizli anahtarı ve gönderici ile aynı MDK algoritmasını kullanarak MDK'yı oluşturur. Oluşan bu MDK, göndericiden mesaj ile birlikte gelen MDK değeri ile karşılaştırılır. Eğer iki MDK birbirine eşit ise, alıcı mesajın bütünlüğünden ve doğruluğundan emin olabilir. Aksi halde mesajın yolda değiştirilmiş ya da hasara uğramış olduğu anlar.