Puncte:1

Verificați public dacă un bilet a fost emis de o autoritate cu aproximativ 8 cifre

drapel cn

Construiesc un backend pentru aplicații web, astfel încât să putem vinde bilete pentru evenimentele noastre. Evenimentele variază de la 100 la 700 de invitați.

Vindem bilete online și am dori să putem scana biletele la intrare. Acest lucru se face printr-un cod de bare-128. Dar în cazul în care nu este posibil să scanați codul, ar trebui să puteți introduce codul și să îl verificați în acest fel. Deci codul nu trebuie să depășească aproximativ 12 cifre.

Deoarece într-o locație nu avem internet, ar trebui să fie posibil să descărcați ceva ca o cheie publică înainte de festival.

M-am cercetat puțin și am găsit acest. Ceea ce părea o soluție bună. Pur și simplu luați identificatori de remorcare, cum ar fi ID-ul evenimentului și al comenzii (poate să le trimiți), semnați-le și luați numai primele sau ultimele 5 cifre ale semnăturii și adăugați-le la șir. Verificatorul poate verifica apoi semnătura. Dar asta înseamnă că verificarea fie trebuie să dețină cheia privată. Pentru a genera întreaga semnătură și a compara doar o parte din ea sau că semnătura este foarte lungă. Am dreptate? Nu îmi place asta pentru că verificatorul ar trebui să fie independent de vânzător.

Apoi m-am gândit: bine să facem același lucru, să luăm doi identificatori și să le criptăm asimetric.Așa că aș putea partaja cheia privată și numai dacă a doua parte poate fi decriptată cu cheia publică și se potrivește cu prima parte, biletul este valabil. Metodele de criptare asincronă pe care le cunosc produc întotdeauna mesaje foarte lungi. Deci aceeași problemă ca înainte.

Apoi am găsit acest ceea ce pare bine. Dar mă întreb dacă FPE este prea ușor de spart, deoarece suma de control este doar de 5 până la 8 cifre și asta nu înseamnă multă entropie.

Trebuie să-mi fac griji pentru asta? Sau are cineva o idee diferită, mai bună? Cunoștințele mele despre criptografie sunt foarte limitate. Poate am înțeles ceva greșit.

Puncte:0
drapel my

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.

Alex avatar
drapel cn
ok, multumesc pentru raspunsul amplu! Nu pot vota pentru că am prea puțină karmă. Și mulțumesc pentru problema suplimentară. M-am gândit la asta și cred că am găsit o soluție bună, care funcționează pentru noi. Dar cu MAC-urile aș avea aceeași problemă ca și cea de semnare, ar trebui să împărtășesc secretul care nu-mi place. Ar mai fi o soluție. Crezi că e posibil să fac ce vreau eu?
poncho avatar
drapel my
@Alex: de fapt, FPE ar împărtăși aceeași problemă; dacă nu ai încredere în verificator cu cheia, nu funcționează. Pe de altă parte, cât de mult poți avea încredere în verificator? Dacă puteți avea încredere în verificator că nu va genera bilete pentru acest eveniment (dar nu doriți să aveți încredere în ele pentru alte evenimente), modalitatea evidentă de a face acest lucru este să generați o cheie nouă pentru fiecare eveniment - pentru scaner, descărcați doar cheia acestui eveniment...
Alex avatar
drapel cn
Da, prima dată m-am gândit că există o modalitate asimetrică de a face asta. dar am găsit o singură hârtie. Cred că trebuie să fac compromisuri
fgrieu avatar
drapel ng
Acest lucru nu îndeplinește cerința _public_. Cu mai puțin de aproximativ 70 de cifre zecimale (dați sau primiți), nimic sigur nu va fi.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.