Puncte:3

Schemă de criptare asimetrică cu cea mai scurtă ieșire pentru criptarea a 1 octet de informații

drapel cn

Imaginați-vă că trebuie să criptați periodic mesaje foarte scurte (adică un boolean Da/Nu, un singur octet sau 3-4 octeți în cel mai rău caz). Presupunem că nu există nicio sesiune și trebuie doar să criptăm sub cheia publică a unui receptor (adică, postarea unui octet criptat în blockchain).

Sunt la curent cu criptarea ElGamal, Cramer-Shoup, RSA, ECIES etc. și caut algoritmul cu cea mai scurtă ieșire atunci când criptez o cantitate mică de informații.

Vreau să mențin cel puțin 128 de biți de securitate, întrebându-mă astfel dacă există o variantă ElGamal, optimizată pentru mesaje scurte. Știm că ElGamal peste curbe eliptice emite texte cifrate de 64 de octeți (presupunând că criptăm un mesaj cu lungime de până la 32 de octeți când folosim o curbă eliptică de 256 de biți).

Există o schemă asimetrică în literatură care ar putea scoate mai puțini octeți decât aceasta? ideal 30-32 de octeți?

Puncte:3
drapel ng

Din capul meu, propun această variație EC-ElGamal pe o curbă eliptică standard de 256 de biți, folosind hash și XOR pentru partea de criptare (aproape înjumătățind dimensiunea textului cifrat față de manualul EC-ElGamal) și un schimb simplu de lucru/spațiu -off pentru a stoarce în continuare un mesaj într-un text cifrat de 32 de octeți $m$ de $b$ biți, cu mici fixe $b$ (de exemplu. $b=8$).

  • Utilizați o curbă eliptică standard peste câmp $\mathbb F_p$ cu generator $G$ de ordine $n$, cu $p$ și $n$ Prime de 256 de biți și (conjecturat) securitate de 128 de biți. secp256r1 (alias NIST P-256) și secp256k1 califica. ma refer la Sec1v2 pentru matematică și notație ECC.
  • Generare cheie:
    • Alegeți cheia privată $d$ aleatoriu în interval $[1,n)$
    • Calculați cheia publică $Q\obține d\,G$
  • Criptarea $b$-bit text simplu $m$
    • Alege $e$ aleatoriu în interval $[1,2^{32})$
    • Calcula $F\obține e\,G$
    • Alege $k$ aleatoriu în interval $[1,n)$
    • Calcula $R\obține k\,G$
    • In timp ce $R_x\not\equiv0\pmod{2^b}$
      • Calcula $R\obține R+F$ și $k\obține k+e$, care mentine $R=k\,G$
      • Dacă $k\ge n$ RNG-ul care a ales $k$ este cel mai probabil rupt; anulați sau reporniți criptarea
    • Dacă $R_y$ este ciudat, stabilit $R_y\obține p-R_y$ și $k\ obține n-k$, care mentine $R=k\,G$
    • Calcula $S\obține k\,Q$ (punctul secret comun)
    • Calcula $u\obține \operatorname{SHA-256}(S_x)\bmod2^b$, Unde $S_x$ este exprimat ca un șir de octeți de 32 de octeți
    • Calcula $v\gets u\oplus m$
    • Text cifrat de ieșire de 256 de biți, constând din 256 $-b$ biţi pentru $R_x$ cu ordinul inferior $b$ biți eliminați (sunt zero prin construcție) și $b$ biţi pentru $v$
  • Decriptare:
    • Din extrasul de text cifrat $R_x$ (inserând $b$ biţi de ordin inferior la zero) şi $v$
    • Calculați an $R_y$ potrivire $R_x$ (aceasta este o tehnică standard pentru a anula compresia punctului, vezi Sec1v2 §2.3.4, pasul 2.4.1); dacă nu reușește, anulați decriptarea.
    • Dacă $R_y$ este ciudat, stabilit $R_y\obține p-R_y$
    • Calcula $S\obține d\,R$ (punctul secret comun)
    • Calcula $u\obține \operatorname{SHA-256}(S_x)\bmod2^b$, Unde $S_x$ este exprimat ca un șir de octeți de 32 de octeți
    • Calculați și scoateți textul simplu descifrat $m\gets u\oplus v$

