Chiffrement de bout en bout

Présentation de HPKE

Le chiffrement hybride à clé publique (HPKE, Hybrid Public Key Encryption) est un mécanisme cryptographique utilisé pour chiffrer une charge utile à l'aide d'une clé publique. Il est qualifié d'hybride, car la charge utile elle-même est chiffrée avec une clé symétrique, et HPKE dérive cette clé symétrique à l'aide d'un échange de clés Diffie-Hellman.

Modes HPKE

  • Base : mode le plus courant.
  • Auth : utilise la clé privée de l'expéditeur pour l'authentification.
  • PSK : utilise une clé prépartagée à forte entropie pour l'authentification.
  • AuthPSK : combine la clé privée de l'expéditeur et une clé pré-partagée à forte entropie pour l'authentification.

Interaction en mode de base (appareil et autorité émettrice)

Voici un flux de haut niveau décrivant un scénario dans lequel un appareil souhaite envoyer des données sensibles à une autorité émettrice.

Étape 1 : Génération et échange de clés

  • L'autorité émettrice crée une paire de clés de chiffrement : IE₍ₚₖ, ₛₖ₎, où ₚₖ est la clé publique et ₛₖ est la clé privée.
  • L'autorité émettrice envoie et partage la clé publique (IEₚₖ) avec l'appareil.

Étape 2 : Chiffrer et envoyer

L'appareil exécute Hybrid-Encrypt(Data, IEₚₖ, Context).

  • L'appareil génère une paire de clés asymétriques éphémères pour le chiffrement : ₍Eₚₖ, Eₛₖ₎.
  • Il dérive une clé AES symétrique, appelée secret partagé (SS), à l'aide de la formule suivante : SS = ExtractAndExpand(Diffie-Hellman(IEₚₖ, Eₛₖ), _Context).
  • L'appareil chiffre les données à l'aide de cette clé secrète partagée pour produire encData.
  • Il partage { encData, Eₚₖ } et l'envoie à l'autorité émettrice.

Étape 3 : Décrypter

L'autorité émettrice détient actuellement IE₍ₚₖ, ₛₖ₎ et a reçu { encData, Eₚₖ }. Il exécute Hybrid-Decrypt(encData, Eₚₖ, IEₛₖ, Context).

  • Elle dérive la clé AES symétrique (clé secrète partagée, SS) à l'aide de la formule suivante : SS = ExtractAndExpand(Diffie-Hellman(IEₛₖ, Eₚₖ), _Context).
  • Il décrypte encData à l'aide du SS.

Terminologie

Terme Définition et détails
DIₚₖ Chaîne de certificat de la clé d'identification (certificats d'identité de l'appareil) : chaîne de certificat X.509 pour la CredentialKey qui identifie l'identifiant auprès de l'autorité émettrice.
  • Contient une extension d'attestation Android Keystore décrivant la clé et son matériel de sécurité.
  • Permet de prouver que vous êtes le propriétaire de l'identifiant.
  • L'émetteur DOIT examiner attentivement cette chaîne de certificats (par exemple, en vérifiant que le certificat racine est bien connu, la présence de Tag::IDENTITY_CREDENTIAL_KEY, la présence d'un défi, le Tag::ATTESTATION_APPLICATION_ID correct, le démarrage sécurisé activé et l'état de la signature/de la révocation).
Aₚₖ Clés d'authentification : clés d'authentification X.509 dynamiques nécessitant une certification, chacune signée par CredentialKey.
  • L'émetteur génère des données d'authentification statiques pour chaque clé, les envoie à l'appareil, et l'appareil les stocke via storeStaticAuthenticationData.
  • Cette clé est une charge utile qui sera chiffrée, et non utilisée directement pour le chiffrement de bout en bout.
  • Les champs X.509 non facultatifs incluent : version (INTEGER 2), serialNumber (INTEGER 1), signature (ECDSA), subject (CN défini sur "Android Identity Credential Authentication Key"), issuer (CN défini sur "Android Identity Credential Key"), validity (heure actuelle à 365 jours dans le futur) et subjectPublicKeyInfo (doit contenir la clé publique attestée).
