Puncte:0

Nu este un algoritm de cifru asimetric (cum ar fi RSA) suficient pentru toate nevoile de bază, când viteza este irelevantă?

drapel br

De ce îmi pasă: Vreau să implementez câteva sesiuni securizate pentru comunicarea prin internet și, din moment ce sunt un amator complet în asta și nu vreau să petrec mult timp învățând despre criptografie sau despre anumite biblioteci (deoarece fac asta doar pentru distracție), am doresc să aibă o pregătire minimă din partea programării. Din punct de vedere matematic, sunt bun la asta, așa că petrecerea timpului suplimentar gândindu-se (spre deosebire de căutarea pe Google și citirea documentațiilor) nu este o problemă.

Conjectura/intrebarea mea: Partea interesantă vine când mi-am dat seama că având un singur cifru asimetric (bloc sau flux), numiți-l $X$, este suficient pentru toate nevoile criptografice de bază.Cu alte cuvinte, toate celelalte categorii criptografice de bază (alte tipuri de cifruri, funcții hash și semnături, nu altele) pot fi reduse la acest algoritm; ai putea crea un algoritm de hashing folosind numai $X$, și un algoritm de semnare folosind numai $X$. Aceasta ar însemna că combinarea algoritmilor precum RSA+ChaCha+Poly1305 sau orice nu este depășită atunci când viteza este irelevantă. Nu țintesc mai sus decât comunicarea pe internet. FHE și similare sunt în afara domeniului de aplicare. Atunci, nu este suficient doar să implementezi $X$ când timpul și viteza nu sunt relevante? De ce atunci oamenii inventează toți acești algoritmi, în afară de motive de viteză?

Dovada mea:

Transformarea unui cifr de flux într-un cifru bloc:

Doar procesați un flux de lungime fixă ​​cu un cifr de flux și numiți-l un cifru bloc.

Transformarea unui cifr bloc care acționează asupra unui set de dimensiuni arbitrare într-un cifr bloc care acționează asupra unui set de dimensiuni ale unei puteri de $2$.

Lăsa $A$ fii decorul $\{1,\dots,N\}$. Lăsa $X$ să fie un cifru bloc cu două funcții $E$ și $D$ (funcția de criptare și decriptare) din care cartografiază elementele $A$ la $A$. Lăsa $2^k$ fi cea mai mare putere a $2$ mai mic sau egal cu $N$. Lăsa $B$ fii decorul $\{1,\dots,2^k\}$. Lăsa $x$ fi un număr de la $A$. Secvența $x,E(x),E(E(x)),...$ se presupune că este aleatoriu și uniform distribuit pe set $A$ (de asemenea, un ciclu lung, deoarece acesta este un cifru asimetric), care rezultă că un număr din $B$ apare, în medie, după fiecare $\frac{|B|}{|A|}$ elemente. Putem lua prima astfel de apariție ca imaginea noii funcție $E'$ care acum mapează din $B$ la $B$. Defini $D'$ a fi inversul $E'$. Perechea $(E',D')$ este un nou cifru bloc care acționează asupra unui set de dimensiuni $2^k$, cu alte cuvinte pe blocuri de $k$ biți. Este la fel de sigur ca $X$ pentru că dacă putem sparge această fisură acest cifru, înseamnă că putem găsi rezultatul cifrului original aplicat de câteva ori, să zicem $m$ ori.Apoi putem reaplica cifrul $m-1$ de mai multe ori pe un mesaj criptat și apoi folosiți acest crack pentru a-l anula $m$ ori. De cand $m$ este de așteptat să fie mai mic decât $k$, acest lucru este fezabil.

Transformarea unui cifr de bloc de dimensiune $2^k$ într-un cifr de flux.

