Vérifier les paires de clés intégrées au matériel avec l'attestation des clés

L'attestation des clés vous permet de vous assurer que les clés que vous utilisez dans votre application sont stockées dans le keystore intégré au matériel d'un appareil. Les sections suivantes décrivent comment valider les propriétés des clés intégrées au matériel et interpréter les données d'extension des certificats d'attestation.

Avant de commencer, assurez-vous que votre appareil prend en charge l'attestation des clés au niveau du matériel.

Avant de valider les propriétés des clés intégrées au matériel d'un appareil dans un environnement de production, assurez-vous que l'appareil prend en charge l'attestation des clés au niveau du matériel. Pour ce faire, vérifiez que la chaîne de certificats d'attestation contient un certificat racine signé avec la clé racine d'attestation Google et que l'élément attestationSecurityLevel, qui figure dans la structure de données de description de la clé, est défini sur le niveau de sécurité TrustedEnvironment ou StrongBox.

En outre, il est important de vérifier les signatures de la chaîne de certificats et de vous assurer qu'aucune des clés de la chaîne n'a été révoquée en consultant la liste des états de révocation des certificats. Ne faites entièrement confiance à l'attestation que si toutes sont valides et que la racine est la clé racine Google.

Récupérer et valider une paire de clés intégrée au matériel

Lors de l'attestation des clés, vous spécifiez l'alias d'une paire de clés et récupérez sa chaîne de certificats, que vous pouvez utiliser pour valider les propriétés de cette paire.

Si l'appareil prend en charge l'attestation des clés au niveau du matériel, le certificat racine de cette chaîne est signé à l'aide d'une clé racine d'attestation provisionnée de manière sécurisée sur le keystore intégré au matériel de l'appareil.

Pour implémenter l'attestation des clés, procédez comme suit :

  1. Utilisez la méthode getCertificateChain() d'un objet KeyStore pour obtenir une référence à la chaîne de certificats X.509 associés au keystore intégré au matériel.
  2. Envoyez les certificats à un serveur distinct de confiance pour la validation.

    Attention : N'effectuez pas le processus de validation suivant sur le même appareil. Si le système Android de cet appareil est compromis, le processus de validation pourrait faire confiance à un élément non fiable.

  3. Obtenez une référence à la bibliothèque d'analyse et de validation de la chaîne de certificats X.509 la plus adaptée à votre ensemble d'outils. Vérifiez que le certificat public racine est fiable et que chaque certificat signe le certificat suivant de la chaîne.

  4. Vérifiez l'état de révocation de chaque certificat pour vous assurer qu'aucun des certificats n'a été révoqué.

  5. Si vous le souhaitez, inspectez l'extension de certificat d'informations de provisionnement qui n'est présente que dans les chaînes de certificats les plus récentes.

    Obtenez une référence à la bibliothèque d'analyseur CBOR la plus adaptée à votre ensemble d'outils. Recherchez le certificat le plus proche de la racine qui contient l'extension de certificat d'informations de provisionnement. Utilisez l'analyseur pour extraire de ce certificat les données de l'extension de certificat d'informations de provisionnement.

    Pour en savoir plus, consultez la section sur l'extension d'informations de provisionnement.

  6. Obtenez une référence à la bibliothèque d'analyseur ASN.1 la plus adaptée à votre ensemble d'outils. Recherchez le certificat le plus proche de la racine qui contient l'extension de certificat d'attestation des clés. Si l'extension de certificat d'informations de provisionnement était présente, l'extension de certificat d'attestation des clés doit figurer dans le certificat suivant. Utilisez l'analyseur pour extraire de ce certificat les données de l'extension de certificat d'attestation des clés.

    Attention : Ne partez pas du principe que l'extension de certificat d'attestation des clés se trouve dans le certificat d'entité finale de la chaîne. Seule la première occurrence de l'extension de la chaîne peut être fiable. Toutes les autres instances de l'extension n'ont pas été émises par le matériel sécurisé. Elles pourraient avoir été émises par un pirate informatique qui étend la chaîne en tentant de créer de fausses attestations pour des clés qui ne sont pas fiables.

    L'exemple d'attestation des clés utilise l'analyseur ASN.1 de Bouncy Castle pour extraire les données d'extension d'un certificat d'attestation. Vous pouvez utiliser cet exemple comme référence pour créer votre propre analyseur.

    Pour en savoir plus, consultez la section sur le schéma de données de l'extension d'attestation des clés.

  7. Vérifiez la cohérence des données d'extension que vous avez récupérées aux étapes précédentes et comparez-les à l'ensemble des valeurs que la clé intégrée au matériel devrait contenir.

