Tra gli algoritmi ECC disponibili in openSSH (ECDH, ECDSA, Ed25519, Curve25519), che offre il miglior livello di sicurezza e (idealmente) perché?
Tra gli algoritmi ECC disponibili in openSSH (ECDH, ECDSA, Ed25519, Curve25519), che offre il miglior livello di sicurezza e (idealmente) perché?
In SSH vengono utilizzati due algoritmi: un algoritmo di scambio di chiavi (Diffie-Hellman o la variante a curva ellittica chiamata ECDH) e un algoritmo di firma. Lo scambio di chiavi fornisce la chiave segreta che verrà utilizzata per crittografare i dati per quella sessione. La firma è in modo che il client possa assicurarsi di parlare con il server corretto (un'altra firma, calcolata dal client, può essere utilizzata se il server impone l'autenticazione client basata su chiave).
ECDH utilizza un curva ; la maggior parte dei software utilizza la curva NIST standard P-256. Curve25519 è un'altra curva, il cui "passo di vendita" è che è più veloce, non più forte, del P-256. La differenza di prestazioni è molto piccola in termini umani: stiamo parlando di calcoli inferiori a un millisecondo su un piccolo PC, e questo accade solo una volta per sessione SSH. Non lo noterai. Nessuna curva può essere definita "più forte" dell'altra, né praticamente (sono entrambe abbastanza lontane nel regno "non può romperla") né accademicamente (entrambe sono al "livello di sicurezza a 128 bit").
Anche quando ECDH viene utilizzato per lo scambio delle chiavi, la maggior parte dei server e dei client SSH utilizzerà le chiavi DSA o RSA per le firme. Se vuoi un algoritmo di firma basato su curve ellittiche, allora questo è ECDSA o Ed25519; per alcune ragioni tecniche dovute alla definizione precisa dell'equazione della curva, questa è ECDSA per P-256, Ed25519 per Curve25519. Anche in questo caso, nessuno dei due è più forte dell'altro e la differenza di velocità è troppo piccola per essere rilevata da un utente umano. Tuttavia la maggior parte dei browser (inclusi Firefox e Chrome) non supportano più l'ECDH (anche dh).
L'uso di P-256 dovrebbe produrre una migliore interoperabilità in questo momento, perché Ed25519 è molto più recente e non così diffuso. Tuttavia, per un dato server che configuri e a cui desideri accedere dalle tue macchine, l'interoperabilità non ha molta importanza: controlli sia il software client che quello server.
Quindi, in fondo, la scelta dipende dall'estetica, cioè completamente da te, senza motivo razionale. I problemi di sicurezza non saranno comunque causati da quella scelta; gli algoritmi crittografici sono la parte più forte dell'intero sistema, non la più debole.
Dalla Introduzione a Ed25519, ci sono alcuni vantaggi in termini di velocità e alcuni vantaggi in termini di sicurezza. Uno dei vantaggi di sicurezza più interessanti è che è immune a diversi attacchi di canale laterale:
- Nessun indice di array segreto. Il software non legge o scrive mai dati da indirizzi segreti nella RAM; lo schema degli indirizzi è completamente prevedibile. Il software è quindi immune agli attacchi di temporizzazione della cache, attacchi di hyperthreading e altri attacchi di canale laterale che si basano sulla perdita di indirizzi attraverso la cache della CPU.
- Nessuna condizione di ramo segreto. Il software non esegue mai rami condizionali basati su dati segreti; lo schema dei salti è completamente prevedibile. Il software è quindi immune agli attacchi di canale laterale che si basano sulla fuga di informazioni attraverso l'unità di previsione del ramo.
Per fare un confronto, sono stati dimostrati diversi attacchi di cache-timing nel mondo reale su vari algoritmi. http://en.wikipedia.org/wiki/Timing_attack
Esiste un importante vantaggio pratico di Ed25519 rispetto a (EC) DSA: quest'ultima famiglia di algoritmi si rompe completamente quando viene utilizzata per le firme insieme a un generatore di numeri casuali interrotto. Un tale errore RNG è accaduto prima e potrebbe benissimo accadere di nuovo.
Teoricamente, le implementazioni possono proteggere da questo problema specifico, ma è molto più difficile per verificare che entrambe le estremità stiano utilizzando un'implementazione corretta piuttosto che preferire o applicare (a seconda delle esigenze di compatibilità) un algoritmo che specifica esplicitamente un comportamento sicuro (Ed25519).
Avevo l'impressione che Curve25519 SIA effettivamente più sicuro delle curve NIST a causa della forma della curva che lo rende meno suscettibile a vari attacchi di canali laterali e errori di implementazione. Vedi: http://safecurves.cr.yp.to
Ed25519 ha il vantaggio di poter utilizzare la stessa chiave per la firma dell'accordo di chiave (normalmente non lo faresti Fai questo). Non conosco abbastanza bene la matematica per dire se questa è una proprietà del fatto che sia una curva di Edwards, anche se so che è convertita nel sistema di coordinate di Montgomery (effettivamente in Curve25519) per l'accordo chiave ... Ed25519 è più rispetto a una curva, specifica anche la generazione di chiavi deterministiche tra le altre cose (ad esempio hashing), che vale la pena tenere a mente. Questa è una cosa frustrante delle implementazioni DJB, dato che devono essere trattate in modo diverso per mantenere l'interoperabilità.
Qualcosa a cui nessuna risposta finora ha affrontato direttamente è che le tue domande mescolano diversi nomi più o meno non correlati come se fossero alternative equivalenti tra loro, il che non è proprio il caso.
ECDH e ECDSA sono solo nomi di metodi crittografici.
ECDH è un metodo di scambio di chiavi che due parti possono utilizzare per negoziare una chiave sicura su una non sicura canale di comunicazione. È una variazione del metodo di scambio delle chiavi DH (Diffie-Hellman). ECDH sta per Diffie-Hellman a curva ellittica . Eppure ECDH è solo un metodo, il che significa che non puoi usarlo solo con una curva ellittica specifica, puoi usarlo con molte curve ellittiche diverse.
ECDSA è un algoritmo di firma che può essere utilizzato per firmare una parte di dati in modo tale che qualsiasi modifica ai dati causerebbe il fallimento della convalida della firma, ma un utente malintenzionato non sarebbe in grado di firmare nuovamente i dati correttamente dopo tale modifica. È una variazione di DSA (algoritmo di firma digitale). ECDSA è l'acronimo di Elliptic Curve Digital Signature Algorithm . Inoltre ECDSA descrive solo un metodo che può essere utilizzato con diverse curve ellittiche.
La sicurezza di ECDH ed ECDSA dipende quindi da due fattori:
Curve25519 è il nome di una curva ellittica specifica. Altre curve sono denominate Curve448, P-256, P-384 e P-521.
Ed25519 è il nome di una variazione concreta di EdDSA . Quando si esegue EdDSA utilizzando SHA-512 e Curve25519 , questa variazione è denominata Ed25519. EdDSA è un algoritmo di firma, proprio come ECDSA.
Quindi, se un'implementazione dice semplicemente che utilizza ECDH per lo scambio di chiavi o ECDSA per firmare i dati, senza menzionare alcuna curva specifica, di solito puoi presumere che utilizzerà le curve NIST (P-256, P-384 o P- 512), tuttavia l'implementazione dovrebbe sempre denominare in modo esplicito la curva utilizzata.
Per rispondere alla tua domanda sulla sicurezza: ECDH ed ECDSA hanno praticamente dimostrato di essere metodi concettuali di scambio e firma sicuri delle chiavi, quindi la sicurezza di ECDH e ECDSA dipende in gran parte dal fatto che qualcuno trovi un modo per rompere la crittografia ellittica in generale (poco probabile ma non impossibile) o per trovare un difetto nelle curve utilizzate (più probabile).
Il motivo per cui alcune persone preferiscono Curve25519 rispetto alle curve standard del NIST è il fatto che il NIST non ha chiaramente documentato il motivo per cui ha scelto queste curve a favore delle alternative esistenti. L'affermazione generica " Le curve sono state presumibilmente scelte per una sicurezza ottimale e un'efficienza di implementazione " suona molto come una sciocchezza di marketing e non convincerà gli esperti di crittografia.
Il NIST ha anche standardizzato una crittografia a curva ellittica basata su generatore di numeri casuali (Dual_EC_DRB) nel 2006 e il New York Times ha affermato (dopo aver esaminato i promemoria trapelati da Edward Snowden) che era la NSA a influenzare il NIST a standardizzare questo specifico generatore di numeri casuali. Un enorme punto debole è stato scoperto in quel generatore e si ritiene che sia una backdoor intenzionale posizionata dalla NSA per poter violare la crittografia TLS basata su quel generatore. Apparentemente l'ANSI ha scoperto la debolezza quando Dual_EC_DRB è stato sottoposto loro per la prima volta, ma nonostante fossero consapevoli di come evitarlo, non hanno né migliorato l'algoritmo, né pubblicizzato i punti deboli, quindi si ritiene che non gli fosse permesso di (gag order ). Quando la debolezza è diventata pubblicamente nota, lo standard è stato ritirato nel 2014.
Con queste conoscenze di base, ovviamente, le persone hanno iniziato a chiedersi se forse la fonte dei misteriosi parametri della curva NIST sia in realtà anche l'NSA poiché forse queste curve hanno anche punti deboli nascosti che non sono ancora noti pubblicamente ma l'NSA potrebbe saperlo su di loro e quindi essere in grado di rompere la crittografia basata su queste curve. Non ci sono prove per questa affermazione, nemmeno una prova presunta ma sembra sicuramente possibile e più realistica di una fiaba. Ecco perché le persone hanno perso la fiducia in queste curve e sono passate ad alternative dove è altamente improbabile che queste siano state influenzate da qualsiasi servizio segreto in tutto il mondo.
Curve25519 è stato pubblicato dal matematico e crittologo tedesco-americano Daniel J Bernstein nel 2005, che ha anche progettato il famoso cifrario a flusso Salsa20 e la variante ChaCha20 ora ampiamente utilizzata. Ha anche inventato l'autenticazione del messaggio Poly1305. Google ha deciso che ChaCha20 in combinazione con Poly1305 è un'alternativa sicura da utilizzare in TLS dopo che RC4 doveva essere rimosso perché l'algoritmo è stato rotto. Richiede molta meno potenza di calcolo rispetto all'utilizzo del chipher AES (molto utile per i dispositivi mobili in quanto consente di risparmiare la durata della batteria), ma si ritiene che fornisca una sicurezza comparabile. ChaCha20 / Poly1305 è standardizzato in RFC 7905 e oggi ampiamente utilizzato nelle comunicazioni client-server TLS. Quindi, se Bernstein fosse una spia della NSA, il che è molto improbabile, saremmo già tutti condannati perché allora TLS, poiché viene spesso utilizzato oggi, sarebbe probabilmente inutile per proteggere i dati dagli occhi dei servizi segreti.