IE₍ₛₖ,ₚₖ₎ Paire de clés de chiffrement de l'émetteur : clé asymétrique générée par l'émetteur. L'appareil utilise cette clé pour effectuer un chiffrement hybride à destination de l'émetteur.
II₍ₛₖ,ₚₖ₎ Paire de clés d'identité de l'émetteur : clé asymétrique générée par l'émetteur. L'appareil utilise cette clé pour valider l'identité de l'émetteur.
DE₍ₛₖ,ₚₖ₎ Paire de clés de chiffrement de l'appareil : clé asymétrique éphémère générée par l'appareil pour chaque requête. L'émetteur utilise cette clé pour effectuer un chiffrement hybride à destination de l'appareil.
FE₍ₛₖ,ₚₖ₎ Clé de chiffrement de champ : clé asymétrique éphémère générée par champ lors du chiffrement hybride.

Chiffrement de bout en bout dans l'API Google Digital Credential Provisioning

Étape 1 : Obtenez la clé d'identité de l'émetteur et la clé de chiffrement

  • Points de terminaison de l'API : /getIdentityKey, /getHybridEncryptionKey.
  • Renvoie : IIₚₖ, IEₚₖ.

Étape 2 : Obtenir le nonce d'enregistrement de l'appareil

  • Générez un ID de référence de l'appareil (deviceReferenceId).
  • Point de terminaison de l'API : appelez /getDeviceRegistrationNonce(deviceReferenceId).
  • Renvoie : nonce.

Étape 3 : Enregistrer l'appareil

  • Configurez les identifiants Android Identity.
  • Appelez IC.getCredentialKeyCertificateChain(nonce), qui renvoie un DIₚₖ intégré à un nonce.
  • Point de terminaison de l'API : appelez /registerDevice(deviceReferenceId, DIₚₖ).
  • L'autorité émettrice doit examiner attentivement cette chaîne de certificats pour s'assurer que le certificat racine est bien connu, que le défi est présent, que ATTESTATION_APPLICATION_ID correspond à l'application attendue, que le démarrage sécurisé est activé et que les signatures ou les révocations sont valides.
  • Renvoie : ack.

Étape 4a : Envoyez une demande de vérification

  • Pour chaque champ :
    • Exécutez Hybrid-Encrypt(Data, IEₚₖ, Context=FieldName) pour générer encData et FEₚₖ.
    • Appelez IC.proveOwnership(SHA-256(Data + IEₚₖ)) pour obtenir sigData (une structure de données COSE_Sign1 signée par CredentialKey, avec la charge utile définie sur ProofofOwnership).
  • Point de terminaison de l'API : appelez /proofUser([encData, sigData, FEₚₖ]).
  • L'autorité émettrice vérifie sigData à l'aide de DIₚₖ.
  • L'autorité émettrice exécute Hybrid-Decrypt(encData, FEₚₖ, IEₛₖ, Context=FieldName) pour générer Data.
  • Renvoie : ack.

Étape 4b : Mise à jour de l'état de l'épreuve

  • Informez Google d'une mise à jour de l'état de la demande de confirmation d'identité à l'aide de deviceReferenceId et proofingId.
  • Point de terminaison de l'API : appelez /notifyProofingStatusUpdateAvailable(...).
  • Les serveurs Google récupèrent l'état de la confirmation d'identité auprès de l'émetteur en appelant /getProofingStatus(deviceReferenceId, proofingId).

