Întrebarea este corectă că orice cheie privată mai mică de 250 poate fi găsit din cheia publică, iar metoda pe care o descrie ar fi practicabilă. in orice caz
- Există metode mult mai bune, care pot găsi o cheie mai puțin decât k2 cu efort proporţional cu k (de exemplu. Pollard'd rho), și puțină memorie, cu probabilitate considerabilă. Astfel 250 operațiunile sunt suficiente pentru a găsi o cheie mai mică de 2100 cu o probabilitate considerabilă.
- 250 este un număr mic pentru un număr de operațiuni de spargere cripto. În anii 1970, NSA a fost de acord că DES are 256 chei, pentru că știau că pot sparge asta dacă este necesar. Până în 2000, valoarea de bază pentru securitate era 280. Linia de bază modernă ar putea fi 296, iar practica pentru sisteme noi este de ordinul 2128 sau mai mult. Asta înainte de a da seama de atacurile de mai sus.
există o limită superioară?
Da. Pentru fiecare metodă de semnătură și curbă bazată pe curba eliptică, există un set prescris pentru cheile private. Pentru ECDSA, este intervalul [1, n-1] unde n este ordinea generatorului (nu a n
în întrebare). Valoarea a n depinde de curba. Pentru curbă secp256k1, n este putin sub 2256. Astfel, efortul așteptat de a găsi cheia privată de către cheia publică folosind rho lui Pollard (sau orice altă metodă cunoscută) este de ordinul a 2128 operațiuni (adăugiri pe curba eliptică) sau mai multe.
Dacă limita superioară a fost depășită, cheia privată ar fi respinsă de software-ul compatibil. Dacă nu a fost respins și software-ul ar funcționa corect din punct de vedere matematic și pentru sistemele de semnătură în care cheia privată este direct ceea ce multiplică generatorul pentru a forma cheia publică (ca în întrebare și ECDSA), cheia ar funcționa ca dacă a fost redus modulo n (ordinea generatorului), atât pentru generarea cheii publice, cât și pentru semnare.
Regulile pentru generarea cheii private depind de sistemul de semnătură; de exemplu. Ed25519 specifică un spațiu pentru cheia privată care este mult mai mare decât n, pentru a îmbunătăți rezistența la unele atacuri (dar nu pentru a găsi o cheie privată care generează semnătură validă).
Îndepărtarea cheilor posibile într-un mod cunoscut adversarului scade securitate, deoarece adversarul are mai puține chei de testat. este admisibil pentru a elimina câteva chei posibile. Nu este de dorit în niciun fel.
Modul obișnuit/recomandat/cel mai bun de a selecta o cheie privată este uniform la întâmplare în setul de valori valide ale cheilor private. Este tolerabil să excludem unele valori (cum ar fi valorile mici ca în întrebare), dar asta doar atâta timp cât doar o mică parte din valori este respinsă. De exemplu. pentru ECDSA pe secp256k1 ar fi OK să respingi cheile private mai mici de 2192, deoarece asta elimină doar o proporție minusculă de aproximativ 2-64 (0,000000000000000005%) din spațiul de taste. Dar și asta nu are rost, pentru că este atât de improbabil să fie generată una dintre cheile excluse. Și creșterea limitei inferioare, astfel încât această proporție să devină neneglijabilă, va reduce în mod non-neglijabil alegerea noastră de chei, permițând unui algoritm special conceput de căutare a cheilor să o găsească mai ușor decât pentru o alegere uniform aleatorie.
O cheie privată ECDSA pe secp256k1 poate fi generată prin rularea unui zaruri hexagonale De 64 de ori (dacă primele 23 de aruncări au toate aceeași valoare, puneți la îndoială zarul și opriți-vă). Folosiți cu fidelitate cele 64 de rezultate, în ordinea big-endian. Rezultatul este o cheie privată validă (testul pe care l-am făcut asigură că rezultatul este în intervalul corespunzător).