Quale curva ellittica dovrei usare?

70

Attualmente sto rinnovando un certificato SSL e stavo considerando di passare alle curve ellittiche. Per Bernstein e Lange , so che alcune curve non dovrebbero essere usate, ma ho difficoltà a selezionare quelle corrette in OpenSSL:

$ openssl ecparam -list_curves
  secp112r1 : SECG/WTLS curve over a 112 bit prime field
  secp112r2 : SECG curve over a 112 bit prime field
  secp128r1 : SECG curve over a 128 bit prime field
  secp128r2 : SECG curve over a 128 bit prime field
  secp160k1 : SECG curve over a 160 bit prime field
  secp160r1 : SECG curve over a 160 bit prime field
  secp160r2 : SECG/WTLS curve over a 160 bit prime field
  secp192k1 : SECG curve over a 192 bit prime field
  secp224k1 : SECG curve over a 224 bit prime field
  secp224r1 : NIST/SECG curve over a 224 bit prime field
  secp256k1 : SECG curve over a 256 bit prime field
  secp384r1 : NIST/SECG curve over a 384 bit prime field
  secp521r1 : NIST/SECG curve over a 521 bit prime field
  prime192v1: NIST/X9.62/SECG curve over a 192 bit prime field
  prime192v2: X9.62 curve over a 192 bit prime field
  prime192v3: X9.62 curve over a 192 bit prime field
  prime239v1: X9.62 curve over a 239 bit prime field
  prime239v2: X9.62 curve over a 239 bit prime field
  prime239v3: X9.62 curve over a 239 bit prime field
  prime256v1: X9.62/SECG curve over a 256 bit prime field
  sect113r1 : SECG curve over a 113 bit binary field
  sect113r2 : SECG curve over a 113 bit binary field
  sect131r1 : SECG/WTLS curve over a 131 bit binary field
  sect131r2 : SECG curve over a 131 bit binary field
  sect163k1 : NIST/SECG/WTLS curve over a 163 bit binary field
  sect163r1 : SECG curve over a 163 bit binary field
  sect163r2 : NIST/SECG curve over a 163 bit binary field
  sect193r1 : SECG curve over a 193 bit binary field
  sect193r2 : SECG curve over a 193 bit binary field
  sect233k1 : NIST/SECG/WTLS curve over a 233 bit binary field
  sect233r1 : NIST/SECG/WTLS curve over a 233 bit binary field
  sect239k1 : SECG curve over a 239 bit binary field
  sect283k1 : NIST/SECG curve over a 283 bit binary field
  sect283r1 : NIST/SECG curve over a 283 bit binary field
  sect409k1 : NIST/SECG curve over a 409 bit binary field
  sect409r1 : NIST/SECG curve over a 409 bit binary field
  sect571k1 : NIST/SECG curve over a 571 bit binary field
  sect571r1 : NIST/SECG curve over a 571 bit binary field
  c2pnb163v1: X9.62 curve over a 163 bit binary field
  c2pnb163v2: X9.62 curve over a 163 bit binary field
  c2pnb163v3: X9.62 curve over a 163 bit binary field
  c2pnb176v1: X9.62 curve over a 176 bit binary field
  c2tnb191v1: X9.62 curve over a 191 bit binary field
  c2tnb191v2: X9.62 curve over a 191 bit binary field
  c2tnb191v3: X9.62 curve over a 191 bit binary field
  c2pnb208w1: X9.62 curve over a 208 bit binary field
  c2tnb239v1: X9.62 curve over a 239 bit binary field
  c2tnb239v2: X9.62 curve over a 239 bit binary field
  c2tnb239v3: X9.62 curve over a 239 bit binary field
  c2pnb272w1: X9.62 curve over a 272 bit binary field
  c2pnb304w1: X9.62 curve over a 304 bit binary field
  c2tnb359v1: X9.62 curve over a 359 bit binary field
  c2pnb368w1: X9.62 curve over a 368 bit binary field
  c2tnb431r1: X9.62 curve over a 431 bit binary field
  wap-wsg-idm-ecid-wtls1: WTLS curve over a 113 bit binary field
  wap-wsg-idm-ecid-wtls3: NIST/SECG/WTLS curve over a 163 bit binary field
  wap-wsg-idm-ecid-wtls4: SECG curve over a 113 bit binary field
  wap-wsg-idm-ecid-wtls5: X9.62 curve over a 163 bit binary field
  wap-wsg-idm-ecid-wtls6: SECG/WTLS curve over a 112 bit prime field
  wap-wsg-idm-ecid-wtls7: SECG/WTLS curve over a 160 bit prime field
  wap-wsg-idm-ecid-wtls8: WTLS curve over a 112 bit prime field
  wap-wsg-idm-ecid-wtls9: WTLS curve over a 160 bit prime field
  wap-wsg-idm-ecid-wtls10: NIST/SECG/WTLS curve over a 233 bit binary field
  wap-wsg-idm-ecid-wtls11: NIST/SECG/WTLS curve over a 233 bit binary field
  wap-wsg-idm-ecid-wtls12: WTLS curvs over a 224 bit prime field
  Oakley-EC2N-3:
        IPSec/IKE/Oakley curve #3 over a 155 bit binary field.
        Not suitable for ECDSA.
        Questionable extension field!
  Oakley-EC2N-4:
        IPSec/IKE/Oakley curve #4 over a 185 bit binary field.
        Not suitable for ECDSA.
        Questionable extension field!

