Crittografia end-to-end

Panoramica di HPKE

Hybrid Public Key Encryption (HPKE) è un meccanismo di crittografia utilizzato per criptare un payload con una chiave pubblica. Viene definito "ibrido" perché il payload stesso è criptato con una chiave simmetrica e HPKE deriva questa chiave simmetrica utilizzando uno scambio di chiavi Diffie-Hellman.

Modalità HPKE

  • Base: la modalità più comune.
  • Auth: utilizza la chiave privata del mittente per l'autenticazione.
  • PSK: utilizza una chiave precondivisa ad alta entropia per l'autenticazione.
  • AuthPSK: combina la chiave privata del mittente e una chiave precondivisa ad alta entropia per l'autenticazione.

Interazione in modalità Base (dispositivo e autorità emittente)

Di seguito è riportato un flusso di alto livello che descrive uno scenario in cui un dispositivo vuole inviare dati sensibili a un'autorità emittente.

Passaggio 1: generazione e scambio di chiavi

  • L'autorità emittente crea una coppia di chiavi di crittografia: IE₍ₚₖ, ₛₖ₎ dove ₚₖ è la chiave pubblica e ₛₖ è la chiave privata.
  • L'autorità emittente invia e condivide la chiave pubblica (IEₚₖ) con il dispositivo.

Passaggio 2: cripta e invia

Il dispositivo esegue Hybrid-Encrypt(Data, IEₚₖ, Context).

  • Il dispositivo genera una coppia di chiavi asimmetriche effimere per la crittografia: ₍Eₚₖ, Eₛₖ₎.
  • Deriva una chiave AES simmetrica, nota come secret condiviso (SS), utilizzando la formula: SS = ExtractAndExpand(Diffie-Hellman(IEₚₖ, Eₛₖ), _Context).
  • Il dispositivo cripta i dati utilizzando questo secret condiviso per produrre encData.
  • Condivide { encData, Eₚₖ } e lo invia all'autorità emittente.

Passaggio 3: decripta

L'autorità emittente attualmente detiene IE₍ₚₖ, ₛₖ₎ e { encData, Eₚₖ } ricevuti. Esegue Hybrid-Decrypt(encData, Eₚₖ, IEₛₖ, Context).

  • Deriva la chiave AES simmetrica (secret condiviso, SS) utilizzando la formula: SS = ExtractAndExpand(Diffie-Hellman(IEₛₖ, Eₚₖ), _Context).
  • Decripta encData utilizzando SS.

Terminologia

Termine Definizione e dettagli
DIₚₖ **Credential Key Certificate Chain (Certificati di identità del dispositivo):** una catena di certificati X.509 per la CredentialKey che identifica la qualifica per l'autorità emittente.
  • Contiene un'estensione di attestazione di Android Keystore che descrive la chiave e il relativo hardware di sicurezza.
  • Utilizzata per dimostrare la proprietà della qualifica.
  • L'emittente DEVE esaminare attentamente questa catena di certificati (ad es. verificando che il certificato radice sia noto, la presenza di Tag::IDENTITY_CREDENTIAL_KEY, la presenza di una sfida, il Tag::ATTESTATION_APPLICATION_ID corretto, l'avvio verificato abilitato e lo stato della firma/revoca).
Aₚₖ Chiavi di autenticazione: chiavi di autenticazione X.509 dinamiche che richiedono la certificazione, ognuna firmata dalla CredentialKey.
  • L'emittente genera dati di autenticazione statici per ogni chiave, li invia al dispositivo e il dispositivo li memorizza tramite storeStaticAuthenticationData.
  • Questa chiave è un payload che verrà criptato, non utilizzato direttamente per la crittografia end-to-end.
  • I campi X.509 non facoltativi includono: versione (INTEGER 2), serialNumber (INTEGER 1), signature (ECDSA), subject (CN impostato su "Android Identity Credential Authentication Key"), issuer (CN impostato su "Android Identity Credential Key"), validity (ora corrente a 365 giorni in futuro) e subjectPublicKeyInfo (deve contenere la chiave pubblica attestata).
