ECDSA: il pezzo mancante del DNSSEC

Il DNSSEC è un argomento complicato e a rendere le cose ancora più confuse è la disponibilità di diversi algoritmi di sicurezza standard per la firma dei record DNS, definiti dalla IANA. L'algoritmo 13 è una variante dell'algoritmo di firma digitale a curva ellittica (ECDSA). Sebbene attualmente sia utilizzato da meno dello 0,01% dei domini, vorremmo sostenere che ECDSA ci ha aiutato a eliminare le ultime due barriere per l'adozione diffusa del DNSSEC: l'enumerazione delle zone e l'amplificazione DDoS.

L'enumerazione delle zone è impedita dalla firma in tempo reale, che è efficiente dal punto di vista computazionale solo con la rapida generazione della firma di ECDSA. Le curve ellittiche producono anche chiavi e firme significativamente più piccole rispetto alle loro controparti RSA, il che significa che le risposte alle query DNS sono più piccole. Questo riduce notevolmente il fattore di amplificazione degli attacchi DDoS basati su DNS.

ECDSA & DNSSEC - Enumerazione delle zone

Il protocollo DNSSEC introduce la negazione autenticata dell'esistenza tramite i record NSEC e NSEC3. Tuttavia, come discusso in Complessità del DNSSEC e considerazioni, sia l'NSEC che l'NSEC3 consentono agli aggressori di percorrere la zona. La soluzione è una tecnica intelligente chiamata "DNSSEC white lies" (descritta nelle RFC 4470 e 4471), ma può essere implementata solo se i record DNSSEC sono firmati al volo.

RSA è l'algoritmo di firma più diffuso nel DNSSEC, in parte perché è l'unico algoritmo richiesto e definito dal protocollo. Purtroppo, la firma dal vivo con RSA ha costi proibitivi.

Prestazioni di ECDSA e RSA

I guadagni di prestazioni di ECDSA sono notevoli. È 10 volte meno costoso dal punto di vista computazionale generare una firma ECDSA rispetto a una firma RSA comparabile. Questo rende fattibile la firma dal vivo (e le bugie DNSSEC white ), anche in scala.

Durante la nostra beta del DNSSEC (con meno di 1.000 domini firmati), Cloudflare ha risposto a decine di migliaia di query DNSSEC per secondo. Si tratta di oltre 1 miliardo di interrogazioni al giorno e noi firmiamo tutti i record RRSIG necessari al volo. Avere un algoritmo di firma 10 volte più veloce di RSA fa una grande differenza quando si tratta di carico sui nostri server DNSSEC.

Quando abbiamo iniziato a lavorare con ECDSA, l'implementazione di OpenSSL che usavamo era in Go. Considerando tutte le operazioni di firma che svolgiamo, l'ottimizzazione della generazione delle firme era una priorità assoluta. Abbiamo quindi riscritto l'implementazione di ECDSA in assembly di basso livello e ora è più veloce di 20 volte rispetto a Go. Il codice è open source e verrà inserito in Go 1.7 in modo che l'intera comunità crittografica possa trarre vantaggio dalle nostre ottimizzazioni.

Ulteriori informazioni

Amplificazione DDoS

Cloudflare è il più grande fornitore di DNS gestito al mondo. Quello che non vogliamo è trasformare i nostri server DNSSEC in un vettore di amplificazione per gli attacchi DDoS (Distributed Denial-of-Service). Ogni volta che si richiede un record a un server DNSSEC, questo restituisce anche la firma associata a quel record e la chiave pubblica utilizzata per verificare la firma. Sono potenzialmente molte informazioni.

Rendere la dimensione della risposta per le query DNSSEC la più piccola possibile è un requisito importante per prevenire l'abuso della nostra infrastruttura DNS da parte di potenziali aggressori. Le dimensioni ridotte delle chiavi e delle firme ECDSA contribuiscono notevolmente a questo scopo.

ECDSA e RSA Dimensione della risposta

Per ottenere una sicurezza a 128 bit con ECDSA è necessaria una chiave a 256 bit, mentre una chiave RSA analoga sarebbe di 3072 bit. Si tratta di un fattore di amplificazione 12 volte superiore solo per i tasti. Per saperne di più sul perché le chiavi crittografiche hanno dimensioni diverse, consultare questo post del blog.