Étape 5 : Provisionner les identifiants

  • Appelez IC.proveOwnership(SHA-256(DEₚₖ)) pour obtenir sigDEₚₖ (structure COSE_Sign1 signée par CredentialKey/DIₛₖ avec la charge utile ProofofOwnership).
  • Point de terminaison de l'API : envoyez deviceReferenceId, proofingId, credentialId et sigDEₚₖ à l'émetteur via /provisionCredential(dRId, pId, cId, DEₚₖ, sigDEₚₖ).
  • Côté émetteur :
    • Validez sigDEₚₖ avec DIₚₖ.
    • Chiffrez les identifiants (PersonalizationData + AccessControlProfiles).
    • Exécutez Hybrid-Encrypt(Cred, DEₚₖ, Context=FieldName) pour générer encCred et FEₚₖ.
    • Créez sigCred en signant COSE_Sign1 SHA-256(Cred + DEₚₖ) avec IIₛₖ.
    • Renvoyer encCred, sigCred, FEₚₖ.
  • Côté appareil :
    • Validez sigCred à l'aide de IIₚₖ.
    • Exécutez Hybrid-Decrypt(encCred, FEₚₖ, DEₛₖ, Context=FieldName) pour extraire Cred.
    • Appelez WC.personalize(Cred) pour obtenir sigCredReceipt (COSE_Sign1 signé par CredentialKey, charge utile ProofOfProvisioning).
    • Exécutez Hybrid-Encrypt(sigCredReceipt, DEₛₖ, Context=FieldName) en générant encReceipt et FE1ₚₖ.
    • Appelez IC.proveOwnership(SHA-256(encReceipt + IEₚₖ)) pour obtenir sigReceipt (COSE_Sign1 signé par CredentialKey, charge utile ProofofOwnership).
    • Générez des clés d'authentification [Aₚₖ].

Étape 6 : Générez MSO et StaticAuthData

  • Côté appareil :
    • Pour chaque clé d'authentification : exécutez Hybrid-Encrypt(AuthKey, IEₚₖ, Context=FieldName) pour générer encAuthKey et FEₚₖ.
    • Appelez IC.proveOwnership(SHA-256(AuthKey + IEₚₖ)) pour obtenir sigAuthKey.
    • Point de terminaison de l'API : appelez /provisionMSOs(.., encReceipt, sigReceipt, [encAuthKey, sigAuthKey, FEₚₖ], DEₚₖ, sigDEₚₖ).
  • Côté émetteur :
    • Vérifiez que sigReceipt et sigDEₚₖ correspondent à DIₚₖ pour confirmer la réception.
    • Pour chaque [encAuthKey, sigAuthKey, FEₚₖ] : exécutez Hybrid-Decrypt(encAuthKey, FEₚₖ, IEₛₖ, Context=FieldName) pour extraire le AuthKey.
    • Générez le MSO (y compris AuthKey) et les staticAuthData (SAD), y compris digestIdMapping et issuerAuth.
    • Exécutez Hybrid-Encrypt(SAD, DEₚₖ, Context=FieldName) pour générer encSAD et FEₚₖ.
    • Signez à l'aide de COSE_Sign1 SHA-256(SAD + DEₚₖ) avec IIₛₖ pour générer sigSAD.
    • Renvoyez [encSAD, sigSAD, FEₚₖ].
  • Côté appareil (final) :
    • Pour chaque encSAD, sigSAD, FEₚₖ renvoyé : validez sigSAD avec IIₚₖ.
    • Exécutez Hybrid-Decrypt(encSAD, FEₚₖ, DEₛₖ, Context=FieldName) pour extraire SAD.
    • Appelez le storeStaticAuthenticationData avec SAD pour terminer le processus.

Exigences concernant la rotation

L'émetteur doit changer de clé d'identité une fois par an. Au cours de la période de rotation, l'émetteur doit héberger l'ancienne et la nouvelle clé, et l'appareil se fiera à ces deux clés. Une fois que l'émetteur est complètement passé à la nouvelle clé d'identité, il doit cesser d'héberger l'ancienne clé, à laquelle l'appareil ne fera plus confiance.

L'émetteur doit changer de clé de chiffrement hybride tous les trois mois. Pendant la période de rotation, l'émetteur doit commencer à héberger uniquement la nouvelle clé, et l'appareil lancera alors le chiffrement pour cette clé. L'émetteur doit accepter le déchiffrement à l'aide de l'ancienne et de la nouvelle clé pendant une période raisonnable, afin d'éviter les temps d'arrêt.

Valeurs AAD