presupun IND-CCA1 (prin urmare IND-CPA) securitate la nivel de 128 de biți, în ipoteze plauzibile (duritatea unei variante a problemei decizionale Diffie-Hellman pentru curba eliptică și SHA-256 modelat ca un oracol aleatoriu). Există un atac banal împotriva IND-CCA2 (deci accesul la un oracol de decriptare compromite confidențialitatea mesajelor trecute chiar dacă oracolul de decriptare a trecut pe lista neagră textele cifrate originale; aceasta nu este o problemă în practică).

Atenție că cifrul este trivial maleabil. Acest lucru permite unui adversar să răstoarne biții doriti în textul simplu, modificând acești biți în textul cifrat. Aceasta poate fi o problemă practică. Un anumit nivel de atenuare a acestuia este posibil prin înlocuire $u\oplus\ldots$ de Format Păstrarea criptării cu o mai lată $u$ ca cheie; sau/și mai multă muncă sau/și spațiu.

Bucla while la criptare este un compromis timp/spațiu, căutare $k$ prin enumerare astfel încât să fie $x$ coordona $R_x$ are $b$ biți de ordin inferior la zero care nu trebuie transmisi. Căutarea este optimizată pentru a solicita $\aproximativ2^b$ adaosuri de puncte, dar pentru $b$ începând cu aproximativ $8$ asta va deveni o durere. Utilizarea incrementului secret $e$ si potrivire $F=e\,G$ este o finală plăcută $k$ mai uniform (vezi nota), dar nu cunosc nici un atac dacă luăm $e=1$ și, astfel $F=G$. Creșterea secretă în continuare ar putea ajuta la atenuarea atacurilor pe canale laterale.

Dacă vrem să evităm o parte sau tot acest compromis timp/spațiu, putem

  • trivial, măriți dimensiunea textului cifrat.
  • sau/și aventurează-te în a genera o curbă personalizată, cu dimensiunea biților de $n$ și $p$ redus cu câțiva biți de la 256. Pentru fiecare 1 bit de securitate la care renunțăm, câștigăm aproximativ 2 pt. $n$ și $p$, deci pe biți de text cifrat, sau de 4 ori mai puține presupuneri în bucla while. Și pentru secp256r1 cele mai cunoscute atacuri necesită, fără îndoială $>2^{140}$ operații pe biți (bazate pe o extrapolare conservatoare a unui fișier similar Revendicare de $>2^{140}$ pentru Ed25519).

Notă: În manualul Diffie-Hellman sau ElGamal, alegem $k$ uniform în $[0,n)$. Varianta noastră se limitează la $k$ cu $k\,G$ având o $x$ coordonează cu ea de ordin inferior $b$ biți la zero. Printr-un argument statistic, există aproximativ $n/2^b$ astfel de $k$. Am vrea să alegem $k$ uniform în acest subset de $[0,n)$. Cel mai simplu ar fi repetarea la întâmplare $k$, dar asta are un cost de calcul prohibitiv pentru multiplicarea punctelor $R\obține k\,G$. Economisim la asta trecând de la un singur candidat $k$ la următorul cu un increment fix $e$, permițând actualizarea $R$ printr-un singur punct $R\obține R+F$.

Dacă am folosit fix $e=1$, apoi $k$ selectat de bucla while ar avea o proprietate distinsă (pentru a ști $k$): probabilitatea ca a $k$ este selectat este proporțional cu $j$ calculabil din $k$ ca cel mai mic $j>0$ astfel încât $k-j$ este în submult (sau $k+1$ daca nu exista asa ceva $j$, care apare pentru un singe $k$ în submult). Problema este similară cu alegerea neuniformă a primului obținut prin alegerea unui punct de plecare aleatoriu și căutarea următorului prim.

