Format Preserving Encryption ar funcționa bine. Schimbarea pe care aș face-o nu este să o folosesc ca „sumă de control”, ci doar să iau numărul biletului (care poate fi o valoare între 0 și, să zicem, 699) și să cripteze FPE ca un număr de 12 cifre). În acest fel, nu trebuie să vă faceți griji cu privire la „entropia limitată”, deoarece spargerea acesteia ar necesita fie să ghiciți cheia (care, dacă este de 128 de biți sau mai mult, este prea greu), fie să ghiciți aleatoriu și să sperați că veți găsi o cheie validă. cod de bare - în acest caz, dacă emiteți 1.000 de bilete valide (și astfel sunt acceptate numai valorile care decriptează de la 0 la 999), probabilitatea de a ghici corect este $10^{3-12}$, adică unul la un miliard - șanse nu sunt foarte bune.
Singura problemă pe care o pot vedea cu FPE este că nu există implementări comune (ceea ce este păcat - cred că FPE este un instrument util în general)
Cu toate acestea, există o alternativă care este disponibilă în mod obișnuit și ar funcționa la fel de bine - Coduri de autentificare a mesajelor (MAC).
Un MAC funcționează ca o semnătură, cu excepția faptului că nu există chei separate de semnare și verificare - în schimb, o cheie face ambele operațiuni. Ați genera o cheie aleatorie și ați da-o atât emitentului de bilete, cât și scanerului de bilete (la fel ca în ideea FPE).
Ceea ce ai face este ca primele trei cifre ale biletului să fie numărul de serie 000-999 (sau 699 dacă ai 700 de invitați). Restul cifrelor ar fi MAC-ul primelor trei cifre, convertite în zecimală (și trunchiate corespunzător). Pentru a valida biletul, scanerul va lua primele trei cifre și va calcula MAC-ul (folosind cheia pe care o cunoaște) și verifică asta până la ultimele 9 cifre.
Acest lucru vă oferă aceeași securitate ca ideea FPE, iar implementările MAC sunt ușor disponibile. Desigur, cu un FPE, nu trebuie să vă faceți griji cu privire la conversia lucrurilor în zecimale (FPE-urile pot funcționa direct cu valori zecimale); MAC-urile standard funcționează în binar și, astfel, pentru a le face zecimale, va fi nevoie de un fel de conversie de bază; cu toate acestea, codul de conversie de bază este mult mai simplu decât codul FPE funcțional.
Există o serie de tipuri de MAC-uri disponibile; Aș sta departe de MAC-uri cu un IV și aș rămâne cu HMAC, KMAC și CMAC.
O ultimă problemă pe care trebuie să o luați în considerare (care nu are nimic de-a face cu întrebarea dvs.): un atac evident ar fi să luați un bilet valid și să îl rulați printr-un copiator și să generați un număr de bilete care s-ar autentifica toate. Dacă aveți un singur scaner, puteți opri acest lucru cu ușurință (făcându-i ca scanerul să-și amintească toate numerele de serie pe care le-a văzut înainte). Dacă aveți mai multe și nu pot comunica, ei bine, aceasta este o problemă mai mare.