Crittografia PGP
PGP è un set standard di algoritmi di crittografia, decriptazione e firma che forniscono privacy crittografica e autenticazione.
Quando si utilizza PGP per criptare i payload, i partner devono supportare:
- Crittografia e decriptazione dei payload con più chiavi PGP.
- Firma dei payload con più chiavi PGP.
- Verifica di un payload con più firme, una delle quali può essere la con la chiave fornita da Google.
- Decrittografia dei payload con codifica Base64, sicura per il web.
Le chiavi pubbliche PGP fornite a Google devono avere una sottochiave utilizzata per la crittografia. La consente una rotazione indipendente dalla chiave master. La chiave master viene utilizzato per la verifica dell'identità. Le chiavi private devono essere la versione 2048 (o successiva) chiavi RSA di bit che scadranno dopo un anno con una durata massima di due anni.
Prima di iniziare lo sviluppo, devi scambiare le chiavi PGP con Google. In questo passaggio, genererai una coppia di chiavi pubblica/privata PGP, fornisci le chiavi chiave pubblica a Google e ricevere una chiave pubblica da Google. Durante lo sviluppo, Dovrai scambiare solo le chiavi sandbox utilizzate per lo sviluppo e i test al di fuori della produzione. Prima di testare e lanciare la produzione, dovrai un altro scambio di chiavi di produzione.
Generazione di una nuova chiave PGP in corso...
Se il percorso di sistema contiene un programma binario GPG, puoi usare il seguente comando POSIX per creare una nuova coppia di chiavi.
$ gpg --full-generate-key
Quando richiesto, seleziona una chiave RSA con almeno 2048 bit di entropia e e scadenza 1-2 anni. Questo comando deve creare una chiave master (con etichetta SC, per "S"igning e "C"ertificate Generation) e una sottochiave (con etichetta E, per "E"crittografia).
Configurazione libreria PGP
Invio payload
- Durante la firma, devi usare
SHA384
come algoritmo di digest. non utilizzareSHA1
oMD5
- Durante la crittografia, devi usare
AES256
come crittografia simmetrica algoritmo; non usareCAST5
oIDEA
- Quando cripti o firmi i messaggi, assicurati di selezionare la chiave secondaria con
scopo corrispondente; usa la chiave
CAN_SIGN
per la firma ChiaveENCRYPT_COMMS
/ENCRYPT_STORAGE
per la crittografia
Ricezione di payload
- Durante la verifica di un payload, assicurati che la tua libreria supporti l'hash moderno
algoritmi come
SHA384
. Google inizierà a utilizzarlo su tutte le nuove chiavi a partire dal 14 maggio 2023. - Quando decifra un payload, assicurati che la tua libreria supporti la simmetria moderna
algoritmi di crittografia come
AES256
. Google inizierà a utilizzarlo su tutti i nuovi le chiavi aggiornate al 14 maggio 2023.
Esempio di crittografia del payload di GPG
Il comando seguente è un esempio di come selezionare opzioni sicure quando si utilizza GPG. Questa operazione dovrebbe essere eseguita in un ambiente attendibile in cui persone non hanno accesso alle chiavi private o ai file di input sensibili.
gpg --output signed-and-encrypted.pgp \
--sign --digest-algo SHA384 \
--encrypt --cipher-algo AES256 \
--armor \
--recipient {key_id} \
input.txt
GPG selezionerà automaticamente la chiave giusta dal bundle per ogni operazione che gli chiedi di eseguire.
Crittografia JWE con firma JWS
JSON Web Encryption (JWE) è uno standard definito da rfc7516 per criptare i contenuti a livello di applicazione livello. JSON Web Signature (JWS) è uno standard definito rfc7515 per firmare contenuti sul a livello di applicazione.
Le richieste e le risposte saranno token JWE criptati utilizzando metodi asimmetrici chiave) con la "Serializzazione compatta" . Il token JWE contengono il payload firmato come token JWS. JWS utilizza anche chiavi asimmetriche; chiave privata per la firma e chiave pubblica per la verifica.
Quando invii un payload, firmalo prima e poi criptalo. Quando quando riceve un payload, lo decripta e poi verifica la firma.
Quando si utilizza JWE, i Partner devono supportare le seguenti opzioni:
- Serializzazione compatta.
- Decrittografia dei payload da una delle numerose chiavi JWE.
- L'algoritmo RSA-OAEP, RSA-OAEP-256 o ECDH-ES per la gestione delle chiavi.
- Compilato nell'intestazione
alg
(rfc7518 sezione 4.1).
- Compilato nell'intestazione
- L'app A256GCM,
A128GCM,
A128CBC-HS256 oppure
A256CBC-HS512
per la crittografia dei contenuti.
- Compilato nell'intestazione
enc
.
- Compilato nell'intestazione
kid
per identificare la chiave di crittografia pubblica.- I payload dei messaggi che utilizzano la crittografia JWE devono utilizzare il tipo di contenuto application/jose; charset=utf-8.
Quando si utilizza JWS, i Partner devono supportare le seguenti opzioni:
- Serializzazione compatta.
- Verifica dei payload da una delle numerose chiavi JWS.
- HS256, HS384, HS512,
Algoritmo RS256, RS384, RS512, ES256, PS256, PS384 o PS512 per la creazione della firma.
- Compilato nell'intestazione
alg
(rfc 7518 sezione 3.1).
- Compilato nell'intestazione
kid
per identificare la chiave di firma privata.
Le stringhe JWE/JWS saranno codificate come stringhe UTF-8 e i loro payload potrebbero essere byte arbitrari.
Le chiavi private devono essere chiavi RSA/ECDH-ES con una scadenza massima di un anno per due anni. Tutte le identità di chiave privata devono rimanere sempre server del partner e, di conseguenza, tutti i valori delle firme devono essere calcolati server del partner.
Prima di iniziare lo sviluppo, devi scambiare le chiavi JWE e JWS con Google. Le chiavi devono essere scambiate nel formato JWK, come definito in rfc7517 In questo passaggio, genererai una coppia di chiavi pubblica/privata, fornisci il token chiave pubblica a Google e ricevere una chiave pubblica da Google. Durante lo sviluppo, Dovrai scambiare solo le chiavi sandbox utilizzate per lo sviluppo e i test al di fuori della produzione. Prima di testare e lanciare la produzione, dovrai un altro scambio di chiavi di produzione.