Alegerea oricărui fix public $e$ nu rezolvă problema, deoarece definiția de $j$ poate fi adaptat la $k-e\,j$ în submult. Cu toate acestea, alegerea unui secret aleatoriu $e$ pentru fiecare alegere de $k$ face. O tehnică similară este utilizată în generatoarele prime aleatorii pentru RSA. Nu am nicio referință, dar un argument este că un adversar nu știe $e$ nu stiu ce $e$ a folosi pentru un test; pot testa pentru toți $e$ și combină rezultatele, dar apoi testul lor este copleșit de zgomot.

Am ales limita superioară a intervalului $[1,2^{32})$ pentru $e$ astfel încât calculul $F\obține e\,G$ are un cost marginal așteptat în comparație cu $R\obține k\,G$. Sunt încrezător (fără dovezi sau referințe) că acest lucru este mai mult decât suficient pentru a face părtinire în selecția $k$ practic nedetectabil chiar și pentru ipoteticii adversari care știu $k$; iar adversarii efectivi nu puteau decât să obțină $k$ printr-un canal lateral.


Gând final: am putea atenua orice teamă că criteriile $R_x\equiv0\pmod{2^b}$ creează o slăbiciune prin ajustarea acesteia la: scăzut $b$ un pic de $R_x$ sunt o funcție (având aproximativ o distribuție uniformă) a celorlalți biți ai $R_x$. A $b$-bit CRC ar face. Receptorul poate reconstrui biții de ordin inferioară necesari $R_x$ prin aplicarea acestei funcţii.

Kostas Kryptos avatar
drapel cn
Mulțumesc pentru răspuns @fgrieu, există un motiv pentru care nu reîncercați k în R = kG până la Rx = 0 și introduceți e?
fgrieu avatar
drapel ng
@Kostas Chalkias: Într-adevăr, nu generez un nou $k$ aleatoriu atunci când $R_x\not\equiv0\pmod{2^b}$, și în schimb pas $k$ cu $e$. Asta din motive de performanță. Reușesc să explorez un nou $R$ cu o adunare de un singur punct, mai degrabă decât sute de adunare sau dublare (pentru înmulțiri de un punct) dacă am folosit un nou $k$ aleatoriu. Folosirea $(1,G)$ mai degrabă decât $(e,F)$ ar funcționa bine din acest punct de vedere, dar asta face ca alegerea $(k,R)$ să fie măsurabil neuniformă printre cei cu $R_x\equiv0\pmod {2^b}$, iar utilizarea $(e,F)$ îmbunătățește mult în acest sens.
knaccc avatar
drapel es
Vă rog, puteți clarifica ce înseamnă indicele x și y, de ex. ca în
Kostas Kryptos avatar
drapel cn
@knaccc: este și coordonatele punctului curbei eliptice.
Kostas Kryptos avatar
drapel cn
@fgrieu excelent răspuns, poți elabora puțin mai mult (chiar și cu o hârtie de referință) de ce (,) este mai bine decât (1,) re uniformitate? De asemenea, este intervalul de până la 2^32 ideal sau am putea obține rezultate de uniformitate mai bune dacă = [1, n) (presupunând că am putea tolera costul suplimentar al unui scalar mare la punctul mul)?
fgrieu avatar
drapel ng
@Kostas Chalkias: Am adăugat o notă care explică problema și un argument despre motivul pentru care cred că este rezolvată de $(e,F)$.
Kostas Kryptos avatar
drapel cn
@fgrieu: mulțumesc din nou, PS: maleabilitatea nu este o problemă dacă trimiteți ctx ca parte a unei tranzacții blockchain (toate tranzacțiile sunt oricum semnate, astfel integritatea este garantată).

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.