Puncte:1

Tăierea intrărilor uniform aleatoare pentru cheile private cu curbă eliptică

drapel ru

Imaginează-ți că există o uniformă pe 256 de biți intrare de la CSPRNG. Să presupunem că există o curbă ca secp256r1 a cărei ordine a curbei este puțin mai mică de 256 de biți.

Nu putem doar mod(input, curve_order) deoarece va introduce modul bias. Ce se întâmplă dacă tăiem 256 de biți la 255 de biți, ceea ce este mai mic decât ordinea curbei? Apoi, toate valorile din 255 de biți vor avea șanse egale de apariție.

ed25519 pare să facă exact asta, cu ordinea curbei de ~252 de biți - ajustează 3 biți.

Eșantionarea de respingere din NIST SP 800-56A rev 3, secțiunea 5.6.1.2.2 nu este în timp constant, așa că căutați ceva mai simplu.

Întrebare suplimentară: Ce se întâmplă dacă ajustăm și ultimul bit astfel încât cheile 0 și 1 nu va apărea niciodată prin folosire |= 2 asta îi va forța să fie întotdeauna 1 (la fel cum forțăm întotdeauna începerea să fie 0?

knaccc avatar
drapel es
De ce este important ca întregul proces să fie constant? Este important să testăm fiecare număr aleatoriu pentru a fi în interval în timp constant, dar nu văd un motiv pentru care ar fi o problemă să trebuiască să faci bucla de un număr nedeterminat de ori.
drapel ru
Acest lucru este doar pentru simplitate - nu pentru „oportunitate constantă” în sensul său tradițional / de securitate.
knaccc avatar
drapel es
Rețineți că, pentru tehnica pe care am descris-o în răspunsul meu, dacă faceți întotdeauna bucla de 29 de ori, nu vor fi suficiente iterații $1$ la fiecare $2^{128}$ încercări. Acest lucru s-ar califica ca timp constant, dar presupun că nu s-ar califica drept „simplu”, conform cerințelor dvs. Nu văd nicio altă modalitate de a avea un scalar cu adevărat imparțial.
Puncte:1
drapel es

Acesta este modul în care baza de cod Monero generează scalari aleatori pentru utilizare cu ed25519:

Pentru curba ed25519, comanda $\ell$ a grupului punctului de bază este $2^{252}+27742317777372353535851937790883648493$.

Pentru a genera un număr aleatoriu imparțial mai mic decât $\ell$, mai întâi determinăm că multiplu maxim al $\ell$ care se pot încadra în 32 de octeți este $15$.

Pentru a genera numărul aleatoriu imparțial, generăm în mod repetat o secvență aleatorie de 32 de octeți și testăm dacă este mai mică decât $15\ell$. Odată ce găsim un astfel de număr, putem reduce acest număr $mod\ \ell$ fără a introduce modul bias. Probabilitatea de a găsi un număr aleator potrivit la prima iterație este de cca. 94%.

Aceeași tehnică se aplică secp256r1, unde ați folosi $3 \ell$ în loc de $15\ell$ datorită ordinii grupului punctului de bază pentru secp256r1 fiind mai mare (vezi 2.4.2 Parametri recomandați secp256r1).Probabilitatea de a găsi un număr aleator potrivit la prima iterație este de cca. 95%.

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.