Certificats racines

La fiabilité de l'attestation dépend du certificat racine de la chaîne. Les appareils Android ayant réussi les tests requis pour disposer de la suite d'applications Google, y compris Google Play, et lancés avec Android 7.0 (niveau d'API 24) ou version ultérieure doivent utiliser des clés d'attestation signées par le certificat racine d'attestation du matériel Google. Notez que l'attestation n'était pas requise avant Android 8.0 (niveau d'API 26). L'ensemble des certificats racine valides peut être téléchargé sous forme de tableau au format JSON.

Certificats racine

Les deux certificats racine suivants doivent être utilisés comme ancres de confiance lors de la validation d'une chaîne de certificats d'attestation de clé.

-----BEGIN CERTIFICATE-----
MIIFHDCCAwSgAwIBAgIJAPHBcqaZ6vUdMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV
BAUTEGY5MjAwOWU4NTNiNmIwNDUwHhcNMjIwMzIwMTgwNzQ4WhcNNDIwMzE1MTgw
NzQ4WjAbMRkwFwYDVQQFExBmOTIwMDllODUzYjZiMDQ1MIICIjANBgkqhkiG9w0B
AQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xUFmOr75gvMsd/dTEDDJdS
Sxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5jlRfdnJLmN0pTy/4lj4/7
tv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y//0rb+T+W8a9nsNL/ggj
nar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73XpXyTqRxB/M0n1n/W9nGq
C4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYImQQcHtGl/m00QLVWutHQ
oVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB+TxywElgS70vE0XmLD+O
JtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7quvmag8jfPioyKvxnK/Eg
sTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgpZrt3i5MIlCaY504LzSRi
igHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7gLiMm0jhO2B6tUXHI/+M
RPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82ixPvZtXQpUpuL12ab+9E
aDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+NpUFgNPN9PvQi8WEg5Um
AGMCAwEAAaNjMGEwHQYDVR0OBBYEFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMB8GA1Ud
IwQYMBaAFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMA8GA1UdEwEB/wQFMAMBAf8wDgYD
VR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4ICAQB8cMqTllHc8U+qCrOlg3H7
174lmaCsbo/bJ0C17JEgMLb4kvrqsXZs01U3mB/qABg/1t5Pd5AORHARs1hhqGIC
W/nKMav574f9rZN4PC2ZlufGXb7sIdJpGiO9ctRhiLuYuly10JccUZGEHpHSYM2G
tkgYbZba6lsCPYAAP83cyDV+1aOkTf1RCp/lM0PKvmxYN10RYsK631jrleGdcdkx
oSK//mSQbgcWnmAEZrzHoF1/0gso1HZgIn0YLzVhLSA/iXCX4QT2h3J5z3znluKG
1nv8NQdxei2DIIhASWfu804CA96cQKTTlaae2fweqXjdN1/v2nqOhngNyz1361mF
mr4XmaKH/ItTwOe72NI9ZcwS1lVaCvsIkTDCEXdm9rCNPAY10iTunIHFXRh+7KPz
lHGewCq/8TOohBRn0/NNfh7uRslOSZ/xKbN9tMBtw37Z8d2vvnXq/YWdsm1+JLVw
n6yYD/yacNJBlwpddla8eaVMjsF6nBnIgQOf9zKSe06nSTqvgwUHosgOECZJZ1Eu
zbH4yswbt02tKtKEFhx+v+OTge/06V+jGsqTWLsfrOCNLuA8H++z+pUENmpqnnHo
vaI47gC+TNpkgYGkkBT6B/m/U01BuOBBTzhIlMEZq9qkDWuM2cA5kW5V3FJUcfHn
w1IdYIg2Wxg7yHcQZemFQg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICIjCCAaigAwIBAgIRAISp0Cl7DrWK5/8OgN52BgUwCgYIKoZIzj0EAwMwUjEc
MBoGA1UEAwwTS2V5IEF0dGVzdGF0aW9uIENBMTEQMA4GA1UECwwHQW5kcm9pZDET
MBEGA1UECgwKR29vZ2xlIExMQzELMAkGA1UEBhMCVVMwHhcNMjUwNzE3MjIzMjE4
WhcNMzUwNzE1MjIzMjE4WjBSMRwwGgYDVQQDDBNLZXkgQXR0ZXN0YXRpb24gQ0Ex
MRAwDgYDVQQLDAdBbmRyb2lkMRMwEQYDVQQKDApHb29nbGUgTExDMQswCQYDVQQG
EwJVUzB2MBAGByqGSM49AgEGBSuBBAAiA2IABCPaI3FO3z5bBQo8cuiEas4HjqCt
G/mLFfRT0MsIssPBEEU5Cfbt6sH5yOAxqEi5QagpU1yX4HwnGb7OtBYpDTB57uH5
Eczm34A5FNijV3s0/f0UPl7zbJcTx6xwqMIRq6NCMEAwDwYDVR0TAQH/BAUwAwEB
/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFFIyuyz7RkOb3NaBqQ5lZuA0QepA
MAoGCCqGSM49BAMDA2gAMGUCMETfjPO/HwqReR2CS7p0ZWoD/LHs6hDi422opifH
EUaYLxwGlT9SLdjkVpz0UUOR5wIxAIoGyxGKRHVTpqpGRFiJtQEOOTp/+s1GcxeY
uR2zh/80lQyu9vAFCj6E4AXc+osmRg==
-----END CERTIFICATE-----
  