Un gentile crittografo potrebbe indicarmi quali curve sono ancora considerate sicure?

    
posta executifs 07.01.2015 - 18:18
fonte

3 risposte

73

Stai leggendo male i consigli di Bernstein e Lange (ammettiamolo, la loro presentazione è un po 'fuorviante, con le paurose tag "False" rosse). Ciò che significa non è che alcune curve sono intrinsecamente insicure, ma che l'implementazione sicura di alcune curve è più facile che per altre (ad esempio per quanto riguarda il comportamento della libreria quando incontra qualcosa che pretende di essere la codifica di un punto di curva valido, ma non lo è).

Ciò che vuoi veramente è una curva tale che:

  • il software a cui ti affiderai con la tua chiave privata (il tuo server SSL) è implementato correttamente e non perderà dettagli sulla tua chiave privata;
  • l'interoperabilità sarà raggiunta.

Per un certificato server SSL, un certificato "curva ellittica" verrà utilizzato solo con le firme digitali (algoritmo ECDSA). Il server firmerà solo i messaggi che genera da solo; e, in ogni caso, l'unica operazione "privata" che coinvolge una curva in ECDSA è la moltiplicazione del punto base convenzionale (hardcoded, poiché è parte della definizione della curva, quindi corretta) da un valore casuale generato dal server. Pertanto, nel tuo caso d'uso, non vi è alcun rischio di perdita di chiave privata che sarebbe specifica per la curva utilizzata. Se la tua implementazione SSL è scarsa, sarà scarsa per tutte le curve, non solo per alcune di esse.

"Interoperabilità" significa che probabilmente lo preferiresti se i client SSL possono effettivamente connettersi al tuo server; altrimenti, avere un server SSL sarebbe piuttosto inutile. Questo semplifica molto la domanda: in pratica, i client medi supportano solo le due curve, quelle designate nel cosiddetto NSA Suite B : queste sono le curve NIST P-256 e P-384 (in OpenSSL, sono designate come, rispettivamente," prime256v1 "e" secp384r1 "). Se utilizzi qualsiasi altra curva, alcuni browser Web diffusi (ad esempio Internet Explorer, Firefox ...) non saranno in grado di comunicare con il tuo server.

Usa P-256 per minimizzare i problemi. Se ritieni che la tua virilità sia minacciata dall'utilizzo di una curva a 256 bit in cui è disponibile una curva a 384 bit, utilizza P-384: aumenterà i tuoi costi computazionali e di rete (un fattore di circa 3 per la CPU, alcuni extra dozzina di byte sulla rete), ma nella pratica questo è probabilmente trascurabile (in un server Web alimentato da SSL, il costo elevato è in "Web", non in "SSL").

    
risposta data 07.01.2015 - 19:01
fonte
8

Direi stick a secp521r1 - anche DJB dice P-521 è un ottimo primo , ed è anche supportato in ogni moderna libreria crittografica .

Allo stesso tempo, dovremmo spingere l'adozione di curve non NIST come Curve25519, che sarà completamente rigida, meno incline agli errori di implementazione e potrebbe diventare una buona alternativa per coloro che hanno bisogno di soluzioni più veloci di secp521r1.

    
risposta data 13.06.2015 - 11:46
fonte
2

Almeno non utilizzare le curve secp112r1, secp112r2, secp128r1, secp128r2, secp160k1, secp160r1, secp160r2, secp192k1. hanno una dimensione troppo piccola per l'applicazione di sicurezza in base alla raccomandazione NIST !

    
risposta data 23.07.2015 - 16:48
fonte

Leggi altre domande sui tag