Sa presupunem $k$ este par (este mai simplu de explicat conceptul). Din punct de vedere tehnic, doar criptez și decriptez un mesaj de dimensiune arbitrară, care nu este tocmai un cifr de flux. În primul rând, extindeți mesajul pentru a avea o lungime care este un multiplu de $\frac{k}{2}$. Gândiți-vă la acest mesaj ca la o secvență de blocuri de dimensiuni $\frac{k}{2}$. Putem encrpyt perechi la locul acestor blocuri: primul și al doilea bloc împreună, apoi al doilea și al treilea și așa mai departe... până la sfârșit. Până acum, acesta seamănă cu un cifru de flux. Opțional, putem adăuga un început aleatoriu la mesaj dacă mesajul a fost prea scurt inițial. Putem, de asemenea, opțional, să inversăm ordinea acestor blocuri și să aplicăm aceeași secvență de criptare. Acum, putem fie decripta întregul mesaj, fie nimic: dacă pierdem o parte din el, nu putem decripta nimic. La fel cum cifrul bloc inițial este menit să se comporte. Acesta este la fel de sigur ca cifrul bloc original, deoarece dacă putem sparge întregul mesaj, atunci putem relua criptarea și putem produce toate inter-produsele, inclusiv decriptarea ultimelor 2 blocuri pe care le-a criptat criptatorul.

Transformarea unui cifru bloc într-o funcție hash.

Am editat această parte, pentru că prima idee a fost greșită...
Creați două perechi de chei și aruncați cheile private și codificați cheile publice în algoritm. La fel ca și în partea anterioară, pregătiți blocurile. Acum criptați primul $k$ biți la locul lor, mai întâi cu o cheie, apoi cu cealaltă, eliminați $l<<k$, $l|k$ biți „aleatoriu” (pseudo-aleatoriu, însămânțați de un simplu hash al mesajului) din acest produs $k$ biți și concatenează restul biților. Continuați să faceți acest lucru până când există numai $k$ biți rămase, apoi numiți-o hașul puternic.Acest lucru este la fel de sigur ca cifrul, deoarece dacă presupunem că am găsit un alt mesaj cu aceeași ieșire, atunci în timp ce le reluăm pe amândouă în același timp, la un moment dat vom produce același $k-l$ biți (după eliminarea aleatorie $l$ biți). Iată de ce este greu: Aceia $k-l$ biți pot fi completați până la $k$ biți în cel mult $2^l\binom{k}{l}$ moduri (pe care le putem lega la un număr mic), atunci majoritatea dintre ele nu vor produce același lucru $k-l$ biți care ajută la delimitarea acestuia, atunci chiar dacă am putea decripta o altă combinație de $k$ biți (ceea ce poate ar putea fi posibil pentru că seamănă cu originalul $k$ biți), cei decriptați $k$ biții ar trebui să fie decriptați din nou, dar acum nu seamănă cu originalul $k$ biți, așa că practic ar trebui să spargem cifrul în acest moment. Folosim două cifruri diferite (două chei publice diferite) pentru că dorim să eliminăm orice maleabilitate.

Transformarea unui cifru bloc într-o funcție de semnătură.

Putem calcula mai întâi hash-ul mesajului și apoi criptăm hash-ul. Acest lucru este evident sigur, deoarece așa funcționează algoritmii actuali.

Îmi cer scuze că am folosit diferite etichete, pur și simplu nu știam ce să folosesc.

Maarten Bodewes avatar
drapel in
În mod obișnuit, primitivele asimetrice au și o suprasarcină atunci când vine vorba de criptare, asta contează? În plus, RSA / OAEP depinde de un hash de domeniu complet. În cele din urmă, RSA necesită chei de dimensiuni foarte mari pentru a depăși securitatea de 128 de biți și nu este protejată împotriva computerelor cuantice.
donaastor avatar
drapel br
@MaartenBodewes Habar n-aveam despre aceste lucruri.Când am menționat „cifre bloc asimetrice”, am presupus o pereche de funcții (E,D) al căror domeniu și co-domeniu sunt același set. Te-ai putea gândi la E și D ca la cheia publică și privată. Dacă este implementat folosind alte primitive, nu-mi pasă. Am vrut doar să reduc totul la X, astfel încât să pot învăța cum să folosesc doar, să zicem, RSA și apoi să mă joc cu codul meu în loc să citesc mai multe despre bibliotecă. Nu știu ce sunt overhead și hash de domeniu complet. RSA care are nevoie de chei mari nu este o mare îngrijorare pentru mine, alți algoritmi nu, poate
drapel cn
„toate nevoile” țintește cu siguranță prea sus, deoarece include mai mult decât lucrurile de bază. De exemplu, o schemă de criptare asimetrică arbitrară nu poate fi utilizată pentru a realiza o criptare complet homomorfă.
donaastor avatar
drapel br
@tylo ok, da, este adevărat. Știu de FHE, m-am interesat de ea, tot am uitat de ea, voi edita acum pentru a fi mai concret la ce am vrut să spun.
Maarten Bodewes avatar
drapel in
Problema este că manualul RSA nici măcar nu este sigur. Deci acum spuneți ceva de genul: hei, am acest algoritm nesigur, de ce nu se bazează totul pe el.De asemenea, ignorați eficiența și mai multe cazuri de utilizare de nișă, care *nu ar trebui* ignorate. Sigur, este util să încerci să se încadreze un algoritm în cât mai multe găuri posibil, vezi Keccak pentru asta, care acoperă hashing, derivarea cheilor, generarea de numere aleatorii (într-o anumită măsură), criptarea autentificată etc. De asemenea, rețineți că generarea și criptarea semnăturii necesită perechi de chei diferite ale ambilor participanți, așa că există și asta.
Maarten Bodewes avatar
drapel in
Pentru a fi sincer, răspunsul la această întrebare pare să necesite o explicație pentru aproape toată criptografia, care este puțin amplă pentru o întrebare.
Puncte:2
drapel ng

