Quattro CSP EC25 P256 sono disponibili in Windows. Quale dovrei usare?

3

In base al caso di supporto di Azure n. 116120515025419, il centro dati pubblico supporta solo i seguenti

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P384
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA

Poiché il mio obiettivo è utilizzare ECC con Perfect Forward Secrecy, penso che queste siano le mie migliori opzioni.

TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256

Il certificato EV più economico che riesco a localizzare è Namecheap / Comodo e supportano le seguenti curve:

 prime256r1, secp256t1, secp384r1, secp521r1.

Sto utilizzando questa guida per generare il mio certificato, ma I ' Non sono sicuro di quale dei seguenti da scegliere

ECDSA_P256 Microsoft Software Key Storage Provider
ECDSA_secP256r1 Microsoft Key Storage provider
ECDSA_secP256k1 Microsoft Key Storage provider
ECDSA_nistP256, Microsoft Key Storage provider

Razionale per volere ECDSA 256

La mia scelta di utilizzare il certificato P256 consentirà agli sviluppatori di utilizzare CBC oltre a GCM. Potrei scegliere una lunghezza di bit più alta, ma i CSP ECDSA più sicuri non supportano CBC. È saggio da parte mia supportare la CBC?

Nel caso in cui sia importante, i miei clienti target sono le app mobili, i browser e i dispositivi IoT.

Domanda

  • Qual è la differenza tra le curve disponibili in Windows e quale è più appropriato per il mio caso d'uso? (Perché?)

  • Se ho una scelta, quale delle curve è meno incline agli errori nelle implementazioni di terze parti?

posta random65537 03.05.2017 - 19:53
fonte

1 risposta

2

In una suite di crittografia come TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 , ci sono due curve coinvolte:

  • Uno viene utilizzato per la parte ECDHE: una chiave Diffie-Hellman scambiata viene utilizzata tra client e server, su una determinata curva.
  • L'altro è per la firma ECDSA calcolata dal server: il server firma il suo messaggio ServerKeyExchange . ECDSA è un algoritmo di firma che utilizza i calcoli su una curva ellittica.

Non è richiesto che entrambe le curve siano uguali; sono per lo più estranei e vivono in mondi diversi. A livello concettuale, quello utilizzato per ECDHE è più importante, perché deve garantire la sicurezza per tutta la vita dei dati che verranno scambiati sul filo (ovvero se i dati sono ancora importanti tra dieci anni, la curva deve ancora essere robusti da dieci anni a partire da ora); quello usato nella firma è solo per ora, e non importa se sarà rotto domani.

Tieni presente che la inoltro segreto riguarda esclusivamente lo scambio di chiavi, ovvero la parte ECDHE. Questa è la stessa idea: la sicurezza del sistema di firma conta solo per ora. Quindi, potresti perfettamente avere la segretezza avanzata con ECC con una suite di cifratura TLS_ECDHE_RSA_* , cioè con una chiave RSA nel certificato.

Normalmente, la scelta CSP (tecnicamente, "CNG key storage provider") riguarda il tipo di chiave privata che verrà effettivamente memorizzata, cioè corrispondente al certificato e alla firma ECDSA (o RSA). La curva per ECDHE viene scelta in modo indipendente (*), tra client e server, con i segreti che sono tenuti solo nella RAM (e quindi mai memorizzati, che è il punto della segretezza in avanti).

Detto questo, l'unica curva che è supportata ovunque è la curva P-256 del NIST, nota anche come "secp256r1" o "prime256r1" (da non confondere con "secp256k1", che è una curva distinta). Anche la curva NIST P-384 ha una buona dose di supporto diffuso, sebbene forse non tanto quanto il P-256. Inoltre, P-384 implica un po 'più di lavoro computazionale (circa tre volte tanto), cosa che non importa nella pratica, a meno che non siano coinvolti alcuni sistemi embedded vincolati (non smartphone, veramente piccoli sistemi). Un altro punto è che il P-256 garantisce già una sicurezza più che adeguata, anche per quanto riguarda i miglioramenti tecnologici: per quanto ne sappiamo, se uno scambio di chiavi ECDHE P-256 viene mai interrotto, allora sarà attraverso l'uso di un ancora mitico computer quantistico , e se tale bestia viene mai costruita, quindi triterà attraverso P-384 con quasi tanto facilità. In questo senso, non vi è alcun vantaggio in termini di sicurezza nell'usare P-384 anziché P-256.

Riepilogo: per la massima interoperabilità, utilizza P-256. Le implementazioni SSL client e server possono ancora decidere di utilizzare un'altra curva per la parte ECDHE; a meno che non venga applicata una guida specifica, l'altra curva sarà di solito anche P-256 o (a seconda delle implementazioni coinvolte) Curve25519, che è anche una buona scelta per la sicurezza.

(*) Principalmente. Alcune versioni di OpenSSL cercheranno di abbinare la dimensione della curva ECDHE alla curva utilizzata nell'ECDSA, che può avere o meno senso dal momento che si riferiscono a diverse operazioni con caratteristiche di sicurezza diverse, soprattutto per quanto riguarda i futuri miglioramenti tecnologici.

    
risposta data 03.05.2017 - 21:00
fonte

Leggi altre domande sui tag