unde este algoritmul de schimb de chei?
The cripto_box
este pur și simplu crypto_box_curve25519xsalsa20poly1305
și are două părți;
Partea 1: Pre-calcul independent de pachete;
Parte $A$ are cheie secretă de 32 de octeți $sk_A$ și cheie publică $pk_A$ Unde $pk_A = [sk_A]G$
Parte $B$ are cheie secretă de 32 de octeți $sk_B$ și cheie publică $pk_B$ Unde $pk_B = [sk_B]G$ și $G$ este punctul de bază al lui X25519.
Aici $[a]G$ este înmulțire scalară și înseamnă adunare $G$ la sine $a$-ori.
Parte $A$ utilizări $sk_A$ și $pk_B$ pentru a deriva o cheie folosind X25519;
$$k = Hash(x([sk_A]pk_B))$$ Rețineți că $pk_B$ este un punct pe curbă și X25519 utilizează numai $x$ coordonatele punctelor pentru ECDH (notat cu $x(\cdot)$.
După cum puteți vedea, o dată $A$ poate obține cheia publică a $B$ cheia $k$ poate fi construit imediat şi este asemănător pentru $B$, de asemenea. Acesta este schimbul de chei Diffie-Hellman al curbei eliptice (ECDH).
Partea 2: calcul per-pachet
- $A$ selectează nonce de 24 de octeți $n$ (trebuie să fie unic) și nu ar trebui să se repete niciodată în timpul comunicării cu $B$. Nonce de 24 de octeți este sigur de generat aleatoriu.
- $A$ extinde cheia $k$ cu nonce într-un flux cheie cu
xsalsa20
- Mesajul este criptat cu fluxul (doar x-sau) unde sunt rezervați primii 32 de octeți.
- Primii 32 de octeți sunt utilizați pentru autentificarea mesajului criptat cu
Poly1305
.
de ce au nevoie de algoritmul de schimb de chei
Dacă nu au un mecanism de schimb de chei, atunci au nevoie de un mecanism simetric de distribuire a cheilor aceasta a fost povara criptării simetrice înainte de inventarea criptării cu cheie publică.
Cheile publice au nevoie de verificare. Uneori au fost folosite ca TOFU (Trust on the First Usage) și apoi verificate cu unele mecanisme precum Signal. În unele comunicări mai sigure, verificați mai întâi cheile publice.
Pentru mai multe detalii citiți