Crittografia a livello di applicazione

Le API di pagamento standard supportano PGP o JWE per il livello di applicazione la crittografia.

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

  1. Durante la firma, devi usare SHA384 come algoritmo di digest. non utilizzare SHA1o MD5
  2. Durante la crittografia, devi usare AES256 come crittografia simmetrica algoritmo; non usare CAST5 o IDEA
  3. Quando cripti o firmi i messaggi, assicurati di selezionare la chiave secondaria con scopo corrispondente; usa la chiave CAN_SIGN per la firma Chiave ENCRYPT_COMMS/ENCRYPT_STORAGE per la crittografia

Ricezione di payload

  1. 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.
  2. 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.
  • L'app A256GCM, A128GCM, A128CBC-HS256 oppure A256CBC-HS512 per la crittografia dei contenuti.
    • Compilato nell'intestazione enc.
  • 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.
  • 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.