Certificats racine précédemment émis
-----BEGIN CERTIFICATE-----
MIIFYDCCA0igAwIBAgIJAOj6GWMU0voYMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV
BAUTEGY5MjAwOWU4NTNiNmIwNDUwHhcNMTYwNTI2MTYyODUyWhcNMjYwNTI0MTYy
ODUyWjAbMRkwFwYDVQQFExBmOTIwMDllODUzYjZiMDQ1MIICIjANBgkqhkiG9w0B
AQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xUFmOr75gvMsd/dTEDDJdS
Sxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5jlRfdnJLmN0pTy/4lj4/7
tv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y//0rb+T+W8a9nsNL/ggj
nar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73XpXyTqRxB/M0n1n/W9nGq
C4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYImQQcHtGl/m00QLVWutHQ
oVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB+TxywElgS70vE0XmLD+O
JtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7quvmag8jfPioyKvxnK/Eg
sTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgpZrt3i5MIlCaY504LzSRi
igHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7gLiMm0jhO2B6tUXHI/+M
RPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82ixPvZtXQpUpuL12ab+9E
aDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+NpUFgNPN9PvQi8WEg5Um
AGMCAwEAAaOBpjCBozAdBgNVHQ4EFgQUNmHhAHyIBQlRi0RsR/8aTMnqTxIwHwYD
VR0jBBgwFoAUNmHhAHyIBQlRi0RsR/8aTMnqTxIwDwYDVR0TAQH/BAUwAwEB/zAO
BgNVHQ8BAf8EBAMCAYYwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cHM6Ly9hbmRyb2lk
Lmdvb2dsZWFwaXMuY29tL2F0dGVzdGF0aW9uL2NybC8wDQYJKoZIhvcNAQELBQAD
ggIBACDIw41L3KlXG0aMiS//cqrG+EShHUGo8HNsw30W1kJtjn6UBwRM6jnmiwfB
Pb8VA91chb2vssAtX2zbTvqBJ9+LBPGCdw/E53Rbf86qhxKaiAHOjpvAy5Y3m00m
qC0w/Zwvju1twb4vhLaJ5NkUJYsUS7rmJKHHBnETLi8GFqiEsqTWpG/6ibYCv7rY
DBJDcR9W62BW9jfIoBQcxUCUJouMPH25lLNcDc1ssqvC2v7iUgI9LeoM1sNovqPm
QUiG9rHli1vXxzCyaMTjwftkJLkf6724DFhuKug2jITV0QkXvaJWF4nUaHOTNA4u
JU9WDvZLI1j83A+/xnAJUucIv/zGJ1AMH2boHqF8CY16LpsYgBt6tKxxWH00XcyD
CdW2KlBCeqbQPcsFmWyWugxdcekhYsAWyoSf818NUsZdBWBaR/OukXrNLfkQ79Iy
ZohZbvabO/X+MVT3rriAoKc8oE2Uws6DF+60PV7/WIPjNvXySdqspImSN78mflxD
qwLqRBYkA3I75qppLGG9rp7UCdRjxMl8ZDBld+7yvHVgt1cVzJx9xnyGCC23Uaic
MDSXYrB4I4WHXPGjxhZuCuPBLTdOLU8YRvMYdEvYebWHMpvwGCF6bAx3JBpIeOQ1
wDB5y0USicV3YgYGmi+NZfhA4URSh77Yd6uuJOJENRaNVTzk
-----END CERTIFICATE-----
  
