OpenPGP, lo standard che definisce come crittografare e firmare i messaggi utilizzando PGP, il formato di crittografia email più diffuso, ha ricevuto un importante aggiornamento, introducendo vari miglioramenti di sicurezza e algoritmi crittografici più moderni.
PGP è utilizzato per proteggere i messaggi email fin dagli anni ’90. Negli ultimi 25 anni, lo standard è stato aggiornato più volte. Tuttavia, i progressi nella crittografia hanno continuato a spingere avanti i confini della privacy e della sicurezza. Dal 2016, quando abbiamo iniziato a mantenere OpenPGP.js(nuova finestra), una delle librerie di crittografia email open-source più utilizzate al mondo, abbiamo lavorato per modernizzare PGP preservando uno dei suoi principali vantaggi: l’interoperabilità. Ciò ci permette di portare il meglio della crittografia moderna in Proton Mail, assicurandoci che Proton Mail non sia un giardino chiuso.
La standardizzazione garantisce l’interoperabilità futura e Proton è stata anche attivamente coinvolta nel processo di standardizzazione con il gruppo di lavoro OpenPGP presso l’Internet Engineering Task Force (IETF). Il risultato di ciò è il “crypto refresh(nuova finestra)” dello standard OpenPGP, come è stato soprannominato, che ha introdotto crittografia autenticata moderna, curve più sicure, hashing di password resistente alla memoria e altro ancora.
Standardizzando questi miglioramenti anziché utilizzare protocolli proprietari, stiamo spianando la strada affinché l’intero ecosistema email diventi più sicuro e garantendo che l’email crittografata rimanga interoperabile.
Miglioramenti della sicurezza
Ecco una panoramica dei più importanti miglioramenti della sicurezza nel crypto refresh di PGP.
Crittografia autenticata moderna (AEAD)
Una crittografia moderna dovrebbe essere resistente a manomissioni segrete. Un attaccante senza accesso alla tua chiave segreta non dovrebbe essere in grado di modificare il tuo messaggio senza essere rilevato. Una crittografia con questa proprietà si chiama “crittografia autenticata”.
OpenPGP ha avuto la crittografia autenticata per molto tempo, utilizzando un meccanismo chiamato “Codice di Rilevamento Modifiche” (MDC). Sebbene questo sia efficace, gli schemi di crittografia autenticata moderni raggiungono segretezza e autenticazione in un algoritmo integrato. Tali modalità di crittografia, denominate algoritmi AEAD, offrono prestazioni migliorate allo stesso livello di sicurezza.
Il nuovo standard include GCM, un algoritmo AEAD disponibile nell’API di crittografia Web, che fornisce implementazioni native dei primitivi crittografici alle applicazioni web e offre prestazioni e sicurezza migliorate. Per questo motivo, inizieremo presto a utilizzare questa modalità in tutti i prodotti Proton.
Curve più sicure
Novità nella specifica del crypto refresh è un insieme di algoritmi a chiave pubblica che utilizzano Curve25519 e Curve448 per la crittografia e la decrittografia (X25519 e X448) e per la firma e la verifica (Ed25519 e Ed448). I membri della comunità Proton sapranno che utilizziamo Curve25519 da anni. Tuttavia, questa sarà la prima volta che viene formalmente specificata.
Abbiamo anche proposto di aggiungere Curve25519 e Curve448 all’API di crittografia Web(nuova finestra). Alcuni browser, come Chrome e Safari, hanno iniziato ad implementare Curve25519. Pianifichiamo di utilizzare questo in OpenPGP.js per migliorare ulteriormente le prestazioni e la sicurezza delle nostre applicazioni web non appena sarà disponibile.
Funzione di hashing di password resistente alla memoria
OpenPGP include funzioni di hashing della password integrate, note come “algoritmi string-to-key (S2K)”. Tuttavia, fino all’aggiornamento crittografico, tutti erano piuttosto deboli. L’algoritmo più forte, “iterated and salted S2K”, aggiunge un sale alla password e poi esegue l’hashing del sale e della password ripetutamente usando una funzione di hash crittografica come SHA-2 per un numero configurabile di iterazioni, ma con un limite massimo di 62 MiB sui dati sottoposti a hashing. Poiché l’hashing SHA-2 è diventato molto veloce ed economico, questo non è più sufficiente per eseguire l’hashing di una password in modo sicuro. Per questo motivo, Proton ha da tempo adottato una funzione di hashing della password aggiuntiva, bcrypt, per eseguire l’hashing delle password prima di utilizzarle per criptare messaggi o chiavi OpenPGP.
OpenPGP passerà a Argon2(nuova finestra), il vincitore della Password Hashing Competition. Questa funzione è “memory-hard(nuova finestra)”, il che significa che richiede una quantità significativa di memoria per eseguire l’hashing di una password. Ciò la rende più difficile da ottimizzare per un attaccante che intenda indovinare la password usando hardware dedicato, come i circuiti integrati specifici per applicazioni(nuova finestra), poiché la velocità di hashing rimarrà vincolata dalla velocità della memoria. Con lo standard OpenPGP aggiornato, passeremo anche a Argon2 in Proton.
Deprecazione degli algoritmi legacy
L’aggiornamento crittografico depreca vecchie primitive e algoritmi crittografici, inclusi gli algoritmi di hash MD5, SHA1 e RipeMD, gli algoritmi simmetrici IDEA, 3DES e CAST5, e gli algoritmi a chiave pubblica ElGamal, DSA e chiavi RSA di meno di 3072 bit (il livello di sicurezza paragonabile a Curve25519). Tutti questi sono considerati meno sicuri delle loro alternative moderne e, di conseguenza, non sono adatti per l’uso in nuovi dati o persino per il consumo di dati esistenti in alcuni casi. Il default di Proton è da tempo Curve25519, che è più sicuro.
Prevenzione degli attacchi di sovrascrittura delle chiavi
Uno degli ambiti di ricerca del team di crittografia di Proton sono stati gli attacchi di sovrascrittura delle chiavi e nel 2022 abbiamo pubblicato un articolo di ricerca(nuova finestra) su questo argomento insieme al Professor Kenneth Paterson dell’ETH Zurigo. Questa ricerca è stata anche presentata alla Conferenza ACM sulla Sicurezza Informatica e delle Comunicazioni a Los Angeles nel novembre 2022. Mentre abbiamo aggiunto patch di sicurezza a OpenPGP.js e GopenPGP(nuova finestra) non appena abbiamo scoperto questi problemi, la più recente specifica OpenPGP affronta le vulnerabilità in modo più efficiente.
Robustezza contro future vulnerabilità
Sebbene la maggior parte dei cambiamenti nell’aggiornamento crittografico miri a risolvere vulnerabilità note o modernizzare le primitive crittografiche utilizzate, alcuni sono intesi a prevenire potenziali vulnerabilità nelle primitive crittografiche che potrebbero essere scoperte in futuro, evitando che influenzino OpenPGP.
In particolare, ora le firme sono “salted”, in altre parole, viene eseguito l’hashing di un valore casuale prima del messaggio o documento che viene firmato. Ciò rende più difficile eseguire un attacco di collisione, dove un attaccante sostituisce una firma di un dato documento con la firma di un documento diverso che condivide lo stesso prefisso, in quanto quella firma potrebbe essere stata eseguita con un sale diverso, significando che il prefisso non corrisponderebbe.
Questo significa che se un attacco come SHAttered(nuova finestra) (che ha dimostrato una collisione in SHA1) fosse mai trovato contro gli attuali algoritmi di hashing (come SHA2), OpenPGP non sarebbe impattato altrettanto.
Miglioramenti in arrivo
Dopo il rilascio dell’aggiornamento crittografico dello standard OpenPGP, prevediamo di continuare a lavorare con il Gruppo di Lavoro OpenPGP per portare una crittografia ancora più avanzata e funzionalità aggiuntive a PGP, come:
Miglioramenti della sicurezza
- Crittografia post-quantistica (un argomento su cui abbiamo già lavorato. Pubblicheremo un post sul blog a parte a breve.)
- Segretezza in avanti (proteggere i messaggi inviati oggi anche se una chiave viene compromessa domani)
- Separazione dei domini per la firma e/o la crittografia
Facilitazione di nuova funzionalità
- Inoltro automatico tramite re-criptazione proxy
- Chiavi simmetriche persistenti per la conservazione a lungo termine del materiale delle chiavi simmetriche, messaggi criptati simmetricamente e attestazioni simmetriche
- Revocatore designato per sostituire il meccanismo di Revocation Key deprecato
- Firme di attestazione per facilitare le certificazioni di terze parti attestate dalla prima parte (1PA3PC).
- Chiavi superate per facilitare la transizione a nuove chiavi
- Interfaccia OpenPGP senza stato (SOP)
- Estensioni al RFC 3156(nuova finestra) (PGP/MIME)
Specifiche e miglioramenti ai meccanismi di scoperta delle chiavi basati sulla rete
- Protocollo Keyserver HTTP (HKP)
- Directory Chiavi Web (WKD)
Puoi trovare ulteriori dettagli sui temi proposti qui(nuova finestra).
Specificazione e implementazioni
L’aggiornamento “crypto refresh” allo standard OpenPGP è attualmente in fase di revisione dal Security Area Director dell’IETF. Una volta che il documento supererà questa revisione, sarà pubblicato come un nuovo standard.
La specifica è stata co-autorata da Daniel Huigens di Proton, Justus Winter di Sequoia-PGP e Niibe Yutaka della Free Software Initiative of Japan (FSIJ). È stata curata da Paul Wouters di Aiven. I presidenti del Working Group, Daniel Kahn Gillmor dell’American Civil Liberties Union (ACLU) e Stephen Farell del Trinity College Dublin, hanno guidato il processo. Vorremmo ringraziarli e tutti gli altri che hanno contribuito al crypto refresh per aver aiutato a rendere internet più sicuro!
Abbiamo già implementato il crypto refresh in OpenPGP.js e GopenPGP, le due librerie OpenPGP open-source mantenute da Proton. A breve rilasceremo nuove versioni con questi miglioramenti affinché qualsiasi applicazione che utilizza queste librerie, inclusi Proton Mail, Proton Drive, Proton Pass e molte altre, possano beneficiare dei miglioramenti di sicurezza e prestazione del crypto refresh.
Desideriamo anche ringraziare il Sovereign Tech Fund(nuova finestra), un’iniziativa finanziata dal Ministero Federale Tedesco per gli Affari Economici e l’Azione per il Clima che supporta i progetti open-source contribuendo all’infrastruttura digitale che serve l’interesse pubblico, per aver finanziato l’implementazione del crypto refresh in OpenPGP.js e GopenPGP(nuova finestra).
Puoi controllare i progressi dell’implementazione di varie librerie OpenPGP, inclusi OpenPGP.js e GopenPGP, nei risultati della Suite di Test di Interoperabilità OpenPGP per il crypto refresh(nuova finestra). Sequoia-PGP ha sviluppato questa suite di test, che verifica le implementazioni OpenPGP per l’interoperabilità per assicurare che i messaggi di posta elettronica possano essere inviati tra qualsiasi due utenti, indipendentemente dall’applicazione o dall’implementazione OpenPGP che utilizzano.
Impatto
PGP è utilizzato per proteggere numerosi servizi Proton come Proton Mail, Proton Drive e Proton Pass, ma sono ben lontani dall’essere gli unici. Thunderbird, il popolare client di posta elettronica desktop, ha supporto integrato per OpenPGP. Mailvelope e Flowcrypt, entrambe estensioni del browser che utilizzano OpenPGP.js, consentono a chiunque di criptare end-to-end le proprie email utilizzando OpenPGP anche se il proprio provider di posta elettronica non supporta la crittografia end-to-end. Quest’ultimo offre anche app mobili per Android e iOS. Tutte queste applicazioni, e molte altre, fanno parte dell’ecosistema OpenPGP, consentendo agli utenti di inviare messaggi criptati in modo interoperabile senza essere vincolati a un singolo fornitore o applicazione. Lo standard aperto favorisce l’innovazione e previene il lock-in, beneficiando infine gli utenti finali.
Grazie al crypto refresh, i milioni di persone che utilizzano queste applicazioni beneficeranno di tutti i miglioramenti di sicurezza e prestazione menzionati in precedenza. I tuoi messaggi saranno criptati con maggiore sicurezza, sia che tu stia comunicando con un altro utente Proton o con un utente di qualsiasi altra applicazione che supporta OpenPGP.
Con il tuo sostegno, non vediamo l’ora di continuare a sviluppare crittografia interoperabile, open-source e basata su standard aperti per promuovere la missione di Proton e l’intero ecosistema della privacy open-source.
Questo lavoro è stato condotto da Daniel Huigens, Lara Bruseghini e Lukas Burkhalter del team di Crittografia Proton.