ECDSA vs RSA certificato: differenze

Due famiglie di crittografia asimmetrica

RSA e ECDSA sono i due algoritmi di firma digitale più usati nei certificati SSL/TLS moderni. RSA si basa sulla difficoltà di fattorizzare grandi numeri primi; ECDSA (Elliptic Curve Digital Signature Algorithm) si basa sul problema del logaritmo discreto su curve ellittiche. Entrambi forniscono autenticazione del server e firma del key exchange, ma con caratteristiche operative molto diverse.

Dimensione delle chiavi

La differenza più visibile è la lunghezza delle chiavi per equivalenti livelli di sicurezza:

  • RSA 2048 bitECDSA P-256 (256 bit)
  • RSA 3072 bitECDSA P-384 (384 bit)
  • RSA 7680 bitECDSA P-521 (521 bit)

Una chiave RSA 2048 bit pesa 256 byte; una ECDSA P-256 pesa solo 32 byte. Il certificato ECDSA risulta nettamente più piccolo, con benefici sui round trip dell'handshake e sull'uso di banda.

Performance

ECDSA è significativamente più veloce di RSA nelle operazioni di firma (lato server) e key generation. Numeri tipici su CPU moderne:

  • Firma ECDSA P-256: ~50.000 op/s
  • Firma RSA 2048: ~5.000 op/s
  • Verifica ECDSA P-256: ~25.000 op/s
  • Verifica RSA 2048: ~140.000 op/s

Notabile: ECDSA firma più rapidamente, RSA verifica più rapidamente. Per un web server che genera molti handshake (= firma), ECDSA è la scelta ottimale; per un client che verifica molti certificati, RSA è leggermente più rapido.

Compatibilità

RSA è universalmente supportato: ogni browser, OS, libreria TLS nata negli ultimi 20 anni gestisce RSA senza problemi. ECDSA richiede client più recenti:

  • Browser desktop: pieno supporto dal 2014
  • Android: dal 4.0 (2011)
  • iOS: dal 7.0 (2013)
  • Java: dal 7 (con SunEC)
  • Windows XP, vecchi Symbian, BlackBerry legacy: NO ECDSA

Se il pubblico ha esigenze di accessibilità da dispositivi molto obsoleti, RSA resta più sicuro.

Soluzione: doppio certificato

Il modo migliore per avere il meglio di entrambi è installare due certificati sullo stesso vhost, uno ECDSA e uno RSA, lasciando al server la scelta in base alle capacità del client. Configurazione Nginx:

ssl_certificate /path/ecdsa.crt;
ssl_certificate_key /path/ecdsa.key;
ssl_certificate /path/rsa.crt;
ssl_certificate_key /path/rsa.key;

Nginx 1.11+ supporta nativamente il dual cert. Apache 2.4.x altrettanto con direttive SSLCertificateFile doppie. Il server presenta automaticamente il certificato giusto in base alle cipher suite supportate dal client.

Forward Secrecy

Entrambi gli algoritmi supportano cipher con Forward Secrecy via ECDHE. La firma del certificato non incide sulla protezione del traffico passato; quello che conta è la modalità di key exchange. ECDSA si combina con ECDHE-ECDSA (firma + key exchange entrambi su curve ellittiche), RSA con ECDHE-RSA.

Quali curve scegliere

Le curve raccomandate per ECDSA in produzione sono:

  • P-256 (secp256r1): default, performance ottime, livello AES-128
  • P-384 (secp384r1): livello AES-192, lievemente più lenta
  • P-521 (secp521r1): livello AES-256, rara in pratica

Evita curve esotiche come secp192r1 o secp224r1. La curva Curve25519 (Ed25519) sta emergendo per firme TLS 1.3 ma il supporto delle CA pubbliche è ancora limitato.

Generazione CSR

Per una CSR ECDSA con OpenSSL:

openssl ecparam -genkey -name prime256v1 -out ecdsa.key
openssl req -new -key ecdsa.key -out ecdsa.csr -sha256

Per RSA:

openssl req -newkey rsa:2048 -keyout rsa.key -out rsa.csr -nodes -sha256

Quando preferire RSA

Se servi un pubblico legacy molto esteso, se ti integri con software embedded vecchio, se la tua CA pubblica non emette ECDSA, RSA 2048 resta una scelta solida. Per tutti gli altri scenari, doppio cert'ECDSA+RSA o solo ECDSA P-256 è la via moderna.

Hai bisogno di aiuto?

Se vuoi gestione SSL dal team di G Tech Group, scrivici tramite il modulo di contatto.

Hai trovato utile quest'articolo?