Pentru un proiect la care lucrez, trebuie să implementez ECDSA peste curba NIST P-384 (AKA secp384r1
). Pentru cât merită, alegerea curbei este în afara controlului meu în acest caz particular.
Deși am deja o implementare funcțională, iar acesta este (până acum) doar un proiect pentru animale de companie cu mize mici, mă întrebam cum aș putea să mă ocup de asta în cel mai mult efectiv mod, mai ales pentru partea de semnare.
Lista brută de dorințe:
- Vreau să fac o încercare serioasă de a mă apăra împotriva scurgerilor de canal lateral și de sincronizare.
- Deoarece îmi pasă doar de curba P-384 și de ECDSA, aș dori o bază de cod cu o amprentă relativ mică (și pentru că va trebui să furnizez legături pentru codul non-C). Optimizările specifice P384 sunt cu siguranță binevenite, totuși.
- Aș dori opțiunea de a folosi deterministul în stil RFC 6979 $k$ valori (sau o altă schemă de derivare nonce deterministă).
- Schema pe care o implementez necesită și suport pentru compresia punctului.
Mă pot descurca eu cu 3 și 4 dacă baza de cod se pretează la modificare.
După ce m-am uitat puțin în jur, iată ce am găsit:
- OpenSSL (și furculițele sale precum LibreSSL/BoringSSL/...): alegerea evidentă, dar voluminoasă și nici nu sunt un fan al convențiilor de apelare baroc ale OpenSSL
- Android include o implementare minimalistă drăguță a P-256. Nu sunt sigur cât de sigur specific unul este, dar este un bun exemplu de genul de lucru pe care îl caut (înlocuirea P-256 cu P-384).
- BearSSL de la Thomas Pornin are o implementare P-384 portabilă, dar constantă (în măsura în care este posibil) și pare suficient de simplă pentru a elimina funcționalitatea de care nu am nevoie. Nu pare să folosească optimizări specifice curbei, dar utilizează deja deterministe $k$ valori ieșite din cutie.
Evident, aș prefera să evit să fiu nevoit să rulez propria implementare. În acest moment, sunt tentat să merg pe calea „dezactivarea BearSSL”, dar am vrut să întreb dacă există ceva mai mult plug-and-play sau dacă au existat probleme pe care le-am omis. Mulțumiri!