-----BEGIN CERTIFICATE-----
MIIFHDCCAwSgAwIBAgIJANUP8luj8tazMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV
BAUTEGY5MjAwOWU4NTNiNmIwNDUwHhcNMTkxMTIyMjAzNzU4WhcNMzQxMTE4MjAz
NzU4WjAbMRkwFwYDVQQFExBmOTIwMDllODUzYjZiMDQ1MIICIjANBgkqhkiG9w0B
AQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xUFmOr75gvMsd/dTEDDJdS
Sxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5jlRfdnJLmN0pTy/4lj4/7
tv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y//0rb+T+W8a9nsNL/ggj
nar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73XpXyTqRxB/M0n1n/W9nGq
C4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYImQQcHtGl/m00QLVWutHQ
oVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB+TxywElgS70vE0XmLD+O
JtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7quvmag8jfPioyKvxnK/Eg
sTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgpZrt3i5MIlCaY504LzSRi
igHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7gLiMm0jhO2B6tUXHI/+M
RPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82ixPvZtXQpUpuL12ab+9E
aDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+NpUFgNPN9PvQi8WEg5Um
AGMCAwEAAaNjMGEwHQYDVR0OBBYEFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMB8GA1Ud
IwQYMBaAFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMA8GA1UdEwEB/wQFMAMBAf8wDgYD
VR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4ICAQBOMaBc8oumXb2voc7XCWnu
XKhBBK3e2KMGz39t7lA3XXRe2ZLLAkLM5y3J7tURkf5a1SutfdOyXAmeE6SRo83U
h6WszodmMkxK5GM4JGrnt4pBisu5igXEydaW7qq2CdC6DOGjG+mEkN8/TA6p3cno
L/sPyz6evdjLlSeJ8rFBH6xWyIZCbrcpYEJzXaUOEaxxXxgYz5/cTiVKN2M1G2ok
QBUIYSY6bjEL4aUN5cfo7ogP3UvliEo3Eo0YgwuzR2v0KR6C1cZqZJSTnghIC/vA
D32KdNQ+c3N+vl2OTsUVMC1GiWkngNx1OO1+kXW+YTnnTUOtOIswUP/Vqd5SYgAI
mMAfY8U9/iIgkQj6T2W6FsScy94IN9fFhE1UtzmLoBIuUFsVXJMTz+Jucth+IqoW
Fua9v1R93/k98p41pjtFX+H8DslVgfP097vju4KDlqN64xV1grw3ZLl4CiOe/A91
oeLm2UHOq6wn3esB4r2EIQKb6jTVGu5sYCcdWpXr0AUVqcABPdgL+H7qJguBw09o
jm6xNIrw2OocrDKsudk/okr/AwqEyPKw9WnMlQgLIKw1rODG2NvU9oR3GVGdMkUB
ZutL8VuFkERQGt6vQ2OCw0sV47VMkuYbacK/xyZFiRcrPJPb41zgbQj9XAEyLKCH
ex0SdDrx+tWUDqG8At2JHA==
-----END CERTIFICATE-----
  
