**VMAC**, Nisan 2007'de Ted Krovetz ve Wei Dai tarafından önerilen bir evrensel karma kullanılarak yapılan blok şifreleme tabanlı mesaj doğrulama kodu (MAC) algoritmasıdır. Algoritma, resmi bir analizle desteklenen yüksek performans için tasarlanmıştır.

VMAC, 32 bit mimarilerde iyi performans gösterirken 64 bit CPU mimarilerinde yazılımda olağanüstü performansa sahip olacak şekilde tasarlanmıştır. [alıntı gerekli] Ölçülen hızlar, 64 bit mimarilerde bayt başına bir buçuk CPU döngüsü (cpb), masaüstü 32 bit işlemcilerde beş cpb altında ve gömülü 32 bit mimarilerde yaklaşık on cpb kadar hızlıdır. 32 bit mimariler için optimize edilmiş yakından ilişkili bir VMAC varyantı UMAC tarafından verilir.

Genel bakış
-----------

VMAC, Wegman ve Carter tarzında bir MAC'tir. Hızlı bir "evrensel" karma işlevi, M giriş iletisini kısa bir dizeye karma hale getirmek için kullanılır. Bu kısa dize daha sonra bir psödorandom pad ile eklenerek birleştirilir ve VMAC etiketiyle sonuçlanır. Güvenlik, gönderenin ve alıcının rastgele seçilmiş gizli karma işlevini ve pseudorandom pad'i paylaşmasına bağlıdır. Bu, anahtarlı karma işlevi H ve psödorandom işlevi kullanılarak F elde edilir. Hesaplama gerçekleştirilerek bir etiket oluşturulur

```
    Tag = HK1(M) + FK2(Nonce)
```

Burada K1 ve K2 gönderen ve alıcı tarafından paylaşılan gizli rastgele anahtarlardır ve Nonce oluşturulan her etiketle değişen bir değerdir. Alıcının gönderen tarafından hangi nonce'ın kullanıldığını bilmesi gerekir, bu nedenle nonces eşitlemenin bazı yöntemleri kullanılmalıdır. Bu, ileti ve etiketle birlikte nonce'u açıkça göndererek veya sıra numarası gibi yinelenmeyen başka bir değerin kullanılmasını kabul ederek yapılabilir. Nonce gizli tutulmak gerekmez, ancak bir VMAC anahtarının ömrü boyunca her iletide farklı bir nonce kullanıldığından emin olmak için dikkatli olunması gerekir.

VMAC, anahtarlı karma işlevi H olarak VHASH (bu belgede de belirtilir) adı verilen bir işlev kullanır ve varsayılan uygulaması AES blok şifresini kullanan bir psödorandom işlevi F kullanır. VMAC, kullanımdaki blok şifresinin blok boyutuna kadar herhangi bir 64 bit çoklu etiket uzunluklarına izin verir. AES kullanırken, bu VMAC'in 64 veya 128 bit etiketler üretebileceği anlamına gelir.

Wegman-Carter QC'lerinin teorisi ve VMAC analizi, VMAC'yi gerçekten rastgele tuşlar ve pedlerle "örneklerse" bir saldırganın (hesaplama açısından sınırsız bir tane bile) seçtiği mesajlar için doğru bir etiket üretme olasılığının, etiketler 64 veya 128 bit uzunluğunda olduğunda 1/260 veya 1/2120'den az olduğunu göstermektedir. sırasıyla. Bir saldırgan N sahteciliği girişiminde bulunduğunda, bir veya daha fazla etiketi doğru alma olasılığı doğru bir şekilde N/260 veya N/2120'nin altına artar. VMAC'in uygulanan bir uygulamasında, anahtar ve ped üretmek için AES kullanılarak, bu sahtecilik olasılıkları AES'in güvenliğiyle ilgili küçük bir miktar artar. AES güvenli olduğu sürece, bu küçük katkı maddesi terimi herhangi bir pratik saldırı için önemsizdir. Daha fazla ayrıntı için belirtiye bakın. VMAC güvenliğinin analizi yazarlar Wei Dai ve Ted Krovetz tarafından gerçekleştirilmiştir.

Uygulamalar
-----------

* C
* C++
* Python

Kaynakça
--------

1. ↑  "Arşivlenmiş kopya". 23 Mart 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Mart 2022.
2. ↑  "Arşivlenmiş kopya". 19 Nisan 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Mart 2022.
3. ↑  "Crypto++: vmac.h Source File". *www.cryptopp.com*. 20 Eylül 2010 tarihinde kaynağından arşivlendi.
4. ↑  "Crypto++: vmac.cpp Source File". *www.cryptopp.com*. 20 Eylül 2010 tarihinde kaynağından arşivlendi.
5. ↑  "Arşivlenmiş kopya". 23 Mart 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Mart 2022.

Dış bağlantılar
---------------

* VMAC: Message Authentication Code using Universal Hashing 12 Nisan 2021 tarihinde Wayback Machine sitesinde arşivlendi. - Internet draft
* VMAC Home page 21 Ocak 2022 tarihinde Wayback Machine sitesinde arşivlendi.
* Cryptolounge VMAC wiki entry 2 Nisan 2010 tarihinde Wayback Machine sitesinde arşivlendi.

Şablon:Cryptography navbox