IE₍ₛₖ,ₚₖ₎ Coppia di chiavi di crittografia dell'emittente: una chiave asimmetrica generata dall'emittente. Il dispositivo utilizza questa chiave per eseguire la crittografia ibrida per l'emittente.
II₍ₛₖ,ₚₖ₎ Coppia di chiavi di identità dell'emittente: una chiave asimmetrica generata dall'emittente. Il dispositivo utilizza questa chiave per verificare l'identità dell'emittente.
DE₍ₛₖ,ₚₖ₎ Coppia di chiavi di crittografia del dispositivo: una chiave asimmetrica effimera generata dal dispositivo per ogni richiesta. L'emittente utilizza questa chiave per eseguire la crittografia ibrida per il dispositivo.
FE₍ₛₖ,ₚₖ₎ Chiave di crittografia del campo: una chiave asimmetrica effimera generata per ogni campo durante la crittografia ibrida.

Crittografia end-to-end nell'API di provisioning delle qualifiche digitali di Google

Passaggio 1: recupera la chiave di identità e la chiave di crittografia dell'emittente

  • Endpoint API: /getIdentityKey, /getHybridEncryptionKey.
  • Valori restituiti: IIₚₖ, IEₚₖ.

Passaggio 2: recupera il nonce di registrazione del dispositivo

  • Genera un ID di riferimento del dispositivo (deviceReferenceId).
  • Endpoint API: chiama /getDeviceRegistrationNonce(deviceReferenceId).
  • Valore restituito: nonce.

Passaggio 3: registra il dispositivo

  • Configura la qualifica di identità Android.
  • Chiama IC.getCredentialKeyCertificateChain(nonce) che restituisce un DIₚₖ incorporato in un nonce.
  • Endpoint API: chiama /registerDevice(deviceReferenceId, DIₚₖ).
  • L'autorità emittente deve esaminare attentamente questa catena di certificati per assicurarsi che il certificato radice sia noto, che la sfida sia presente, che ATTESTATION_APPLICATION_ID corrisponda all'app prevista, che l'avvio verificato sia abilitato, e che le firme o le revoche siano valide.
  • Valore restituito: ack.

Passaggio 4a: invia la richiesta di verifica dell'identità

  • Per ogni campo:
    • Esegui Hybrid-Encrypt(Data, IEₚₖ, Context=FieldName) per generare encData e FEₚₖ.
    • Chiama IC.proveOwnership(SHA-256(Data + IEₚₖ)) per ottenere sigData (una struttura di dati COSE_Sign1 firmata da CredentialKey, con il payload impostato su ProofofOwnership).
  • Endpoint API: chiama /proofUser([encData, sigData, FEₚₖ]).
  • L'autorità emittente verifica sigData utilizzando DIₚₖ.
  • L'autorità emittente esegue Hybrid-Decrypt(encData, FEₚₖ, IEₛₖ, Context=FieldName) per generare Data.
  • Valore restituito: ack.

Passaggio 4b: aggiorna lo stato della verifica dell'identità

  • Informa Google di un aggiornamento dello stato della verifica dell'identità utilizzando deviceReferenceId e proofingId.
  • Endpoint API: chiama /notifyProofingStatusUpdateAvailable(...).
  • I server di Google recuperano lo stato della verifica dell'identità dall'emittente chiamando /getProofingStatus(deviceReferenceId, proofingId).