-----BEGIN CERTIFICATE-----
MIIFHDCCAwSgAwIBAgIJAMNrfES5rhgxMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV
BAUTEGY5MjAwOWU4NTNiNmIwNDUwHhcNMjExMTE3MjMxMDQyWhcNMzYxMTEzMjMx
MDQyWjAbMRkwFwYDVQQFExBmOTIwMDllODUzYjZiMDQ1MIICIjANBgkqhkiG9w0B
AQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xUFmOr75gvMsd/dTEDDJdS
Sxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5jlRfdnJLmN0pTy/4lj4/7
tv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y//0rb+T+W8a9nsNL/ggj
nar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73XpXyTqRxB/M0n1n/W9nGq
C4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYImQQcHtGl/m00QLVWutHQ
oVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB+TxywElgS70vE0XmLD+O
JtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7quvmag8jfPioyKvxnK/Eg
sTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgpZrt3i5MIlCaY504LzSRi
igHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7gLiMm0jhO2B6tUXHI/+M
RPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82ixPvZtXQpUpuL12ab+9E
aDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+NpUFgNPN9PvQi8WEg5Um
AGMCAwEAAaNjMGEwHQYDVR0OBBYEFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMB8GA1Ud
IwQYMBaAFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMA8GA1UdEwEB/wQFMAMBAf8wDgYD
VR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4ICAQBTNNZe5cuf8oiq+jV0itTG
zWVhSTjOBEk2FQvh11J3o3lna0o7rd8RFHnN00q4hi6TapFhh4qaw/iG6Xg+xOan
63niLWIC5GOPFgPeYXM9+nBb3zZzC8ABypYuCusWCmt6Tn3+Pjbz3MTVhRGXuT/T
QH4KGFY4PhvzAyXwdjTOCXID+aHud4RLcSySr0Fq/L+R8TWalvM1wJJPhyRjqRCJ
erGtfBagiALzvhnmY7U1qFcS0NCnKjoO7oFedKdWlZz0YAfu3aGCJd4KHT0MsGiL
Zez9WP81xYSrKMNEsDK+zK5fVzw6jA7cxmpXcARTnmAuGUeI7VVDhDzKeVOctf3a
0qQLwC+d0+xrETZ4r2fRGNw2YEs2W8Qj6oDcfPvq9JySe7pJ6wcHnl5EZ0lwc4xH
7Y4Dx9RA1JlfooLMw3tOdJZH0enxPXaydfAD3YifeZpFaUzicHeLzVJLt9dvGB0b
HQLE4+EqKFgOZv2EoP686DQqbVS1u+9k0p2xbMA105TBIk7npraa8VM0fnrRKi7w
lZKwdH+aNAyhbXRW9xsnODJ+g8eF452zvbiKKngEKirK5LGieoXBX7tZ9D1GNBH2
Ob3bKOwwIWdEFle/YF/h6zWgdeoaNGDqVBrLr2+0DtWoiB1aDEjLWl9FmyIUyUm7
mD/vFDkzF+wm7cyWpQpCVQ==
-----END CERTIFICATE-----
  

Si le certificat racine de la chaîne d'attestation que vous recevez contient cette clé publique et qu'aucun des certificats de la chaîne n'a été révoqué, alors vous savez que :

  1. Votre clé se trouve dans du matériel qui, selon Google, est sécurisé.
  2. Il possède les propriétés décrites dans le certificat d'attestation.