Utilisez les valeurs de contexte suivantes pour AAD.

Champs Valeurs de contexte
preAuthorizationCode PreAuthorizationCode

Pour les valeurs AAD des autres types de preuves, contactez votre représentant Google.

Vecteurs de test pour le chiffrement de bout en bout des identifiants numériques

Les vecteurs de test pour le chiffrement de bout en bout de l'identité numérique sont un ensemble de messages prédéfinis accompagnés de leur version chiffrée, utilisés pour tester l'exactitude de l'algorithme de chiffrement.

Paramètres de chiffrement HPKE :

  KEM = DHKEM(P-256, HKDF-SHA256), id = 0x0010
  KDF = HKDF-SHA256, id = 0x0001
  AEAD = AES-256-GCM, id = 0x0002
  • Additional Associate Data (AAD) est une entrée pour HPKE CtxInfo, AAD est nul (vide) pour le chiffrement AES (symétrique).
  • Les données binaires dans les structures JSON sont encodées en base64, les valeurs intermédiaires dans ce document sont encodées en hexadécimal.
  • Format de signature dans cette documentation :
    • Appareil → Émetteur, Émetteur → Appareil : COSE_Sign1

Client → Émetteur, Émetteur → Client

Exemple de communication dans les deux sens.

Exemple de champ de requête chiffré

Texte brut = "Hello, world!", données associées = "field1"

{
  "field1": {
    "encryptedValue": "yGFWT9MkgV6/IZfYUZjqGEf3k2M/HQhz9XnKWyI\u003d",
    "encapsulatedKey": "BOpBC2LGh1RWk99iIm6ISsaPbtrNnu9hIgHeby5khXY6PG+ZmDOYmorEUne7uzhDmD6JCVYyME1+A8ueJ0CZvAI\u003d",
    "signature": "hEOhASagWE+EcFByb29mT2ZPd25lcnNoaXB4GG9yZy5pc28uMTgwMTMtNS4yMDE5Lm1kbFggTOsHXzsgDgh/2chekltve8rJsFFb6DTtBjY98H58gjb0WEBUnwNT3gvbavE8QoaAKaELqF7JKqh0+ivPisQg6RerTmx8Zsk/tCjW/y1cxhGKatl2EjASemns67r1/lZumEqZ",
    "recipientKeyId": "4D7E5D8B9460810A"
  }
}

Analyse approfondie :

>> plaintext = "Hello, world!"
48656C6C6F2C20776F726C6421

>> associated-data = "field1"
6669656C6431

## AES key = 
2831F07355FEAB3A8654EADEEC2E2D497B9FD3C76CB8B5E776DB03583F302332

## AES initialization vector = 
64620929032C85B352156528

## AES associated data (empty) = 

>> encrypted-value = HPKE(plaintext, associated-data)
C861564FD324815EBF2197D85198EA1847F793633F1D0873F579CA5B22

>> encapsulated-key (ephemeral) =
04EA410B62C687545693DF62226E884AC68F6EDACD9EEF612201DE6F2E648576
3A3C6F999833989A8AC45277BBBB3843983E89095632304D7E03CB9E274099BC
02

>> tbs-data = plaintext || issuer-encryption-key
48656C6C6F2C20776F726C6421044F1FC726AFFFC32EAA1275B5B49D67018ADE
7D8599DE53FE049996C0EC45D26EA3375BF467B631CF8AB0F284E4B628E287C8
99107465529DCA93DCF5F7A7EA5F

>> sha-256(tbs-data)
4CEB075F3B200E087FD9C85E925B6F7BCAC9B0515BE834ED06363DF07E7C8236

>> proof-of-ownership (cbor array)
847050726F6F664F664F776E65727368697078186F72672E69736F2E31383031
332D352E323031392E6D646C58204CEB075F3B200E087FD9C85E925B6F7BCAC9
B0515BE834ED06363DF07E7C8236F4