Tuttavia, la maggior parte delle chiavi RSA non sono di 3072 bit, quindi un fattore di amplificazione di 12 volte potrebbe non essere la cifra più realistica. Analizziamo lo scenario reale peggiore per l'amplificazione DDoS, ovvero una risposta negativa (record NSEC). Per un dominio dietro Cloudflare (che utilizza firme ECDSA e bugie bianche DNSSEC), una tipica risposta DNSSEC è di 377 byte. Confrontate questo dato con i 1075 byte di un dominio che non utilizza le bugie bianche ECDSA o DNSSEC.

Se si considera il fatto che tutte le altre implementazioni DNSSEC su larga scala si basano su firme RSA, è poco allettante per un attaccante sfruttare la nostra infrastruttura DNSSEC come vettore DDoS.

Stato attuale di ECDSA e DNSSEC

ECDSA risolve i principali problemi del DNSSEC, ma è poco sfruttato dalla comunità DNSSEC globale. Abbiamo dato una breve occhiata all'adozione di ECDSA nella zona DNS root e nel milione di Alexa.

Algoritmi di sicurezza DNSSEC nella zona root

In primo luogo, abbiamo esaminato la zona DNS principale per vedere quali algoritmi DNSSEC utilizzano i domini di primo livello. La tabella seguente mostra gli algoritmi di sicurezza specificati dai record DS nel file della zona principale:

curl -s http://www.internic.net/domain/root.zone | awk '$4 == "DS" { print $6}' | sort -n | uniq -c
Il milione di Alexa

Abbiamo eseguito un'analisi simile per il milione di Alexa, che ci fornisce una sezione trasversale decente del traffico Internet globale:

Algoritmo Numero di record DS firmati
1 (RSA/MD5) 1
3 (DSA/SHA1) 10
5 (RSA/SHA-1) 3322
7 (RSASHA1-NSEC3-SHA1) 5083
8 (RSA/SHA-256) 7003
10 (RSA/SHA-512) 201
13 (Curva ECDSA P-256 con SHA-256) 23

La rivelazione più sorprendente è che solo 15.643 dei 1.000.000 siti Web sono abilitati al DNSSEC in qualsiasi capacità . Di questo 1,5%, solo 23 zone sono firmate con l'Algoritmo 13. Inoltre, oltre la metà delle zone Algorithm 13 si trova dietro la rete Cloudflare. Ciò significa che ci sono meno di una dozzina di zone nel milione di Alexa che utilizzano ECDSA al di fuori di Cloudflare. Ciò supporta i risultati di Roland van Rijswijk-Deij et al. secondo cui il 99,99% dei domini firmati in .com, .net e .org utilizzano RSA.

Allora, perché l'utilizzo dell'algoritmo 13 è così basso, soprattutto se si considera che risolve problemi così importanti nel DNSSEC? Ebbene, RSA è stato introdotto con il protocollo DNSSEC fin dall'inizio. ECDSA è un nuovo algoritmo crittografico e i resolver, i registrar e i registri si stanno ancora aggiornando.

Svantaggi di ECDSA

ECDSA non è privo di compromessi. Secondo Roland van Rijswijk-Deij et al., solo l'80% dei resolver supporta la validazione ECDSA. Questo numero è in crescita, ma significa che se l'intero Internet DNSSEC passasse subito a ECDSA la convalida DNSSEC fallirebbe per milioni di utenti di Internet ogni giorno e tornerebbe a restituire record DNS non verificati.

Inoltre, mentre la creazione della firma ECDSA è più veloce di quella RSA, la convalida della firma è molto più lenta. Roland van Rijswijk-Deij et al. hanno dimostrato che, anche con le ottimizzazioni di ECDSA che ha contribuito a OpenSSL, ECDSA è ancora 6,6 volte più lento di RSA a 1024 bit (che è l'algoritmo più comunemente usato per la firma a zona delle chiavi). Si tratta di un problema serio, perché il sovraccarico dei risolutori DNS potrebbe potenzialmente rallentare l'intera Internet.