7. Security Considerations (Considerazioni di sicurezza)
7. Security Considerations (Considerazioni di sicurezza)
Il livello di sicurezza (cioè il numero di "operazioni" necessarie per un attacco brute-force su una primitiva) di curve25519 è leggermente inferiore al livello standard di 128 bit. Ciò è accettabile perché i livelli di sicurezza standard sono guidati soprattutto da primitive simmetriche molto più semplici, in cui il livello di sicurezza ricade naturalmente su una potenza di due. Per le primitive asimmetriche, aderire rigidamente a un livello di sicurezza potenza di due richiederebbe compromessi in altre parti del progetto, che il presente documento non accetta. Inoltre, confrontare livelli di sicurezza tra tipi diversi di primitive può essere fuorviante in modelli di minaccia comuni in cui più bersagli possono essere attaccati in parallelo [bruteforce].
Il livello di sicurezza di circa 224 bit di curve448 è un compromesso tra prestazioni e paranoia. Grandi computer quantistici, se mai realizzati, romperanno sia curve25519 sia curve448, e proiezioni ragionevoli delle capacità dei computer classici concludono che curve25519 è perfettamente sicura. Tuttavia, alcuni progetti hanno requisiti di prestazioni meno stringenti e desiderano coprirsi contro un certo avanzamento analitico contro le curve ellittiche; per questo è fornita anche curve448.
I progettisti di protocolli che usano Diffie-Hellman sulle curve definite in questo documento non devono assumere un "comportamento contributivo". In particolare, per comportamento contributivo si intende che le chiavi private di entrambe le parti contribuiscano alla chiave condivisa risultante. Poiché curve25519 e curve448 hanno cofattori 8 e 4 (rispettivamente), un punto di ingresso di ordine piccolo elimina qualsiasi contributo dalla chiave privata dell'altra parte. Questa situazione può essere rilevata controllando l'output tutto-zero, cosa che le implementazioni POSSONO fare, come specificato nella Sezione 6. Tuttavia, un gran numero di implementazioni esistenti non effettua tale controllo.
Chi progetta usando queste curve deve essere consapevole che, per ogni chiave pubblica, esistono diverse chiavi pubbliche calcolabili pubblicamente che le sono equivalenti, cioè producono gli stessi segreti condivisi. Pertanto usare una chiave pubblica come identificatore e la conoscenza di un segreto condiviso come prova di possesso (senza includere le chiavi pubbliche nella derivazione della chiave) può portare a vulnerabilità sottili.
I progettisti devono inoltre essere consapevoli che le implementazioni di queste curve potrebbero non usare la scala di Montgomery specificata in questo documento, ma potrebbero usare librerie generiche per curve ellittiche. Tali implementazioni potrebbero rifiutare punti sulla twist e potrebbero rifiutare elementi di campo non minimali. Pur non essendo raccomandato, tali implementazioni interopereranno con la scala di Montgomery specificata qui ma potrebbero essere banalmente distinguibili da essa. Ad esempio, l'invio di un valore non canonico o di un punto sulla twist può far sì che tali implementazioni producano un errore osservabile, mentre un'implementazione che segue il progetto di questo testo produrrebbe con successo una chiave condivisa.