Passaggio 5: esegui il provisioning della qualifica

  • Chiama IC.proveOwnership(SHA-256(DEₚₖ)) per ottenere sigDEₚₖ (struttura COSE_Sign1 firmata da CredentialKey/DIₛₖ con payload ProofofOwnership).
  • Endpoint API: invia deviceReferenceId, proofingId, credentialId e sigDEₚₖ all'emittente tramite /provisionCredential(dRId, pId, cId, DEₚₖ, sigDEₚₖ).
  • Lato emittente:
    • Verifica sigDEₚₖ con DIₚₖ.
    • Cripta la qualifica (PersonalizationData + AccessControlProfiles).
    • Esegui Hybrid-Encrypt(Cred, DEₚₖ, Context=FieldName) per generare encCred e FEₚₖ.
    • Crea sigCred firmando COSE_Sign1 SHA-256(Cred + DEₚₖ) con IIₛₖ.
    • Restituisci encCred, sigCred, FEₚₖ.
  • Lato dispositivo:
    • Verifica sigCred utilizzando IIₚₖ.
    • Esegui Hybrid-Decrypt(encCred, FEₚₖ, DEₛₖ, Context=FieldName) per estrarre Cred.
    • Chiama WC.personalize(Cred) per ottenere sigCredReceipt (COSE_Sign1 firmato da CredentialKey, payload ProofOfProvisioning).
    • Esegui Hybrid-Encrypt(sigCredReceipt, DEₛₖ, Context=FieldName) generando encReceipt e FE1ₚₖ.
    • Chiama IC.proveOwnership(SHA-256(encReceipt + IEₚₖ)) per ottenere sigReceipt (COSE_Sign1 firmato da CredentialKey, payload ProofofOwnership).
    • Genera le chiavi di autenticazione [Aₚₖ].

Passaggio 6: genera MSO e StaticAuthData

  • Lato dispositivo:
    • Per ogni chiave di autenticazione: esegui Hybrid-Encrypt(AuthKey, IEₚₖ, Context=FieldName) per generare encAuthKey e FEₚₖ.
    • Chiama IC.proveOwnership(SHA-256(AuthKey + IEₚₖ)) per ottenere sigAuthKey.
    • Endpoint API: chiama /provisionMSOs(.., encReceipt, sigReceipt, [encAuthKey, sigAuthKey, FEₚₖ], DEₚₖ, sigDEₚₖ).
  • Lato emittente:
    • Verifica sigReceipt e sigDEₚₖ rispetto a DIₚₖ per verificare la ricevuta.
    • Per ogni [encAuthKey, sigAuthKey, FEₚₖ]: esegui Hybrid-Decrypt(encAuthKey, FEₚₖ, IEₛₖ, Context=FieldName) per estrarre il AuthKey.
    • Genera l'MSO (inclusa la chiave di autenticazione) e genera staticAuthData (SAD), inclusi digestIdMapping e issuerAuth.
    • Esegui Hybrid-Encrypt(SAD, DEₚₖ, Context=FieldName) per generare encSAD e FEₚₖ.
    • Firma utilizzando COSE_Sign1 SHA-256(SAD + DEₚₖ) con IIₛₖ per produrre sigSAD.
    • Restituisci [encSAD, sigSAD, FEₚₖ].
  • Lato dispositivo (finale):
    • Per ogni encSAD, sigSAD, FEₚₖ restituito: verifica sigSAD con IIₚₖ.
    • Esegui Hybrid-Decrypt(encSAD, FEₚₖ, DEₛₖ, Context=FieldName) per estrarre SAD.
    • Chiama storeStaticAuthenticationData con SAD per completare la procedura.

Requisiti di rotazione

La chiave di identità dell'emittente deve essere ruotata una volta all'anno. Durante il periodo di rotazione , l'emittente deve ospitare la chiave precedente e quella nuova e il dispositivo considererà attendibili entrambe le chiavi. Una volta che l'emittente ha completato il passaggio all'utilizzo della nuova chiave di identità dell'emittente, deve interrompere l'hosting della chiave precedente e il dispositivo non la considererà più attendibile.

La chiave di crittografia ibrida dell'emittente deve essere ruotata una volta ogni 3 mesi. Durante il periodo di rotazione, l'emittente deve iniziare a ospitare solo la nuova chiave e il dispositivo inizierà a criptare con la nuova chiave. L'emittente deve supportare la decrittografia utilizzando sia la chiave precedente che quella nuova per un periodo di tempo ragionevole, per evitare tempi di inattività.

Valori AAD

Utilizza i seguenti valori di contesto per AAD.

Campi Valori di contesto
preAuthorizationCode PreAuthorizationCode

Per i valori AAD di altri tipi di prove, contatta il tuo rappresentante di Google.

