Puncte:1

Cum puteți verifica proprietatea cheii private folosind o cheie publică și o semnătură de mesaj?

drapel in

Când semnez un mesaj cu o cheie privată și primesc o semnătură de mesaj, cum pot - folosind cheia publică corespunzătoare - să verific că acea semnătură de mesaj/tranzacție trebuie să fi fost produsă de persoana care deține codul privat? cheia din spatele cheii publice relevante?

Înțeleg că, cu perechile de chei private/publice, scopul tehnologiei este că nu puteți face inginerie inversă a cheii private din cheia publică. Deci, cum este posibil să faci asta?

În esență, care este diferența dintre inginerie inversă a unei chei private dintr-o cheie publică și verificarea faptului că cineva trebuie să aibă cheia privată pentru a produce o semnătură de mesaj care corespunde unei chei publice? Cum e posibil unul, dar nu celălalt?

fgrieu avatar
drapel ng
„Semnez un mesaj/tranzacție cu o cheie privată” nu are legătură (cu excepția poate metodei utilizate) cu „Primesc o semnătură de mesaj/tranzacție”.În special, nu este folosită aceeași pereche de chei publice/private în ambele, iar semnătura este (probabil) diferită. Pentru a face întrebarea mai simplă/mai clară, sugerez „Când primesc o semnătură de mesaj/tranzacție, cum reușesc să...”. Motivul în sine are de-a face cu însăși natura semnăturii.
harpomiel avatar
drapel in
Cum nu are legătură? Cred că asta ajunge la miezul a ceea ce întreb.
fgrieu avatar
drapel ng
Nu are legătură pentru că în primul semnați cu cheia dvs./mea privată, iar în al doilea „persoana care deține cheia privată” (care este a lor, nu a dumneavoastră/a mea) semnează cu cheia privată. Cele două perechi de chei publice/private sunt (probabil) separate ca valoare și poate ca natură: pentru ceea ce spune întrebarea, una ar putea fi RSA, cealaltă EdDSA și aceasta este adesea situația în practică în interacțiunile web.Rețineți că verificarea semnăturii _nu_ necesită cunoașterea unei chei private, ci doar a cheii publice a semnatarului care se potrivește cu cheia privată utilizată pentru semnare (și mesajul, semnătura).
Puncte:4
drapel es

Voi explica cum funcționează semnăturile care implică curbe eliptice. Criptomonedele folosesc în cea mai mare parte curbe eliptice din cauza dimensiunii mai mici a semnăturilor care trebuie publicate pe blockchain.

Când o cheie privată, care este doar un număr întreg mare, este mapată la o cheie publică (care este un punct pe o curbă eliptică specificată), această mapare are anumite proprietăți matematice. Rețineți că această mapare se face în așa fel încât să fie „un sens”. Puteți mapa cu ușurință de la cheia privată la punctul de curbă eliptică a cheii publice, dar practic nu puteți inversa această operație.

În primul rând, punctele de pe curba eliptică vor forma un grup abelian sub o operațiune pe care o numim „adăugare”. Aceasta înseamnă că puteți face ceea ce arată ca o simplă algebră cu punctele. Puteți lua puncte $A$ și $B$, adaugă-le pentru a obține punct $C$, și veți putea observa asta $A+B==B+A$. Rețineți că definim doar operații de adunare și scădere și nu putem „înmulți” puncte sau „împărți” puncte cu alte puncte.

În al doilea rând, mapările numerelor întregi ale cheii private la puncte sunt „omomorfe aditiv”. Aceasta înseamnă că dacă aveți cheile private $a$ și $b$, care se mapează la cheile publice $A$ și $B$, apoi cheia publică a $a+b$ va fi egală cu ambele $A+B$ și a $C$.

Maparea unei chei private la o cheie publică este pur și simplu de a lua o cheie privată $a$ și calculați cheia publică $aG$, ceea ce înseamnă a adăuga punctul binecunoscut $G$ la sine $a$ ori. Deoarece ar dura o veșnicie pentru a calcula efectiv acest lucru adăugând G la sine $a$ ori, sunt disponibile comenzi rapide matematice. Deoarece aceste comenzi rapide există doar pentru a efectua înmulțirea rapid, dar nu pentru a merge înapoi și a determina cheia privată din oricare ar fi rezultatul înmulțirii, aceasta devine unidirecțională "trapă"funcția.