Si la chaîne d'attestation comporte une autre clé publique racine, alors Google ne revendique pas la sécurité du matériel. Cela ne signifie pas que la sécurité de votre clé est compromise, mais que l'attestation ne prouve pas qu'elle se trouve dans du matériel sécurisé. Ajustez vos hypothèses de sécurité en conséquence.

Si le certificat racine ne contient pas la clé publique sur cette page, deux raisons sont probables :

  • L'appareil a probablement été lancé avec une version d'Android antérieure à 7.0 et ne prend donc pas en charge l'attestation du matériel. Dans ce cas, Android dispose d'une implémentation logicielle d'attestation qui produit le même type de certificat d'attestation, mais qui est signée avec une clé codée en dur dans le code source Android. Comme cette clé de signature n'est pas secrète, il est possible que l'attestation ait été créée par un pirate informatique qui prétend fournir du matériel sécurisé.
  • L'autre raison probable est que l'appareil n'est pas un appareil Google Play. Dans ce cas, le fabricant de l'appareil est libre de créer son propre certificat racine et de définir la signification de ses données d'attestation. Consultez la documentation du fabricant de l'appareil. Notez que Google n'a connaissance d'aucun fabricant d'appareils ayant utilisé cette méthode.

Rotation du certificat racine d'attestation du matériel

Google lance un nouveau certificat racine pour l'attestation des clés Android. Ce changement renforce la sécurité et la fiabilité du processus d'attestation pour les applications sensibles. Une nouvelle clé racine a été générée pour l'attestation des clés Android (KeyMint). La nouvelle racine est une clé ECDSA P-384.

Que devez-vous faire ?

  • Si votre application repose sur l'attestation des clés Android, ajoutez le nouveau certificat racine à vos magasins de confiance d'ici le 31 mars 2026. Téléchargez les anciens et les nouveaux certificats depuis https://android.googleapis.com/attestation/root.
  • Les appareils qui utilisent le provisionnement de clé à distance (RKP) commenceront à recevoir des certificats ancrés dans ce nouveau certificat en février 2026. Les appareils compatibles avec RKP utiliseront exclusivement la nouvelle racine d'ici le 10 avril 2026.
  • Mettez à jour vos processus d'attestation pour faire confiance aux certificats racine à la fois nouveaux et existants. Les anciens appareils avec des clés provisionnées en usine ne sont pas compatibles avec la rotation des clés et continuent d'utiliser l'ancienne racine.
  • Le schéma d'extension de certificat lui-même restera inchangé. Seule la racine sera modifiée.
  • Les formes lisibles par l'humain et par machine de la nouvelle racine seront disponibles publiquement.

Bonnes pratiques

N'interrogez pas un point de terminaison au sujet des racines de confiance au moment de l'exécution, car cette action crée des risques de sécurité. Gérez les modifications apportées aux racines de confiance à l'aide d'une procédure formelle.

Suppression progressive des clés d'usine : provisionnement de clés à distance (RKP)

Pour les appareils lancés avec Android 16, le système n'est compatible qu'avec le provisionnement RKP. Cette règle supprime progressivement les clés d'usine. Elle améliore la façon dont vous provisionnez et gérez les clés d'attestation, en s'appuyant sur la règle Android 15 où la prise en charge du RKP était facultative. Le provisionnement RKP empêche la fuite de clés, car le système ne programme pas les clés directement sur l'appareil. Vous ne pouvez pas supprimer ces clés de l'appareil. Si vous devez révoquer une clé, vous pouvez cibler la révocation sur un seul appareil.

Bibliothèques de validation des attestations

Utilisez la bibliothèque Kotlin de validation des attestations pour valider les chaînes de certificats d'attestation de clé. De plus, cette bibliothèque intègre déjà les nouveaux certificats racine. Si vous utilisez un autre outil de validation, nous vous recommandons de passer à la bibliothèque Kotlin. Elle est bien testée et couvre les cas extrêmes qui sont souvent manqués par les validateurs personnalisés.

Liste des états de révocation des certificats