Vettori di test per la crittografia end-to-end delle qualifiche digitali

I vettori di test per la crittografia end-to-end dell'identità digitale sono un insieme di messaggi predefiniti e le relative versioni criptate che vengono utilizzati per testare la correttezza dell' algoritmo di crittografia.

Parametri di crittografia HPKE:

  KEM = DHKEM(P-256, HKDF-SHA256), id = 0x0010
  KDF = HKDF-SHA256, id = 0x0001
  AEAD = AES-256-GCM, id = 0x0002
  • I dati associati aggiuntivi (AAD) sono un input di HPKE CtxInfo, AAD per la crittografia AES (simmetrica) è NULL (vuoto).
  • I dati binari nelle strutture JSON sono codificati in Base64, i valori intermedi in questo documento sono codificati in esadecimale.
  • Formato della firma in questa documentazione:
    • Dispositivo → Emittente, Emittente → Dispositivo: COSE_Sign1

Client → Emittente, Emittente → Client

Esempio di comunicazione in entrambe le direzioni.

Esempio di campo di richiesta criptato

Testo normale = "Hello, world!", dati associati = "field1"

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

Approfondimento:

>> 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

Esempio di chiave di crittografia dell'emittente o del dispositivo

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

Approfondimento:

>> 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

Chiavi e certificati di test

Puoi fare riferimento alle seguenti chiavi di test durante l'implementazione.

Chiave di identità (firma) dell'emittente di test

  • Chiave privata

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

  • Certificato di chiave pubblica

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

Chiave di crittografia dell'emittente di test

  • Chiave privata

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

  • Certificato di chiave pubblica

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

