Puncte:1

Criptați asimetric un mesaj scurt într-un șir scurt

drapel cn

Am un șir a cărui dimensiune este < 32 de caractere din următorul set limitat de caractere.

  • litere latine mari și mici: A la Z și de la A la z
  • cifre: 0 la 9
  • personaje speciale: !#$%&'*+-/=?^_`{|}~

Caut să criptez acest șir cu o cheie publică în care mesajul rezultat are < 64 de caractere.

Înțeleg că va exista un compromis între dimensiune și securitate.

kelalaka avatar
drapel in
[Criptare ECC Elgamal](https://crypto.stackexchange.com/a/9990/18298) dacă puteți suporta [codificarea mesajului](https://crypto.stackexchange.com/q/76340/18298)
Puncte:2
drapel my

Caut să criptez acest șir cu o cheie publică în care mesajul rezultat are < 64 de caractere.

De fapt, se pare că puteți, dacă reduceți puțin securitatea.

O abordare ar fi folosirea ECIES cu, să zicem, P-192. (EC-Elgamal ar fi, de asemenea, funcțional - cred că aceasta este o abordare superioară)

În această schemă, cheia privată este o valoare aleatorie $r$, iar cheia publică este o valoare $P = rG$, Unde $G$ este punctul generator. Pentru a cripta, alegem o valoare aleatorie $s$, și calculați ambele $sG$ și $sP$; trimitem punctul $sP$ (sau, în cazul dvs., doar coordonatele x) printr-o funcție de derivare a cheii, care generează o cheie pe care o folosim pentru a cripta mesajul real. Textul cifrat constă din valoare $sG$ (în cazul dvs., doar coordonata x) și criptarea simetrică.

Acum, dacă folosim curba P-192, coordonata x a lui $sG$ poate fi exprimat în 192 de biți; folosind alfabetul care ni s-a dat (care are 81 de simboluri), care ar lua 31 de caractere (de exemplu, prin conversia valorii de la 0 la circa $2^{192}$ în baza 81).

În ceea ce privește criptarea simetrică a mesajului, putem folosi o metodă Format Preserving Encryption [1]; aceasta poate converti un mesaj format dintr-un alfabet de 81 de simboluri într-un text cifrat de același alfabet și lungime.

Deci, o criptare de 31 de simboluri (cel mai mare de care ați spus că sunteți interesat) ar cripta ca mesaj de 31+31 = 62 de simboluri - în conformitate cu cerințele dvs.

Costurile de securitate:

  • P-192 are „securitate pe 96 de biți”; este ceva mai puțin decât folosim în mod normal - totuși, este încă destul de bun.

  • Scurgem lungimea mesajului (deoarece metoda Format Preserving Encryption păstrează lungimea); dacă aceasta este o cerință suplimentară, puteți oricând să completați mesajul la 32 de octeți (cu ultimul caracter indicând lungimea reală a mesajului) - cu aceasta, îndeplinim în continuare cerința de lungime


[1]: În mod normal, cu ECIES, folosim o transformare explicită de integritate în criptarea simetrică. Aș susține că acest lucru nu este necesar în acest caz - orice modificare a FPE ar decripta ca ceva aleatoriu, iar adversarul poate întotdeauna înlocui textul cifrat cu ceva care decriptează la ceva aleatoriu (prin simplul expedient de a alege un text simplu aleatoriu și de a-l cripta cu cheia publică).

drapel cn
Se pare că ElGamal poate fi folosit cu P-192 (Nu prim, poate P-191?) pentru a-mi cripta mesajul pe care îl pot decripta ulterior cu o cheie privată. Mă uit la acest exemplu https://cryptographyacademy.com/elgamal/ De ce este necesară doar coordonatele x așa cum spui? De asemenea, unde intervine aici criptarea simetrică pentru păstrarea formatului?
poncho avatar
drapel my
@Xavier: M-am uitat la ElGamal; a face totul să se încadreze în restricțiile pe care le aveți este dificil (dimensiunea curbei trebuie să fie suficient de mare încât să puteți codifica șirul, plus variabilitatea necesară pentru a ajunge la o coordonată validă; pe de altă parte, nu poate fi prea mare, sau dimensiunea textului cifrat depășește limita.
poncho avatar
drapel my
În ceea ce privește locul în care intervine cifrul simetric, ei bine, acesta este folosit pentru a cripta mesajul text simplu (în timp ce valoarea $sG$ este folosită pentru a comunica textul cifrului simetric). Deci, ce face decriptorul extrage valoarea $sG$ (alegend una dintre cele două coordonate $y$ în mod arbitrar), calculând $r(sG)$ (care are aceeași coordonată $x$ ca și valoarea $rP$ a criptorului; convertind-o într-o cheie simetrică (folosind kdf) și apoi face o decriptare simetrică.Sugerez un algoritm simetric FPE, pentru a reduce dimensiunea textului cifrat...
poncho avatar
drapel my
Cât despre motivul pentru care ai nevoie doar de coordonata x, ei bine, coordonata x a lui $r(sG)$ depinde doar de coordonata x a lui $sG$; prin urmare, pentru a decripta, putem converti coordonatele x din textul cifrat înapoi în $P$ complet (alegând în mod arbitrar una dintre cele două posibilități - nu contează dacă cea pe care am ales-o a fost aceeași cu cea pe care o avea criptatorul ). Presupun că ați putea folosi compresia punctuală pentru a trece întreaga valoare $sG$ - cu toate acestea, nu este nevoie (și asta este un bit întreg - ne apropiem suficient de limita de dimensiune încât aceasta este o problemă netrivială)
poncho avatar
drapel my
@Xavier: De asemenea, când spunem „P-192”, vorbesc despre o curbă eliptică specifică care are o dimensiune a câmpului (și ordinea grupului) de aproximativ $2^{192}$ - folosește un câmp prim și așadar nu contează dacă 192 este prim sau nu. Este cunoscut și ca secp192r1 (așa cum este definit în https://www.secg.org/SEC2-Ver-1.0.pdf)
drapel cn
Vă mulțumesc pentru lămuriri, ca să fiu sincer, totul este puțin peste capul meu. Cunoașteți un exemplu bun de implementare a ECIES folosind curba secp192r1?
poncho avatar
drapel my
@Xavier: un google găsește rapid https://github.com/insanum/ecies - folosește OpenSSL (și deși nu este specific pentru P-192, OpenSSL acceptă această curbă). Rețineți că cerințele dvs. sunt destul de specifice - va fi nevoie de puțină muncă pentru a converti acel cod în ceva care să corespundă cerințelor dvs.
drapel cn
mulțumesc pentru tot ajutor, am o implementare funcțională după designul tău. Am găsit acest [exemplu](https://asecuritysite.com/ecc/ecc3) util pentru a înțelege ECIES. Singura mea problemă acum este să îmi dau seama cum să trec doar valoarea x și să rezolv întregul punct la decriptare. Înțelegerea mea este dată x aș rezolva pentru y în curba eliptică fromula `y^2 = x^3 + ax + b`. Privind la curba [secp192r1](https://neuromancer.sk/std/secg/secp192r1) când rezolv pentru `y`, exemplul de implementare de mai sus afirmă că punctul nu se află pe curbă.

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.