Acum, imaginați-vă că am cheia privată $a$ și cheia publică $A=aG$și îmi prezinți o provocare. Vii cu un număr întreg aleatoriu cu cheie privată $x$și îmi cereți să vă dau un număr întreg de răspuns $y$ astfel încât să puteți verifica asta $xA==yG$. Voi putea trece provocarea ta doar dacă cunosc cheia privată $a$, ceea ce mi-ar permite să calculez $y=xa$. Acest lucru s-ar verifica pentru că atunci $xA==xaG==yG$.

Ceea ce am descris mai sus are două defecte. Prima este că, odată ce trec provocarea, puteți calcula cu ușurință cheia mea privată $a$ la fel de $y/x$.

Al doilea defect este că am nevoie să-mi oferi o provocare, mai degrabă decât pur și simplu să-ți pot oferi o semnătură fără a fi nevoie să interacționezi cu tine.

Primul defect este remediat prin includerea unui „factor orb”, care îmi permite să trec provocarea fără a-mi dezvălui cheia privată. De exemplu, cu o semnătură Schnorr, aleg o cheie privată aleatorie $k$, dezvăluie numai $K=kG$, și apoi vă cer provocarea dvs $x$. Apoi produc o valoare $y$ astfel încât să puteți verifica asta $xA==K+yG$. Acum, după ce voi dezvălui $y$ pentru a trece provocarea, știi că aș fi putut doar să calculez $y$ cu cunoștințe despre cheia mea privată $a$, dar nu poți să-mi calculezi cheia privată fără să-mi cunoști factorul secret orbitor $k$.

Al doilea defect este remediat prin utilizarea FiatâShamir euristic pentru a crea o provocare folosind o funcție care servește drept „Oracol aleatoriu" care îmi permite să vin cu provocarea aleatorie fără o modalitate de a înșela. În cazul schemei de semnătură ECDSA, această ieșire a funcției este coordonatele x a unei chei publice mapate dintr-o anumită intrare. În cazul unui Schnorr semnătură, funcția este un hash criptografic sigur, cum ar fi SHA512/256.

Puncte:2
drapel ng

Când semnez un mesaj/tranzacție¹ cu o cheie privată,
și primesc o semnătură de mesaj/tranzacție¹,

În mod critic, este folosit diferite perechi de chei publice/private în aceste două lucruri. Nimic din restul întrebării nu este despre primul dintre aceste două lucruri. Totul este despre verificarea semnăturii în al doilea dintre aceste lucruri, față de cheia publică a perechii de chei publice/private folosită de semnatar în al doilea lucru menționat. Se presupune că respectiva cheie publică este disponibilă verificatorului. Cheia privată corespunzătoare nu este.

Cu perechile de chei private/publice, scopul tehnologiei este că nu puteți face inginerie inversă a cheii private din cheia publică

Corect. Există puțin mai mult: cu cheia publică nu este posibil să se realizeze lucrurile pe care cheia privată este destinată.

Care este diferența dintre inginerie inversă a unei chei private dintr-o cheie publică și verificarea faptului că cineva trebuie să aibă cheia privată pentru a produce o semnătură de mesaj care să corespundă unei chei publice? Cum e posibil unul, dar nu celălalt?

Semnătura funcționează conform acestei diagrame:

semnătură și de către a manual modern

  • $1^n$ codifică un întreg $n$ definirea dimensiunii tastelor. In practica $n$ este fix și public.
  • $(\mathrm{pk},\mathrm{sk})$ este o pereche de chei publice/private ieșite de algoritmul de generare a cheilor $\mathrm{Gen.}$. Se presupune $\mathrm{sk}$ este ținut secret de proprietarul desemnat al perechii de chei, care cel mai adesea este cel care a alergat $\mathrm{Gen.}$.
  • $m$ este mesajul de semnat (un șir de biți arbitrar, poate salva pentru cerințele de dimensiune).
  • $\sigma$ este semnătura mesajului. Este produs din $\mathrm{sk}$ și $m$ prin algoritmul de semnătură $\mathrm{Semn}$.
  • $b$ este indicatorul de integritate, care ia una dintre cele două valori, Valabil sau Invalid. Este produs din $\mathrm{pk}$, $m$ și $\sigma$ prin algoritmul de verificare $\mathrm{Vrfy}$.

