Este atunci sigur dacă folosesc aceeași cheie pentru mesaje diferite?
Sigur; nu ar fi un MAC foarte bun dacă s-ar putea folosi o cheie pentru un singur mesaj.
și de ce am nevoie de un IV pentru GMAC?
Pentru că CMAC și GMAC au interne diferite.
Cu CMAC, ceea ce faceți este în mare parte același calcul ca o criptare în modul CBC, cu excepția faptului că rețineți doar ultimul bloc (și acesta este MAC-ul). Am spus mai ales pentru că dacă faci doar această operațiune (care este cunoscută sub numele de CBCMAC), asta i-ar permite atacatorului să joace unele jocuri cu extinderea mesajului - pentru a preveni asta, CMAC xor are niște date secrete cu ultimul bloc, dejucând astfel de jocuri. .
Motivul pentru care cerem ca IV-ul să fie diferit (și imprevizibil) în modul CBC este pentru ca blocul inițial să nu scurgă informații; CMAC nu scoate blocul inițial în modul CBC (cu excepția cazului în care mesajul se încadrează într-un singur bloc și, chiar dacă da, xorul datelor secrete va preveni orice astfel de scurgere), și astfel CMAC nu împărtășește preocuparea cu privire la IV-uri.
În ceea ce privește GMAC, ei bine, este complet diferit; cu asta, convertiți logic mesajul în coeficienții unui polinom $M_k, M_{k-1}, ..., M_1$; apoi converti IV-ul în termen constant $M_0$ într-o cheie secretă și apoi evaluați polinomul (într-un câmp finit) la un punct secret $H$, adică calculezi:
$$M_kH^k + M_{k-1}H^{k-1} + ... + M_1 H^1 + M_0$$
și acesta este MAC-ul. Rețineți că atacatorul știe totul, cu excepția valorilor secrete $H$ (care este constantă pentru o anumită cheie) și $M_0$ (iar acesta din urmă depinde de IV).
Acum, dacă aveți două MAC-uri pentru două mesaje diferite cu același IV, $M_0$ valorile vor fi aceleași; le puteți scădea și apoi rezolva $H$ - care vă oferă toate secretele, și astfel puteți genera mesaje cu valori MAC valide după bunul plac.
Și, la nivelul destul de înalt pe care l-am descris, Poly1305 funcționează în același mod (și, prin urmare, are aceeași slăbiciune pentru repetarea IV-urilor).
În cazul meu, nu criptez niciun mesaj, doar creez un MAC pe care îl atașez mesajului (text simplu). Este acest lucru vulnerabil?
Orice MAC bun ar fi bine - acesta este într-adevăr cazul de utilizare pe care ar trebui să-l adreseze un MAC [1]. CMAC este bine - GMAC și Poly1305 ar fi, de asemenea, bine dacă evitați repetarea IV-urilor.
[1]: Presupunând, desigur, că expeditorul și receptorul au aceeași cheie secretă - dacă aveți nevoie de ceva în care receptorul nu poate genera mesaje valide, va trebui să vă uitați la semnături.