Dezvolt o modalitate de a genera în mod determinist chei private pentru curbe eliptice arbitrare pe baza unor intrări de utilizator (un portofel pentru creier). În prezent, folosesc algoritmul de hashing al parolei Scrypt cu parametri robusti de dificultate pentru a hashing un număr de parametri de intrare într-o cheie.
Ieșirea Scrypt ar trebui să fie distribuită uniform între $[0, 2^{b})$ Unde ${b}$ este numărul de biți de ieșire utilizați de la ieșirea algoritmului Scrypt. Dar cheile private valide ale curbei eliptice trebuie să fie mai mici decât ordinea câmpurilor finite a curbei $N$, distribuite uniform între $[0, N)$. Astfel, folosind ieșirea Scrypt direct ca mod de cheie privată $N$ ar crea o mică părtinire în cheile rezultate care sunt generate - vești proaste, așa că trebuie să evit asta.
În mod normal, dacă generați chei private folosind un RNG securizat, ați încerca pur și simplu să reîncercați RNG până când obțineți un număr mai mic decât $N$, și ai putea să o folosești în siguranță ca o cheie privată.
Există o modalitate sigură de a repeta determinist ieșirea lui Scrypt, astfel încât să păstrăm distribuția pseudo-aleatoare a ieșirii Scrypt, fără a fi nevoie să rulăm din nou Scrypt cu parametri noi?
O modalitate pe care am luat-o în considerare a fost hashingul ieșirii scrypt cu SHA256 sau SHA512 până când acesta a fost mai mic de $N$, dar acest lucru nu ar funcționa atât de bine pentru curbele mai mari de 512 biți, cum ar fi P521.
O altă soluție mai puțin elegantă este să respingi pur și simplu orice parametri de intrare care produc o cheie mai mare decât $N$. Ar trebui să fie foarte rar să apară vreodată, așa că poate pot scăpa de asta? Există curbe comune acolo a căror ordine $N$ nu este o fracțiune semnificativă din următoarea puterea sa cea mai mare de doi?