Questo argomento descrive come criptare i dati localmente e caricarli su Cloud Storage con Tink e Cloud Key Management Service (Cloud KMS). Tink è una libreria di crittografia open source scritta da esperti di crittografia e ingegneri della sicurezza di Google.
Panoramica
La crittografia lato client è qualsiasi crittografia eseguita prima dell'invio dei dati al cloud. Quando utilizzi la crittografia lato client, sei responsabile della creazione e della gestione delle chiavi di crittografia e della crittografia dei dati prima di inviarli al cloud.
In questo argomento, implementi la crittografia envelope lato client con Tink utilizzando una chiave di crittografia in Cloud KMS.
Puoi trovare una versione di questo tutorial basata su Terraform nel repository GitHub kms-solutions.
Prima di iniziare
- Crea una chiave di crittografia simmetrica Cloud KMS per la crittografia. Prendi nota dell'URI della chiave. Ti servirà in un secondo momento.
- Installa Tink per l'utilizzo con Cloud KMS.
- Crea un bucket in Cloud Storage per caricare i dati criptati.
Ruoli obbligatori
Per assicurarti che il tuo account di servizio disponga delle autorizzazioni necessarie per utilizzare le chiavi Cloud KMS con Tink, chiedi all'amministratore di concedere al tuo account di servizio il ruolo IAM Autore crittografia/decrittografia CryptoKey Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter
) sulla tua chiave.
L'amministratore potrebbe anche essere in grado di concedere al tuo account di servizio le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Crittografia envelope con Tink
Nella crittografia envelope, la chiave Cloud KMS funge da chiave di crittografia della chiave (KEK). ovvero viene utilizzata per criptare le chiavi di crittografia dei dati (DEK), che a loro volta vengono utilizzate per criptare i dati effettivi.
Dopo aver creato una KEK in Cloud KMS, per criptare ogni messaggio devi:
- Genera una chiave di crittografia dei dati (DEK) in locale.
- Utilizza la DEK localmente per criptare il messaggio.
- Utilizza Cloud KMS per criptare (wrapping) la DEK con la KEK.
- Archivia i dati criptati e la chiave DEK sottoposta a wrapping.
Non è necessario implementare questa procedura di crittografia della busta da zero quando utilizzi Tink.
Per utilizzare Tink per la crittografia envelope, fornisci a Tink un URI chiave e le credenziali. L'URI della chiave punta alla tua KEK in Cloud KMS e le credenziali consentono a Tink di utilizzare la KEK. Tink genera la DEK, cripta i dati, esegue il wrapping della DEK e restituisce un singolo testo cifrato con i dati criptati e la DEK di cui è stato eseguito il wrapping.
Tink supporta la crittografia envelope in Python, Java, C++ e Go utilizzando la primitiva AEAD (Authenticated Encryption with Associated Data).
Collega Tink a Cloud KMS
Per criptare le DEK generate da Tink con la tua KEK in Cloud KMS, devi recuperare l'URI della tua KEK. In Cloud KMS, l'URI KEK ha il seguente formato:
gcp-kms://projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION
Per informazioni dettagliate su come ottenere il percorso della chiave, consulta Recupero di un ID risorsa di Cloud KMS.
Inizializzare Tink e criptare i dati
Tink utilizza primitive, ovvero componenti di base crittografici che gestiscono i dettagli dei relativi algoritmi sottostanti, in modo da poter eseguire le attività in modo sicuro. Ogni primitiva offre un'API che gestisce un'attività specifica. Qui utilizziamo AEAD, quindi utilizziamo la primitiva AEAD di Tink.
Python
Python
Per scoprire come installare e utilizzare la libreria client per Cloud KMS, consulta la pagina Librerie client Cloud KMS.
Per autenticarti in Cloud KMS, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Java
Java
Per scoprire come installare e utilizzare la libreria client per Cloud KMS, consulta la pagina Librerie client Cloud KMS.
Per autenticarti in Cloud KMS, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Per ulteriori informazioni sulle primitive e sulle interfacce supportate da Tink, consulta la pagina Guida introduttiva di Tink.
Passaggi successivi
- Scopri di più su Tink.
- Scopri come utilizzare la crittografia lato client con Cloud SQL.