Chiave di identità (firma) del dispositivo, nota anche come CredentialKey

  • Catena di certificati di chiave pubblica (X.509)
    MIICujCCAmCgAwIBAgIBATAKBggqhkjOPQQDAjA5MQwwCgYDVQQKEwNURUUxKTAnBgNVBAMTIDFjOTJhYjA1MzI0OWFjNDE0ZWFmMTg5NTY2Njg2NmFmMB4XDTcwMDEwMTAwMDAwMFoXDTQ4MDEwMTAwMDAwMFowHzEdMBsGA1UEAxMUQW5kcm9pZCBLZXlzdG9yZSBLZXkwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARLTpfw/CcG1/+nXnMP9QRBm5JjaNJBhNg77tmzk4F7L7uXnNGWIoToq9KHyX2iUDn6Ubv/mwiMlMSm5nM88RGdo4IBcTCCAW0wDgYDVR0PAQH/BAQDAgeAMIIBWQYKKwYBBAHWeQIBEQSCAUkwggFFAgIAyAoBAQICAMgKAQEEEDYjEBLEZTpwr93t4ptmsuoEADB3v4U9CAIGAYhT/hkxv4VFZwRlMGMxPTAbBBZjb20uZ29vZ2xlLmFuZHJvaWQuZ3NmAgEhMB4EFmNvbS5nb29nbGUuYW5kcm9pZC5nbXMCBA3XF2wxIgQgGXWy8XF3vIml3/MfnmSmyuKBpT3B0dWbHRR/4cgq+gAwgaehCDEGAgECAgEDogMCAQOjBAICAQClCDEGAgEEAgEGqgMCAQG/g3cCBQC/hT4DAgEAv4VATDBKBCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAoBAgQghzYolDg9mxJKvBXCPbyAefMb/019dGERKGxClYvGYri/hUEFAgMB+9C/hUIFAgMDFkK/hU4GAgQBNLHNv4VPBgIEATSxzTAKBggqhkjOPQQDAgNIADBFAiEAxDZmUvasdVI9TYmxCH00xlss++qNbxziuwu3GcP+YeQCIGVa5yuWtAc4dOHjUVXHwPJCW7NVQ12z42+PHR4wnne6
    MIIBwjCCAWmgAwIBAgIQHJKrBTJJrEFOrxiVZmhmrzAKBggqhkjOPQQDAjApMRMwEQYDVQQKEwpHb29nbGUgTExDMRIwEAYDVQQDEwlEcm9pZCBDQTMwHhcNMjMwNDI2MTgwMTIxWhcNMjMwNTI2MTgwMTIxWjA5MQwwCgYDVQQKEwNURUUxKTAnBgNVBAMTIDFjOTJhYjA1MzI0OWFjNDE0ZWFmMTg5NTY2Njg2NmFmMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaZUxql/Q7FOtJy8UBFCAdnJ2mVB5RTe0b73Mr24fdqEi/92BDTnEe6cU7OD313G+KiCWrj21KnFLVCXhsKNJiKNjMGEwHQYDVR0OBBYEFNIlTq1EOm+XCcucFptH3inlTMEyMB8GA1UdIwQYMBaAFMNOzZHngCQ1SXStZ0KE/5Jr4WPIMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgIEMAoGCCqGSM49BAMCA0cAMEQCIGnOBO9oVZL51EUXJPk0IU2BT1Za9RbOM585CEm/KEkyAiBGuxsUVp+OaqV0HorqI930jbKqEG6oMpjWWdurmF//JQ==
    MIIB2DCCAV2gAwIBAgIUAMpPi14T/VLTtDvuZpzGh7aT4cgwCgYIKoZIzj0EAwMwKTETMBEGA1UEChMKR29vZ2xlIExMQzESMBAGA1UEAxMJRHJvaWQgQ0EyMB4XDTIzMDQyODE1MDIwOVoXDTIzMDYwMjE1MDIwOFowKTETMBEGA1UEChMKR29vZ2xlIExMQzESMBAGA1UEAxMJRHJvaWQgQ0EzMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE+rRR6wzN3SA8Ub8lGFGnHjgTV2j6nxB7h+QiVQo2cGc2eJOwTG+VhZiTEtMEbRHwTpa8J8o1HPjiFCpcfe3GB6NjMGEwDgYDVR0PAQH/BAQDAgIEMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMNOzZHngCQ1SXStZ0KE/5Jr4WPIMB8GA1UdIwQYMBaAFDmYBwY6MxKe9RQGOoBBDHGAzhqtMAoGCCqGSM49BAMDA2kAMGYCMQDt8fk0uaYvpsXXCvppEbjBBGOC5CNL9x515k85nMKhzePXVpWqZSVzxdmLQaATmc4CMQDn/B4Xlzliu1RWrhacos2fZXvMxhhOW1w2waoFnTS8mExHwzKuTbfMVPHYdj3KhtI=
    MIIDgDCCAWigAwIBAgIKA4gmZ2BliZaGDzANBgkqhkiG9w0BAQsFADAbMRkwFwYDVQQFExBmOTIwMDllODUzYjZiMDQ1MB4XDTIyMDEyNjIyNTAyMFoXDTM3MDEyMjIyNTAyMFowKTETMBEGA1UEChMKR29vZ2xlIExMQzESMBAGA1UEAxMJRHJvaWQgQ0EyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE/t+4AI454D8pM32ZUEpuaS0ewLjFP9EBOnCF4Kkz2jqcDECp0fjy34AaTCgJnpGdCLIU3u/WXBs3pEECgMuS9RVSKqj584wdbpcxiJahZWSzHqPK1Nn5LZYdQIpLJ9cUo2YwZDAdBgNVHQ4EFgQUOZgHBjozEp71FAY6gEEMcYDOGq0wHwYDVR0jBBgwFoAUNmHhAHyIBQlRi0RsR/8aTMnqTxIwEgYDVR0TAQH/BAgwBgEB/wIBAjAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIBAD0FO58gwWQb6ROp4c7hkOwQiWiCTG2Ud9Nww5cKlsMU8YlZOk8nXn5OwAfuFT01Kgcbau1CNDECX7qA1vJyQ9HBsoqa7fmi0cf1j/RRBvvAuGvg3zRy0+OckwI2832399l/81FMShS+GczTWfhLJY/ObkVBFkanRCpDhE/SxNHL/5nJzYaH8OdjAKufnD9mcFyYvzjixbcPEO5melGwk7KfCx9miSpVuB6mN1NdoCsSi96ZYQGBlZsE8oLdazckCygTvp2s77GtIswywOHf3HEa39OQm8B8g2cHcy4u5kKoFeSPI9zo6jx+WDb1Er8gKZT1u7lrwCW+JUQquYbGHLzSDIsRfGh0sTjoRH/s4pD371OYAkkPMHVguBZE8iv5uv0j4IBwN/eLyoQb1jmBv/dEUU9ceXd/s8b5+8k7PYhYcDMA0oyFQcvrhLoWbqy7BrY25iWEY5xH6EsHFre5vp1su17Rdmxby3nt7mXz1NxBQdA3rM+kcZlfcK9sHTNVTI290Wy9IS+8/xalrtalo4PA6EwofyXy18XI9AddNs754KPf8/yAMbVc/2aClm1RF7/7vB0fx3eQmLE4WS01SsqsWnCsHCSbyjdIaIyKBFQhABtIIxLNYLFw+0nnA7DBU/M1e9gWBLh8dz1xHFo+Tn5edYaY1bYyhlGBKUKG4M8l
    MIIFHDCCAwSgAwIBAgIJANUP8luj8tazMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNVBAUTEGY5MjAwOWU4NTNiNmIwNDUwHhcNMTkxMTIyMjAzNzU4WhcNMzQxMTE4MjAzNzU4WjAbMRkwFwYDVQQFExBmOTIwMDllODUzYjZiMDQ1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xUFmOr75gvMsd/dTEDDJdSSxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5jlRfdnJLmN0pTy/4lj4/7tv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y//0rb+T+W8a9nsNL/ggjnar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73XpXyTqRxB/M0n1n/W9nGqC4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYImQQcHtGl/m00QLVWutHQoVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB+TxywElgS70vE0XmLD+OJtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7quvmag8jfPioyKvxnK/EgsTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgpZrt3i5MIlCaY504LzSRiigHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7gLiMm0jhO2B6tUXHI/+MRPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82ixPvZtXQpUpuL12ab+9EaDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+NpUFgNPN9PvQi8WEg5UmAGMCAwEAAaNjMGEwHQYDVR0OBBYEFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMB8GA1UdIwQYMBaAFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4ICAQBOMaBc8oumXb2voc7XCWnuXKhBBK3e2KMGz39t7lA3XXRe2ZLLAkLM5y3J7tURkf5a1SutfdOyXAmeE6SRo83Uh6WszodmMkxK5GM4JGrnt4pBisu5igXEydaW7qq2CdC6DOGjG+mEkN8/TA6p3cnoL/sPyz6evdjLlSeJ8rFBH6xWyIZCbrcpYEJzXaUOEaxxXxgYz5/cTiVKN2M1G2okQBUIYSY6bjEL4aUN5cfo7ogP3UvliEo3Eo0YgwuzR2v0KR6C1cZqZJSTnghIC/vAD32KdNQ+c3N+vl2OTsUVMC1GiWkngNx1OO1+kXW+YTnnTUOtOIswUP/Vqd5SYgAImMAfY8U9/iIgkQj6T2W6FsScy94IN9fFhE1UtzmLoBIuUFsVXJMTz+Jucth+IqoWFua9v1R93/k98p41pjtFX+H8DslVgfP097vju4KDlqN64xV1grw3ZLl4CiOe/A91oeLm2UHOq6wn3esB4r2EIQKb6jTVGu5sYCcdWpXr0AUVqcABPdgL+H7qJguBw09ojm6xNIrw2OocrDKsudk/okr/AwqEyPKw9WnMlQgLIKw1rODG2NvU9oR3GVGdMkUBZutL8VuFkERQGt6vQ2OCw0sV47VMkuYbacK/xyZFiRcrPJPb41zgbQj9XAEyLKCHex0SdDrx+tWUDqG8At2JHA==

Per maggiori dettagli, consulta la documentazione sull'attestazione delle chiavi di Android .

Chiave di crittografia del dispositivo

  • Chiave privata

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

  • Certificato di chiave pubblica

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