Atenție că, în afară de RSA, nu cunoaștem multe „cifre bloc asimetrice” conform definiției întrebării (în esență permutări de trapă), astfel construirea peste aceasta nu va permite înlocuirea cu ceva mai rapid sau rezistența la ipoteze. Calculatoare cuantice relevante din punct de vedere criptografic.

În orice aplicație, chiar și la scară experimentală, există întotdeauna o limită la cât de departe viteza este irelevantă poate ține. Abordarea sugerată va lovi acel zid, cred că pentru două lucruri

  • Decriptarea și semnătura RSA ale manualelor sunt cu câteva ordine zecimale de mărime mai lente decât criptografiile simetrice, astfel încât veți ajunge să aveți nevoie de criptografie hibridă pentru o viteză acceptabilă.
  • Generarea cheilor RSA este din nou cu câteva ordine de mărime zecimală mai lentă decât RSA în sine și stabilirea cheilor cu securitate în avans (o caracteristică standard a SSL/TLS moderne despre care mulți ar spune că a devenit de bază) folosind RSA (sau construită pe baza unei scheme de criptare asimetrică). ) pare să necesite generarea cheii la fiecare sesiune.

În cele din urmă, permutarea trapă RSA este departe de a fi ideală. Are puncte fixe {0,1,n-1}$, și mai general o proprietate multiplicativă. Gândirea la el ca un substitut asimetric al unui cifr de bloc mare este o rețetă pentru dezastru, încercată și testată în primele decenii ale RSA și numărând, după cum cronicizat la un moment dat de Dan Boneh. Soluțiile abundă, dar cel puțin cele obișnuite sau cu dovadă de securitate își asumă un hashe. Prin urmare „Puteți face un algoritm de hashing folosind numai” (trapa RSA), deși este posibilă, este aventuroasă pe lângă lentă.

Puncte:1
drapel cm

Pentru aceleași dimensiuni de cheie, protocoalele de criptare simetrică sunt mai sigure decât protocoalele asimetrice.

În mod informal, algoritmii de criptoanaliza utilizați pentru a descifra RSA încearcă să identifice valorile prime utilizate pentru a crea o valoare. N, în timp ce (s-ar putea foarte bine să greșesc aici) algoritmii folosiți pentru a rupe schemele de criptare simetrice se bazează pe identificarea în forță brută a mesajului text simplu, bazată pe un atac de text simplu cunoscut și pe detectarea unor modele în distribuția de biți a textului cifrat. .

Diferența de securitate a acestor algoritmi este de așa natură încât o criptare AES cu dimensiunea cheii de 128 de biți este la fel de greu de descifrat ca o cheie RSA cu dimensiunea cheii de 2048 de biți.

În cele din urmă, după părerea mea, totul se reduce la performanță. Dacă intenționați să utilizați chei RSA uriașe, atunci nu ați face-o nevoie orice alte scheme de criptare; dar ai plăti un preț enorm pentru utilizarea lățimii de bandă și latența.

Toate acestea presupunând că intenționați să generați o cheie nouă pentru fiecare sesiune. În caz contrar, dacă cineva ar identifica în cele din urmă cheia dvs. secretă, atunci toate informațiile pe care le-ați trimis (și le veți trimite) sunt compromise.

Ați putea contracara acest lucru având dimensiuni uriașe ale cheilor. Din nou, este o chestiune de performanță.

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.