Tek anahtarlı mesaj doğrulama kodu

Tek anahtarlı mesaj doğrulama kodu (One-key MAC, OMAC), CBC-MAC algoritmasına benzer bir blok şifresinden oluşturulan bir mesaj kimlik doğrulama kodudur .

Resmi olarak, küçük bir değişiklik dışında her ikisi de esasen aynı olan iki OMAC algoritması (OMAC1 ve OMAC2) vardır. Mayıs 2005'te NIST tarafından önerilmiş olan OMAC1, CMAC algoritmasına eşdeğerdir.

Algoritma, herhangi bir patent kapsamında olmadığından her kullanıcı için ücretsizdir. Kriptografide CMAC (Cipher-based Message Authentication Code, Şifre Tabanlı Mesaj Kimlik Doğrulama Kodu) bir çeşit blok şifreleme tabanlı mesaj kimlik doğrulama kodu algoritmasıdır. İkili verilerin kimliğinin doğruluğunu ve dolayısıyla da bütünlüğünü garanti etmek için kullanılabilir. Bu çalışma kipi, CBC-MAC'in güvenlik eksikliklerini giderir (CBC-MAC sadece sabit uzunluktaki mesajlar için güvenlidir).

CMAC algoritmasının temeli, Black ve Rogaway tarafından önerilmiş ve XCBC adı altında analiz edilip NIST'e gönderilmiş olan bir CBC-MAC varyasyonudur. XCBC algoritması, CBC-MAC'in güvenlik eksikliklerini etkili bir şekilde gidermektedir, ancak üç anahtar gerektiriyor. Iwata ve Kurosawa, XCBC için bir iyileştirme sunmuş ve elde ettikleri algoritmayı makalelerinde One-Key CBC-MAC (OMAC) olarak adlandırmış, ardından OMAC üzerine bir iyileştirme ve ilave güvenlik analizi olan OMAC1'i yayımlamışlardır. OMAC algoritması, XCBC için gereken anahtar miktarını azaltır. CMAC, OMAC1'e eşdeğerdir.

Bir adet -bitlik blok şifresi  ve bir adet gizli anahtar  kullanarak, bir mesaja  ait  -bitlik bir CMAC etiketi  oluşturmak için; öncelikle aşağıdaki algoritma kullanılarak iki adet -bitlik alt-anahatlar ( ve ) türetilir (Bu işlem, sonlu alan  üzerinde  ve 'nin çarpımına eşdeğerdir).  sembolü standart sola-kaydırma operatörü ve  sembolü ise dışlayıcı veya işlemini,  fonksiyonu ise sayının en anlamlı bitini (most significant bit) belirtmek üzere:

 Geçici bir  değeri hesaplanır. 
 Eğer  ise, ; aksi halde  olur. Burada,  yalnızca 'ye bağlı belirli bir sabittir. (Spesifik olarak,  değeri, indirgenemeyen  dereceden ikili polinomlar arasında en az sayıda  içeren ilk polinomun baş katsayısı haricindeki diğer katsayılarıdır: Mesela, 64 bit için 0x1B, 128 bit için 0x87 ve 256 bit bloklar için 0x425.) 
 Eğer  ise, , aksi halde  olur. 
 MDK hesaplama işlemi için gerekli bu alt anahtarlar  döndürülür.

Küçük bir örnek olarak, ,  ve  olarak varsayılsın. O halde  ve  olarak hesaplanmış olur.

CMAC etiketi oluşturma süreci aşağıdaki gibidir:

 Mesaj  olacak şekilde  bitlik bloklara ayrılır. Burada  tam bloktur. (Boş mesaj ise tamamlanmamış bir tane blok olarak değerlendirilir.) 
 Eğer  tam bloksa , aksi halde  olur. 
  olsun. 
 Her  için,  değeri hesaplanır. 
  olur. 
 Çıktı  olarak bulunmuş olur.

Doğrulama işlemi ise aşağıdaki gibidir:

 Etiketi oluşturmak için yukarıdaki algoritma kullanılır. 
 Oluşturulan etiketin alınan etikete eşit olup olmadığı kontrol edilir.

Uygulamalar 

 Python uygulaması  
 Ruby uygulaması

Kaynakça

Dış bağlantılar 

 RFC 4493 AES-CMAC Algoritması 
 RFC 4494 AES-CMAC-96 Algoritması ve IPsec ile Kullanımı 
 RFC 4615 Gelişmiş Şifreleme Standardı-Şifreleme Tabanlı İleti Kimlik Doğrulama Kodu-Sözde Rastgele İşlev-128 (AES-CMAC-PRF-128) 
 OMAC Çevrimiçi Testi 
 OMAC Hakkında Daha Fazla Bilgi 
 Phillip Rogaway'in CMAC'ın fikri mülkiyet durumu ile ilgili açıklaması

Sonlu alanlar
Mesaj doğrulama kodu