>> signature (cose_sign1)
8443A10126A0584F847050726F6F664F664F776E65727368697078186F72672E
69736F2E31383031332D352E323031392E6D646C58204CEB075F3B200E087FD9
C85E925B6F7BCAC9B0515BE834ED06363DF07E7C8236F45840549F0353DE0BDB
6AF13C42868029A10BA85EC92AA874FA2BCF8AC420E917AB4E6C7C66C93FB428
D6FF2D5CC6118A6AD9761230127A69ECEBBAF5FE566E984A99

Exemple de clé de chiffrement de l'émetteur ou de l'appareil

{
  "deviceEncryptionKey": {
    "publicKey": "BP5vgzZ+UTozzb6cmaZ8tkof2nh2Q2oHVAsggvc8V8SR6C9wWU6W9JEq0AmsGbou3jYw4BLftJP2XQeCB3uD/to\u003d",
    "signature": "hEOhASagWE+EcFByb29mT2ZPd25lcnNoaXB4GG9yZy5pc28uMTgwMTMtNS4yMDE5Lm1kbFgg7641tE2UhuT5Tw9p1u9yEDpyYzDf1Jf9m//mIQfd4Kf0WEBB7PvHbfWozCYlFUqMJ6x+QWzoUU/OT10F1J1zoB8MTELPqfC9acF6IX5oMmsgLn2RtPS7QfylRqEAfG0FyYli",
    "keyIdentifier": "F29BA6298BC93156D2D50EA7E2233FC4"
  }
}

Analyse approfondie :

>> ec-point
04FE6F83367E513A33CDBE9C99A67CB64A1FDA7876436A07540B2082F73C57C4
91E82F70594E96F4912AD009AC19BA2EDE3630E012DFB493F65D0782077B83FE
DA

>> sha-256(ec-point)
EFAE35B44D9486E4F94F0F69D6EF72103A726330DFD497FD9BFFE62107DDE0A7

>> proof-of-ownership (cbor array)
847050726F6F664F664F776E65727368697078186F72672E69736F2E31383031
332D352E323031392E6D646C5820EFAE35B44D9486E4F94F0F69D6EF72103A72
6330DFD497FD9BFFE62107DDE0A7F4

>> signature (cose_sign1)
8443A10126A0584F847050726F6F664F664F776E65727368697078186F72672E
69736F2E31383031332D352E323031392E6D646C5820EFAE35B44D9486E4F94F
0F69D6EF72103A726330DFD497FD9BFFE62107DDE0A7F4584041ECFBC76DF5A8
CC2625154A8C27AC7E416CE8514FCE4F5D05D49D73A01F0C4C42CFA9F0BD69C1
7A217E68326B202E7D91B4F4BB41FCA546A1007C6D05C98962

Clés de test et certificats

Vous pouvez vous référer aux clés de test suivantes lors de l'implémentation.

Test de la clé d'identité (de signature) de l'émetteur

  • Clé privée

    -----BEGIN PRIVATE KEY-----
    MEECAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEJzAlAgEBBCBSDJqogkjkqD7O8mX5
    FcUvwOxFp0CxPOGnMD8BfSbcyw==
    -----END PRIVATE KEY-----

  • Certificat de clé publique

    -----BEGIN CERTIFICATE-----
    MIIBkDCCATegAwIBAgIIIi7oI6UIMEYwCgYIKoZIzj0EAwIwNzE1MDMGA1UEAxMs
    Ly9leHBlcmltZW50YWwvdXNlcnMvaWdhcmlldi9jcnlwdG86U2lnbkNlcnQwHhcN
    MjIxMjEyMjAyNDA0WhcNMjMxMjEyMjAyNDA0WjBSMQ8wDQYDVQQLEwZXYWxsZXQx
    DzANBgNVBAoTBkdvb2dsZTEuMCwGA1UEAxMlVEVTVCBEQVRBIElzc3VlciBJZGVu
    dGl0eSAoU2lnbmF0dXJlKTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHV9uYlT
    wGV3UB+SM62fXcW6QzFfSoxq2gU34xG+XVMjxk9JDP9UTE34zX72WIfZ9nqRN9y/
    SsbSxw5WrSQdGY2jEjAQMA4GA1UdDwEB/wQEAwIHgDAKBggqhkjOPQQDAgNHADBE
    AiBnMgsyJhdfelqpOFvT4H63dWSrNPxyrKEdxTwbYMfCKQIgOh2n2gCETH07tjxR
    l9HQfUcb6vqQY4EoPz2O0wNs6yc=
    -----END CERTIFICATE-----

