View a markdown version of this page

Chiffrement au repos - Wickr AWS

Ce guide décrit la nouvelle console d'administration AWS Wickr, publiée le 13 mars 2025. Pour obtenir de la documentation sur la version classique de la console d'administration AWS Wickr, consultez le Guide d'administration classique.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Chiffrement au repos

Le service de conservation des données AWS Wickr chiffre de manière transparente tous les messages et pièces jointes conservés au repos par défaut. Vous n'avez pas besoin d'effectuer de configuration supplémentaire pour vous assurer que vos données sont chiffrées au repos. Le service de conservation des données applique le chiffrement côté serveur à toutes les données clients stockées dans Amazon S3.

Le service de conservation des données chiffre les données clients au repos à l'aide d'une clé KMS gérée par le client (CMK). Lorsque vous déployez le service de conservation des données via AWS Service Catalog, une clé CMK symétrique est automatiquement créée dans votre compte et configurée comme clé de chiffrement par défaut pour toutes les données conservées. Vous conservez le contrôle total de cette clé, y compris la possibilité d'auditer l'utilisation, de faire pivoter la clé et de révoquer l'accès.

Chiffrement des données au repos à l'aide de clés KMS gérées par le client pour la conservation des données

Comment le service de conservation des données utilise une clé KMS gérée par le client

