Puncte:2

Folosind aceeași cheie privată atât pentru X25519, cât și pentru ECDSA (folosind curve25519)

drapel ru
jjd

Scriu o aplicație în care sunt necesare atât criptarea/decriptarea, cât și semnarea/verificarea și aleg X25519 ca algoritm de acord de cheie care va produce o cheie pentru criptare și ECDSA pentru a semna mesajele.

Generare cheie: generez o cheie privată curve25519 dintr-un mnemonic (deci am un fel de cheie privată aleatorie de 32 de octeți).

Acum am o matrice de 32 de octeți, vreau să folosesc această matrice de octeți atât pentru criptare, cât și pentru semnare, problema pe care o am este că pentru X25519 trebuie să aplic blocarea cheii pentru ca această cheie privată să fie validă, ceea ce arată astfel:

privateKey[0] &= 248; // dezactivați cei 3 biți cei mai puțin semnificativi
privateKey[31] &= 127 // anulează cel mai semnificativ bit
privateKey[31] |= 64 // setează al doilea bit cel mai semnificativ

Dar pentru ECDSA, cheia trebuie să fie în gamă $[1, N]$, unde N (pentru curba25519) este egal cu $2^{252}$ + un factor mic, așa că trebuie să-mi convertesc matricea de 32 de octeți într-un număr care se încadrează în acest interval.

Am câteva întrebări:

  • De ce nu este necesar ca cheia privată X25519 să se încadreze în gamă $[1, N]$?
  • De asemenea, de ce nu este important să aplicați funcția de prindere a cheii utilizată în X25519 la cheia utilizată pentru ECDSA?
knaccc avatar
drapel es
Nu utilizați aceeași cheie privată direct pentru semnare și criptare. Utilizați HKDF-Expand pe cheia principală uniformă aleatorie de 32 de octeți pentru a genera chei separate de semnare și criptare. Apoi, lăsați bibliotecile să le bloceze sau să le reducă mod N în orice mod consideră necesar.
Maarten Bodewes avatar
drapel in
Bună jjd și bine ai venit. Am eliminat partea Buncy Castle / implementare; asta e pentru [asa] sau poate [codereview.se]; e off topic aici. Vă rugăm să recitiți și să curățați întrebarea înainte de a posta, utilizatorii nu ar trebui să facă de ex. capitalizare pentru tine.
jjd avatar
drapel ru
jjd
multumesc knaccc raspunsul a fost de ajutor!
jjd avatar
drapel ru
jjd
Voi avea grijă să respect regulile data viitoare.
kelalaka avatar
drapel in
Răspunde asta la întrebarea ta? 1) [Generarea cheii publice pentru Ed25519 vs X25519](https://crypto.stackexchange.com/questions/76156/public-key-generation-for-ed25519-vs-x25519) 2) [Folosirea unei singure chei Ed25519 pentru criptare și semnătură](https://crypto.stackexchange.com/q/37896/18298) 3) [Folosește aceeași cheie privată atât pentru X25519, cât și pentru ECDSA (folosind curve25519)](https://crypto.stackexchange.com/q/ 63732/18298)
jjd avatar
drapel ru
jjd
da, multumesc!
Puncte:3
drapel gb

De ce nu este necesar ca cheia privată X25519 să se încadreze în gamă [1,N]$?

Prin dezactivarea bitului cel mai semnificativ și a celor trei biți mai puțin semnificativi, limitați efectiv cheia la doar 252 de biți. Cand spui $N$ este $2^{252}$ + un mic factor, vorbiți despre ordinea subgrup folosit de x25519, nu ordinea completă a grupului de curbe. Acest subgrup are indicele (sau cofactor) 8. Dezactivarea celor trei biți inferiori forțează secretul să fie un multiplu de 8, ceea ce înseamnă că se va afla în acest subgrup mare de ordin prim.

De asemenea, de ce nu este important să aplicați funcția de prindere a cheii utilizată în X25519 la cheia utilizată pentru ECDSA?

Din câte știu, Curve25519 nu este utilizat pentru ECDSA. Ați vrut să spuneți EdDSA (în special, ed25519)?

jjd avatar
drapel ru
jjd
Multumesc pentru raspunsul tau! ai dreptate, cred că curve25519 pentru ECDSA este o alegere proastă din partea mea, mă gândesc să folosesc EdDSA acum, știu că EdDSA și X25519 folosesc curbe diferite, dar folosesc aceeași funcție de prindere a tastei corect, este Este sigur să folosești aceeași cheie privată (dar chei publice diferite) atât pentru EdDSA, cât și pentru X25519, sau este mai sigur dacă obțin două chei diferite folosind 32 de octeți aleatorii?
meshcollider avatar
drapel gb
Cu siguranță ar trebui să obțineți două chei separate. Reutilizarea cheilor are aproape întotdeauna complicații de securitate neprevăzute. Btw, vă rugăm să nu uitați să acceptați și să votați răspunsul dacă a ajutat!
jjd avatar
drapel ru
jjd
Tocmai am făcut-o, am nevoie de cel puțin 15 reputații pentru a vota, mulțumesc pentru răspuns!
dave_thompson_085 avatar
drapel cn
@jjd: de fapt, Ed25519 (o instanță populară a EdDSA) și X25519 folosesc aceeași _curbă_ matematic, dar reprezentări diferite -- X25519 utilizează forma Montgomery și Ed25519 utilizează forma Edwards, iar aceste forme au coeficienți și calcule diferiți, dar sunt ceea ce matematicieni numiți echivalent birațional.Consultați https://datatracker.ietf.org/doc/html/rfc7748.

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.