Clé de chiffrement de l'émetteur de test

  • Clé privée

    -----BEGIN PRIVATE KEY-----
    MEECAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEJzAlAgEBBCDZMUnwmygUdKXSujXS
    ye7YbVnk1Zy/qwnQtzlZs3pQFQ==
    -----END PRIVATE KEY-----

  • Certificat de clé publique

    -----BEGIN CERTIFICATE-----
    MIIBpjCCAUygAwIBAgIIIVwLEOrrzm0wCgYIKoZIzj0EAwIwNzE1MDMGA1UEAxMs
    Ly9leHBlcmltZW50YWwvdXNlcnMvaWdhcmlldi9jcnlwdG86U2lnbkNlcnQwHhcN
    MjIxMjIyMjA1NzIzWhcNMjMxMjIyMjA1NzIzWjBIMQ8wDQYDVQQLEwZXYWxsZXQx
    DzANBgNVBAoTBkdvb2dsZTEkMCIGA1UEAxMbVEVTVCBEQVRBIElzc3VlciBFbmNy
    eXB0aW9uMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAETx/HJq//wy6qEnW1tJ1n
    AYrefYWZ3lP+BJmWwOxF0m6jN1v0Z7Yxz4qw8oTktijih8iZEHRlUp3Kk9z196fq
    X6MxMC8wDgYDVR0PAQH/BAQDAgMYMB0GA1UdDgQWBBQKFb7K4eZjtp70DLoCHWe7
    v/toXzAKBggqhkjOPQQDAgNIADBFAiEAwN1gOwiSx3999Zxc980eKv3p2H8kA4J6
    9aWH6jiVaGMCIA7lLkebHFhD0fItGqXv1f5fwiMBV0605KZFh5+RBj/W
    -----END CERTIFICATE-----

Clé d'identité (de signature) de l'appareil, alias clé d'identification

  • Chaîne de certificats de clé publique (X.509)
    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

Pour en savoir plus, consultez la documentation sur l'attestation de clé d'Android.

Clé de chiffrement de l'appareil

  • Clé privée

    -----BEGIN PRIVATE KEY-----
    MEECAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEJzAlAgEBBCBJY8n7A1v+thMM63np
    m0wr+rAoMFEYmMZ+mWzBIj2CiQ==
    -----END PRIVATE KEY-----

  • Certificat de clé publique

    -----BEGIN CERTIFICATE-----
    MIIBhzCCAS2gAwIBAgIIAyJ+NkzueMUwCgYIKoZIzj0EAwIwNzE1MDMGA1UEAxMs
    Ly9leHBlcmltZW50YWwvdXNlcnMvaWdhcmlldi9jcnlwdG86U2lnbkNlcnQwHhcN
    MjMwMTA5MjMwOTIwWhcNMjQwMTA5MjMwOTIwWjBIMQ8wDQYDVQQLEwZXYWxsZXQx
    DzANBgNVBAoTBkdvb2dsZTEkMCIGA1UEAxMbVEVTVCBEQVRBIERldmljZSBFbmNy
    eXB0aW9uMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/m+DNn5ROjPNvpyZpny2
    Sh/aeHZDagdUCyCC9zxXxJHoL3BZTpb0kSrQCawZui7eNjDgEt+0k/ZdB4IHe4P+
    2qMSMBAwDgYDVR0PAQH/BAQDAgMYMAoGCCqGSM49BAMCA0gAMEUCIQD9syewRhvK
    KcyaM7fLwuuCidpiIVd/CZxFCLOo9adCPAIgNd3FMcT710KtYptJBZQ/i7N+C7G5
    pLbHmAUoFwNuB2E=
    -----END CERTIFICATE-----