Lorsque le service de conservation des données est déployé, une clé KMS symétrique gérée par le client (RetentionKey) est créée dans votre AWS compte. Cette clé est utilisée pour chiffrer les ressources suivantes :

  • Messages conservés — Tous les messages Wickr (texte, réactions et autres) capturés par le bot de conservation des données sont chiffrés avec la clé CMK avant d'être stockés dans votre compartiment S3. Les messages sont chiffrés dans une Nitro Enclave à l'aide du SDK de AWS chiffrement, puis téléchargés sur Amazon S3 à SSE-KMS l'aide de la même clé CMK.

  • Pièces jointes conservées — Les pièces jointes associées aux messages sont déchiffrées à partir du chiffrement de bout en bout de Wickr au sein de l'Enclave Nitro, rechiffrées avec le CMK et stockées dans Amazon S3 avec. SSE-KMS

  • État du compte chiffré : les clés privées cryptographiques et l'état du compte du bot de conservation des données sont chiffrés avec la clé CMK et stockés dans DynamoDB. Le déchiffrement de cet état nécessite une attestation Nitro Enclave.

  • Chiffrement par défaut du compartiment S3 : le compartiment S3 de rétention est configuré en SSE-KMS utilisant le CMK comme clé de chiffrement par défaut. Une politique de compartiment impose que tous les objets doivent être téléchargés avec un chiffrement aws:kms côté serveur.

  • Compartiment de sortie déchiffré — Lorsque les clients déclenchent le déchiffrement à la demande (via la machine d'état Step Functions), la sortie déchiffrée est également stockée dans un compartiment S3 distinct crypté avec la même clé CMK.

Cross-account architecture des rôles

Le service de conservation des données fonctionne sur un Wickr-managed AWS compte et accède aux ressources des clients via un rôle IAM multicompte (). DRSCustomerCrossAccountRole-{networkId}-{region} Le rôle Wickr DRS Enclave assume ce rôle côté client en utilisant AWS STS un ID externe (wickr-drs-{networkId}) pour effectuer des opérations KMS et S3.

Attestation Nitro Enclave

kms:DecryptLes appels directs (en dehors de S3 SSE-KMS) nécessitent une attestation Nitro Enclave. La politique des clés KMS impose que les kms:RecipientAttestation:PCR2 conditions et kms:RecipientAttestation:PCR0kms:RecipientAttestation:PCR1, soient présentes, garantissant que le déchiffrement des données sensibles (état du compte, contenu du message) ne peut avoir lieu qu'à l'intérieur de l'enclave vérifiée. Cela empêche tout opérateur, y compris Wickr, de déchiffrer les données des clients en dehors de l'enclave.

AWS Nitro Enclaves traite les messages à l'aide de votre clé KMS pour déchiffrer les clés privées du module de conservation des données, déchiffrer le contenu du Wickr-encrypted message et le rechiffrer avec une clé de données unique par message avant de le stocker dans votre compartiment S3.

Configuration des clés KMS gérées par le client dans le service de rétention des données

Le service de conservation des données prend en charge les clés KMS symétriques avec leur utilisation ENCRYPT_DECRYPT et leurs spécificationsSYMMETRIC_DEFAULT. La rotation automatique des clés est activée par défaut lorsque la clé est créée via Service Catalog.

En outre, une deuxième clé KMS asymétrique (ECC_NIST_P384, KEY_AGREEMENT) est créée pour le flux de travail de récupération du mot de passe. Cette clé est utilisée pour l'accord de clé de l'ECDH et ne peut pas être utilisée à des fins générales encryption/decryption. Cette clé est éventuellement utilisée pour les clients qui migrent depuis une architecture basée sur Docker Data Retention Bot.

Note

Multi-region les clés ne sont pas prises en charge actuellement. La clé KMS doit se trouver dans la même région que le compartiment S3 et le déploiement du service de rétention des données.

Configuration des autorisations pour utiliser une clé KMS gérée par le client

La politique clé suivante est automatiquement configurée lors du déploiement via Service Catalog. Si vous devez configurer manuellement une clé, appliquez la politique de moindre privilège suivante :

{ "Version": "2012-10-17", "Statement": [ { "Sid": "YourExistingStatements", "Effect": "...", "...": "..." }, { "Sid": "EnclaveGenerateDataKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{customer-account-id}:role/DRSCustomerCrossAccountRole-{networkId}-{region}" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringLike": { "kms:RecipientAttestation:PCR0": "*", "kms:RecipientAttestation:PCR1": "*", "kms:RecipientAttestation:PCR2": "*" }, "ForAnyValue:StringEquals": { "kms:EncryptionContextKeys": [ "aws:wickr:network:id", "aws:wickr:app:id" ] } } }, { "Sid": "EnclaveDescribeKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{customer-account-id}:role/DRSCustomerCrossAccountRole-{networkId}-{region}" }, "Action": "kms:DescribeKey", "Resource": "*" }, { "Sid": "EnclaveDecryptWithAttestation", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{customer-account-id}:role/DRSCustomerCrossAccountRole-{networkId}-{region}" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringLike": { "kms:RecipientAttestation:PCR0": "*", "kms:RecipientAttestation:PCR1": "*", "kms:RecipientAttestation:PCR2": "*" }, "ForAnyValue:StringEquals": { "kms:EncryptionContextKeys": "aws:wickr:app:id" } } }, { "Sid": "DRSDecryptionLambda", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{customer-account-id}:role/{DecryptionLambdaRoleName}" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContextKeys": "aws:wickr:network:id" } } } ] }

Objectif de chaque déclaration :

Activer les politiques IAM

Permet à l'utilisateur root de votre compte de gérer la clé. Il s'agit de la déclaration standard de l'administrateur clé.

EnclaveGenerateDataKey

kms:GenerateDataKey— Invoqué par la Nitro Enclave pour générer des clés de chiffrement des données afin de chiffrer le contenu des messages et l'état du compte avant de les stocker dans S3. Autorisé uniquement lorsque l'enclave fournit un document d'attestation Nitro Enclave valide (PCR0/1/2conditions) et qu'une clé de contexte de chiffrement de type aws:wickr:network:id ou aws:wickr:app:id est présente.

EnclaveDescribeKey

kms:DescribeKey— Permet à l'enclave de récupérer les métadonnées clés (spécification des clés, utilisation, état) pour validation lors de l'initialisation.

EnclaveDecryptWithAttestation

kms:Decrypt— Invoqué par la Nitro Enclave pour déchiffrer l'état du compte (clés privées) nécessaire au déchiffrement des messages Wickr. Cela n'est autorisé que lorsque l'enclave fournit un document d'attestation Nitro Enclave valide (PCR0/1/2 conditions) et que la clé de contexte de chiffrement aws:wickr:app:id est présente, garantissant ainsi que le déchiffrement ne peut pas avoir lieu en dehors de l'enclave.

DRSDecryptionLambda

kms:Decrypt— Invoqué par le Lambda de déchiffrement à la demande pour déchiffrer les messages conservés lorsque vous déclenchez la machine à états de déchiffrement. Ce rôle n'est pas accessible par le service Wickr et existe uniquement pour que vous puissiez déchiffrer vos propres messages à partir du compartiment S3 chiffré.

Si une migration est requise depuis une installation de conservation des données précédente, vous devez fournir le mot de passe de votre Docker-bot module au service pour que la conservation des données sans serveur puisse être activée. Pour plus d'informations, voirInstructions pour récupérer le mot de passe. Pour plus de détails sur la politique requise pour votre clé de récupération de mot de passe, consultezConfiguration personnalisée de la clé KMS pour le service de conservation des données.

Si vous devez configurer manuellement la clé KMS, consultez la politique Configuration personnalisée de la clé KMS pour le service de conservation des données la moins permissive pour votre clé.

Création d'un nouveau déploiement de conservation des données avec une clé KMS gérée par le client

Le service de conservation des données est déployé via AWS Service Catalog. Lorsque vous lancez le WickrDataRetentionProduct produit, le CloudFormation modèle :

  1. Crée une clé CMK symétrique avec un alias wickr-drs-{networkId}-{region}-{suffix}-key

  2. Crée une clé CMK asymétrique (ECC P-384) pour récupérer le mot de passe avec un alias wickr-drs-{networkId}-{region}-{suffix}-password-recovery-key

  3. Crée un compartiment S3 avec un chiffrement SSE-KMS par défaut à l'aide de la clé CMK symétrique

  4. Crée le DRSCustomerCrossAccountRole avec les autorisations KMS appropriées

  5. Enregistre la clé KMS (ARN) et le compartiment S3 auprès de l'API d'administration Wickr via une ressource personnalisée Lambda.

L'ARN de la clé KMS est également enregistré via le point de terminaison du SDK Wickr Admin :

PUT /networks/{networkId}/serverless-resources { "s3BucketName": "wickr-drs-{networkId}-{region}-{suffix}", "kmsKeyArn": "arn:aws:kms:{region}:{accountId}:key/{keyId}", "passwordRecoveryKmsKeyArn": "arn:aws:kms:{region}:{accountId}:key/{keyId}" }

Le kmsKeyArn paramètre doit être un ARN de clé KMS valide. L'API valide le format ARN avant de le stocker.

Modification de la configuration de chiffrement sur un déploiement existant

Le service de conservation des données ne prend actuellement pas en charge la modification de la clé CMK après le déploiement. La clé KMS est étroitement associée à :

  • Configuration de chiffrement par défaut du compartiment S3

  • État du compte chiffré stocké dans DynamoDB

  • La politique clé concernant les conditions d'attestation de Nitro Enclave

Pour modifier la clé de chiffrement, vous devez :

  1. Déployez une nouvelle instance du service de conservation des données avec une nouvelle clé KMS.

  2. Les messages précédemment conservés chiffrés avec l'ancienne clé restent accessibles uniquement avec la clé d'origine.

Important

Ne désactivez ni ne supprimez la clé KMS d'origine tant que des messages chiffrés existent dans le compartiment de rétention. Cela rendra ces messages irrémédiablement irrécupérables.

Délimitation de l'accès à la clé KMS gérée par le client

Attestation Nitro Enclave (contrôle d'accès principal)

Le principal mécanisme permettant de délimiter l'accès au CMK est l'attestation Nitro Enclave. La politique clé exige kms:RecipientAttestation:PCR0 et PCR2 conditionne les kms:Decrypt appels directs. PCR1 Cela garantit :

  • Seul le binaire d'enclave Wickr DRS vérifié peut déchiffrer les données sensibles.

  • Même le rôle multicompte ne peut pas déchiffrer les données en dehors de l'enclave.

  • CloudTrail les journaux incluent les valeurs PCR réelles pour l'audit.

Protection adjointe confuse

Le rôle multi-comptes utilise un identifiant externe (wickr-drs-{networkId}) dans l'AssumeRoleappel STS. Cela permet d'éviter les attaques secondaires confuses dans lesquelles un autre service pourrait tenter d'utiliser le rôle d'enclave Wickr DRS pour accéder à vos ressources.

km : ViaService état

Les opérations de SSE-KMS déchiffrement S3 sont définies à l'aide de cette condition. kms:ViaService Cela garantit que S3-mediated le déchiffrement n'est autorisé que lorsque la demande passe par le service S3.

Contexte de chiffrement

S3 inclut SSE-KMS automatiquement l'ARN de l'objet S3 comme contexte de chiffrement. La politique des clés utilise ce contexte de chiffrement pour étendre les autorisations de déchiffrement S3 à des préfixes spécifiques (par exemple, le préfixe de l'outil de mot de passe).

Surveillance de l'interaction du service de conservation des données avec AWS KMS

Vous pouvez surveiller tous les appels d'API KMS effectués par le service de conservation des données à l'aide de CloudTrail. Pour rechercher des entrées de CloudTrail journal, utilisez la CloudTrail console ou l' CloudTrail LookupEventsopération.

Les champs CloudTrail d'événements suivants peuvent être utilisés pour vérifier l'utilisation du KMS par le service de conservation des données :

Champ Valeur attendue
eventName Encrypt, Decrypt, GenerateDataKey
userIdentity.arn arn:aws:sts::{customerAccountId}:assumed-role/DRSCustomerCrossAccountRole-{networkId}-{region} ou drs-create-account ou drs-password-recovery
requestParameters.keyId Votre ARN CMK (par exemple,arn:aws:kms:{region}:{accountId}:key/{keyId})
additionalEventData.recipient.attestationDocument Présent pour les appels de déchiffrement attestés par une enclave (contient des valeurs PCR)
requestParameters.encryptionContext Pour S3 SSE-KMS : {"aws:s3:arn": "arn:aws:s3:::{bucketName}/{objectKey}"}

Principaux événements à surveiller :

  • Chiffrer : se produit lorsque l'enclave chiffre le contenu du message ou l'état du compte avant de le stocker. S3/DynamoDB

  • GenerateDataKey— Se produit lorsque S3 génère une clé de données pour le chiffrement de SSE-KMS l'enveloppe lors du téléchargement d'un objet.

  • Déchiffrer — Survient lorsque l'enclave déchiffre l'état du compte (avec attestation) ou lorsque S3 déchiffre automatiquement les objets lors de leur lecture.

  • DeriveSharedSecret— Se produit sur la clé de récupération du mot de passe lorsque l'enclave exécute l'accord des clés ECDH pendant le flux de récupération du mot de passe.

  • GetPublicKey— Se produit sur la clé de récupération du mot de passe lorsque votre collect.py script récupère la clé publique pour le chiffrement ECDH local.

En outre, le produit Service Catalog crée un CloudWatch tableau de bord (WickrDataRetentionService-{networkId}) qui inclut des widgets pour les indicateurs de réussite clés du KMS (opérations de chiffrement GenerateDataKey, de déchiffrement) et une alarme d'erreur de déchiffrement qui se déclenche lorsque des échecs de déchiffrement sont détectés.