Les clés d'attestation peuvent être révoquées pour plusieurs raisons, par exemple en cas de mauvaise gestion ou de suspicion d'extraction par un pirate informatique. Par conséquent, il est essentiel que l'état de chaque certificat d'une chaîne d'attestation soit validé par rapport à la liste officielle des états de révocation des certificats (LRC). Cette liste est gérée par Google et publiée à l'adresse suivante : https://android.googleapis.com/attestation/status. L'en-tête Cache-Control de la réponse HTTP détermine la fréquence de recherche des mises à jour afin qu'une requête réseau ne soit pas requise pour chaque certificat en cours de validation. Cette URL renvoie un fichier JSON contenant l'état de révocation des certificats dont l'état n'est pas valide. Le format du fichier JSON respecte la définition de schéma JSON suivante (brouillon 07) :

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "entries": {
      "description" : "Each entry represents the status of an attestation key. The dictionary-key is the certificate serial number in lowercase hex.",
      "type": "object",
      "propertyNames": {
        "pattern": "^[a-f1-9][a-f0-9]*$"
      },
      "additionalProperties": {
        "type": "object",
        "properties": {
          "status": {
            "description": "[REQUIRED] Current status of the key.",
            "type": "string",
            "enum": ["REVOKED", "SUSPENDED"]
          },
          "expires": {
            "description": "[OPTIONAL] UTC date when certificate expires in ISO8601 format (YYYY-MM-DD). Can be used to clear expired certificates from the status list.",
            "type": "string",
            "format": "date"
          },
          "reason": {
            "description": "[OPTIONAL] Reason for the current status.",
            "type": "string",
            "enum": ["UNSPECIFIED", "KEY_COMPROMISE", "CA_COMPROMISE", "SUPERSEDED", "SOFTWARE_FLAW"]
          },
          "comment": {
            "description": "[OPTIONAL] Free form comment about the key status.",
            "type": "string",
            "maxLength": 140
          }
        },
        "required": ["status"],
        "additionalProperties": false
      }
    }
  },
  "required": ["entries"],
  "additionalProperties": false
}

Exemple de LRC :

{
  "entries": {
    "2c8cdddfd5e03bfc": {
      "status": "REVOKED",
      "expires": "2020-11-13",
      "reason": "KEY_COMPROMISE",
      "comment": "Key stored on unsecure system"
    },
    "c8966fcb2fbb0d7a": {
      "status": "SUSPENDED",
      "reason": "SOFTWARE_FLAW",
      "comment": "Bug in keystore causes this key malfunction b/555555"
    }
  }
}

Règle de révocation des certificats

L'attestation est le pilier de la lutte contre les utilisations abusives et de la confiance dans l'écosystème Android. Elle fournit une instruction vérifiable de manière chiffrée aux parties hors de l'appareil concernant l'état de démarrage de l'appareil.

Les certificats des clés d'attestation Android seront révoqués lorsque les clés seront compromises, car la validité de l'attestation est essentielle par nature. Cette section décrit une règle à appliquer lorsque des certificats sont révoqués. Cette règle est susceptible d'évoluer et de prendre en compte des cas de révocation supplémentaires avec le temps.

Quels sont les cas de révocation ?

Les clés d'attestation qui ont été divulguées peuvent toujours voir leurs certificats révoqués. Les divulgations peuvent être découvertes de différentes manières :

  • Analyse des données d'attestation en conditions réelles
  • Découverte de clés d'attestation sur les réseaux sociaux ou d'autres sites publics
  • Rapports provenant directement de chercheurs en sécurité

Une fois les certificats d'attestation découverts, ils seront révoqués : leur numéro de série est ajouté à la liste de révocation. Cela se produit généralement dans les jours qui suivent la découverte, mais peut prendre plus de temps dans de rares cas. Par exemple, la révocation des certificats pour les clés d'attestation divulguées est généralement retardée si les appareils concernés par la révocation peuvent être reprovisionnés de manière sécurisée. L'ampleur de l'impact de la révocation est également un facteur important pour les délais de révocation.

Schéma des données de l'extension d'attestation des clés

Schéma des données de l'extension d'informations de provisionnement