O schemă de semnătură este corectă atunci când, cu lucruri conform desenului, $b$ întotdeauna este Valabil. Este sigur² când adversarii dau $\mathrm{pk}$ și capacitatea de a obține $\sigma_i$ pentru orice $m_i$ ei consideră de cuviință, nu pot prezenta o $(m,\sigma)$ pereche cu $\mathrm{Vrfy}(\mathrm{pk},m,\sigma)$ Valabil, și $m\ne m_i$ pentru orice $i$. Mai sunt câteva detalii tehnice³.

Este surprinzător că există scheme de semnătură corecte și sigure. Conceperea unuia a durat mult timp. Dar nu este mai surprinzător decât posibilitatea criptării cu chei publice. Dacă cineva îi pasă mai ales să înțeleagă utilizare de semnătură, o opțiune este să admitem că există astfel de scheme de semnătură.

O altă opțiune este să studiezi una. sugerez semnătura Schnorr (alt. versiune), care principiu este folosit în unele criptomonede, este poate cel mai simplu și are o reducere cantitativă relativ simplă a securității la duritatea problemei logaritmului discret în grupul utilizat, sub un model aleator de oracol al hash-ului său. Expunerea acestuia ar tripla lungimea răspunsului.


¹ Într-un context de criptomonedă, un mesaj poate descrie o tranzacție.

² După criteriile de atac al mesajelor alese, de nefalsificat existențial, adesea singurul discutat în expunerea introductivă modernă. Există și alte criterii utile de securitate a semnăturilor.

³ $\mathrm{Gen.}$, $\mathrm{Semn}$, $\mathrm{Vrfy}$ iar adversarii sunt modelați ca algoritmi de timp polinomial probabilistic. Propunerile sunt formulate pentru orice fix $(\mathrm{pk},\mathrm{sk})$ pereche ieșită de $\mathrm{Gen.}$, și cu excepția unei probabilități neglijabile $p(n)$, acesta este $p(n)$ astfel încât pentru orice polinom $Q(n)$ tine $\displaystyle 0=\lim_{n\la\infty} p(n)\,Q(n)$. In practica $n$ este ales suficient de mare pentru a face acea probabilitate practic neglijabilă.

Puncte:-1
drapel ng

În esență, care este diferența dintre inginerie inversă? cheie privată dintr-o cheie publică și verificarea faptului că cineva trebuie să aibă cheia privată pentru a produce o semnătură de mesaj care corespunde unui cheie publica? Cum e posibil unul, dar nu celălalt?

Este practic imposibil să găsești cheia privată pe baza cheii publice și acesta este scopul criptografiei cheii public-private. Aceasta este frumusețea pură a matematicii. A doua întrebare este cum funcționează semnătura digitală. Semnătura digitală este produsă în mod obișnuit prin calcularea mai întâi rezumatul mesajului dvs. text simplu (de exemplu folosind sha256), apoi criptarea rezumatului folosind cheia privată. Textul dvs. cifrat alături de semnătura digitală arată astfel:

public_announcement, signature=encrypt(sha256(public_announcement), private_key)

Orice receptor poate calcula digest-ul sha256 anunț_public si compara cu decriptare(sha256(anunț_public), cheie_publică)`. Dacă aceste două nu se potrivesc, fie anunțul este falsificat, fie nu este semnat cu cheia privată pe care a pretins că este.

fgrieu avatar
drapel ng
Acesta nu este un mod corect de a descrie semnătura. Decriptarea cu cheie publică este o greșeală de terminologie. Multe sisteme de semnături comune ([EdDSA](https://en.wikipedia.org/wiki/EdDSA), [ECDSA](https://en.wikipedia.org/wiki/ECDSA), [DSA](https:/ /en.wikipedia.org/wiki/Digital_Signature_Algorithm)) nu funcționează deloc în acest fel. Când `criptare` și `decriptare` sunt criptare și decriptare RSA de manual, sistemul de semnătură descris este vulnerabil la falsificare existențială. Niciuna dintre cele două scheme de semnătură RSA utilizate pe scară largă nu poate fi descrisă în acest fel cu schemele de criptare sigure „criptare” și „decriptare”.

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.