Sprawdzaj pary kluczy wspieranych sprzętowo za pomocą atestu kluczy

Atestowanie kluczy zwiększa pewność, że klucze używane w aplikacji są przechowywane w sprzętowym magazynie kluczy urządzenia. W poniższych sekcjach opisujemy, jak weryfikować właściwości kluczy obsługiwanych przez sprzęt i jak interpretować dane rozszerzenia certyfikatów atestu.

Uwaga: zanim zweryfikujesz właściwości kluczy sprzętowych urządzenia w środowisku produkcyjnym, upewnij się, że urządzenie obsługuje atestowanie kluczy na poziomie sprzętowym. W tym celu sprawdź, czy łańcuch certyfikatów atestu zawiera certyfikat główny podpisany kluczem głównym atestu Google oraz czy element attestationSecurityLevel w strukturze danych opisu klucza jest ustawiony na poziom bezpieczeństwa TrustedEnvironment lub StrongBox.

Dodatkowo ważne jest, aby sprawdzić podpisy w łańcuchu certyfikatów i upewnić się, że żaden z kluczy w łańcuchu nie został unieważniony. W tym celu należy sprawdzić listę stanów unieważnienia certyfikatów. Jeśli wszystkie nie są prawidłowe, a klucz główny nie jest kluczem głównym Google, nie ufaj w pełni atestowi.

Pobieranie i weryfikowanie pary kluczy obsługiwanych sprzętowo

Podczas atestowania klucza określasz alias pary kluczy i pobierasz jej łańcuch certyfikatów, którego możesz użyć do weryfikacji właściwości tej pary kluczy.

Jeśli urządzenie obsługuje atestowanie kluczy na poziomie sprzętowym, certyfikat główny w tym łańcuchu jest podpisany za pomocą klucza głównego atestowania, który jest bezpiecznie udostępniany w sprzętowym magazynie kluczy urządzenia.

Uwaga: na urządzeniach z atestem klucza na poziomie sprzętu, Androidem 7.0 (poziom interfejsu API 24) lub nowszym oraz Usługami Google Play certyfikat główny jest podpisywany za pomocą głównego klucza atestu Google. Sprawdź, czy ten certyfikat główny znajduje się na liście w sekcji certyfikatów głównych.

Aby wdrożyć atestowanie kluczy, wykonaj te czynności:

  1. Użyj metody getCertificateChain() obiektu KeyStore, aby uzyskać odniesienie do łańcucha certyfikatów X.509 powiązanych z magazynem kluczy obsługiwanym sprzętowo.
  2. Wysyłaj certyfikaty na osobny serwer, któremu ufasz, w celu weryfikacji.

    Uwaga: nie przeprowadzaj poniższego procesu weryfikacji na tym samym urządzeniu. Jeśli system Android na tym urządzeniu zostanie przejęty, proces weryfikacji może uznać za zaufane coś, co nie jest godne zaufania.

  3. Uzyskaj odniesienie do biblioteki analizowania i weryfikowania łańcucha certyfikatów X.509, która jest najbardziej odpowiednia dla Twojego zestawu narzędzi. Sprawdź, czy główny certyfikat publiczny jest godny zaufania i czy każdy certyfikat podpisuje następny certyfikat w łańcuchu.

  4. Sprawdź stan unieważnienia każdego certyfikatu, aby upewnić się, że żaden z nich nie został unieważniony.

  5. Opcjonalnie sprawdź rozszerzenie certyfikatu informacji o wdrażaniu, które występuje tylko w nowszych łańcuchach certyfikatów.

    Uzyskaj odniesienie do biblioteki analizatora CBOR, która jest najbardziej odpowiednia dla Twojego zestawu narzędzi. Znajdź najbliższy certyfikat główny, który zawiera rozszerzenie certyfikatu z informacjami o wdrażaniu. Użyj parsera, aby wyodrębnić z tego certyfikatu dane rozszerzenia certyfikatu informacji o wdrażaniu.

    Więcej informacji znajdziesz w sekcji dotyczącej rozszerzenia informacji o udostępnianiu.

  6. Uzyskaj odniesienie do biblioteki analizatora ASN.1, która jest najbardziej odpowiednia dla Twojego zestawu narzędzi. Znajdź najbliższy certyfikat główny, który zawiera rozszerzenie certyfikatu atestu klucza. Jeśli rozszerzenie certyfikatu informacji o obsłudze administracyjnej było obecne, rozszerzenie certyfikatu atestu klucza musi znajdować się w bezpośrednio następującym po nim certyfikacie. Użyj parsera, aby wyodrębnić dane rozszerzenia certyfikatu atestu klucza z tego certyfikatu.

    Ostrzeżenie: nie zakładaj, że rozszerzenie certyfikatu atestu klucza znajduje się w certyfikacie liścia łańcucha. Tylko pierwsze wystąpienie rozszerzenia w łańcuchu może być zaufane. Kolejne instancje rozszerzenia nie zostały wydane przez bezpieczny sprzęt i mogły zostać wydane przez atakującego, który rozszerzył łańcuch podczas próby utworzenia fałszywych zaświadczeń dla niezaufanych kluczy.

    Przykładowy atest klucza używa parsera ASN.1 z biblioteki Bouncy Castle do wyodrębniania danych rozszerzenia certyfikatu atestu. Możesz użyć tego przykładu jako wzorca do utworzenia własnego analizatora.

    Więcej informacji znajdziesz w sekcji dotyczącej schematu danych rozszerzenia atestu klucza.

  7. Sprawdź, czy dane rozszerzenia pobrane w poprzednich krokach są spójne, i porównaj je z zestawem wartości, które powinny znajdować się w kluczu sprzętowym.

Certyfikaty główne

Wiarygodność atestu zależy od certyfikatu głównego w łańcuchu. Urządzenia z Androidem, które przeszły testy wymagane do korzystania z pakietu aplikacji Google, w tym Google Play, i które zostały wprowadzone na rynek z Androidem 7.0 (poziom interfejsu API 24) lub nowszym, powinny używać kluczy atestacyjnych podpisanych przez główny certyfikat atestacji sprzętu Google. Pamiętaj, że atestowanie nie było wymagane do Androida 8.0 (poziom 26 interfejsu API). Zestaw prawidłowych certyfikatów głównych można pobrać jako tablicę w formacie JSON.

Certyfikaty główne

Podczas weryfikacji łańcucha certyfikatów atestu klucza należy używać tych 2 certyfikatów głównych jako punktów zaufania.

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

Poniższy certyfikat główny zacznie podpisywać łańcuchy certyfikatów atestu 1 lutego 2025 r.

-----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-----
  
Wcześniej wydane certyfikaty główne
-----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-----
  

Jeśli certyfikat główny w otrzymanym łańcuchu atestu zawiera ten klucz publiczny i żaden z certyfikatów w łańcuchu nie został unieważniony, oznacza to, że:

  1. klucz znajduje się na sprzęcie, który Google uważa za bezpieczny;
  2. Ma właściwości opisane w certyfikacie atestu.

Jeśli łańcuch atestu zawiera inny główny klucz publiczny, Google nie składa żadnych oświadczeń dotyczących bezpieczeństwa sprzętu. Nie oznacza to, że klucz został przejęty, a jedynie, że atest nie potwierdza, że klucz znajduje się w bezpiecznym sprzęcie. Dostosuj odpowiednio założenia dotyczące bezpieczeństwa.

Jeśli certyfikat główny nie zawiera klucza publicznego na tej stronie, prawdopodobnie są 2 przyczyny:

  • Najprawdopodobniej urządzenie zostało wprowadzone na rynek z Androidem w wersji starszej niż 7.0 i nie obsługuje atestu sprzętowego. W tym przypadku Android ma implementację atestu w oprogramowaniu, która generuje ten sam rodzaj certyfikatu atestu, ale jest podpisana kluczem zakodowanym na stałe w kodzie źródłowym Androida. Ponieważ ten klucz podpisu nie jest tajny, zaświadczenie mogło zostać utworzone przez atakującego, który udaje, że dostarcza bezpieczny sprzęt.
  • Innym prawdopodobnym powodem jest to, że urządzenie nie jest urządzeniem Google Play. W takim przypadku producent urządzenia może utworzyć własny katalog główny i określić, co oznacza atest. Zapoznaj się z dokumentacją producenta urządzenia. Pamiętaj, że Google nie zna żadnych producentów urządzeń, którzy to zrobili.

Rotacja certyfikatu głównego atestu sprzętowego

Wprowadzamy nowy certyfikat główny do atestacji klucza na Androidzie. Ta zmiana zwiększa bezpieczeństwo i niezawodność procesu atestowania w przypadku aplikacji wymagających ochrony. Wygenerowano nowy klucz główny na potrzeby atestowania kluczy Androida (KeyMint). Nowy klucz główny to klucz ECDSA P-384. W przyszłości planujemy wprowadzić klucz ML-DSA (postkwantowy algorytm podpisu cyfrowego).

Działania dla programistów

  • Jeśli Twoja aplikacja korzysta z atestu klucza Androida, do stycznia 2026 r. dodaj nowy certyfikat główny do magazynów zaufanych certyfikatów. Pobierz nowy i stary certyfikat ze strony https://android.googleapis.com/attestation/root.
  • Urządzenia korzystające z zdalnego udostępniania kluczy (RKP) zaczną otrzymywać certyfikaty oparte na tym nowym certyfikacie w lutym 2026 roku. Urządzenia z włączoną ochroną kluczy w systemie Android będą korzystać wyłącznie z nowego katalogu głównego do 10 kwietnia 2026 roku.
  • Zaktualizuj procesy atestowania, aby ufać zarówno nowym, jak i dotychczasowym certyfikatom głównym. Starsze urządzenia z kluczami zainstalowanymi fabrycznie nie obsługują rotacji kluczy i nadal używają starego klucza głównego.
  • Sam schemat rozszerzenia certyfikatu pozostanie bez zmian. Zmieni się tylko certyfikat główny.
  • Zarówno wersja czytelna dla człowieka, jak i wersja czytelna dla komputera nowego certyfikatu głównego będą publicznie dostępne.

Sprawdzone metody

Nie wysyłaj zapytań do punktu końcowego o zaufane certyfikaty główne w czasie działania programu, ponieważ stwarza to zagrożenia dla bezpieczeństwa. Obsługuj zmiany w zaufanych źródłach za pomocą formalnego procesu.

Wycofywanie kluczy fabrycznych: zdalne udostępnianie kluczy (RKP)

W przypadku urządzeń, które są wprowadzane na rynek z Androidem 16, system obsługuje tylko RKP. Ta zasada wycofuje klucze fabryczne. Usprawnia on sposób udostępniania kluczy atestu i zarządzania nimi, rozszerzając zasady Androida 15, w których obsługa RKP była opcjonalna. RKP zapobiega wyciekowi kluczy, ponieważ system nie programuje ich bezpośrednio na urządzeniu. Nie możesz usunąć tych kluczy z urządzenia. Jeśli musisz unieważnić klucz, możesz to zrobić tylko na jednym urządzeniu.

Biblioteki weryfikacji atestu

Do weryfikacji łańcuchów certyfikatów atestu klucza użyj biblioteki weryfikacji atestów w języku Kotlin. Ta biblioteka zawiera już nowe certyfikaty główne. Jeśli używasz innego weryfikatora, zalecamy przejście na bibliotekę Kotlin. Jest dobrze przetestowany i obejmuje przypadki brzegowe, które są często pomijane przez niestandardowe weryfikatory.

Lista stanów odwołania certyfikatów

Klucze atestacyjne mogą zostać unieważnione z różnych powodów, m.in. z powodu nieprawidłowego obchodzenia się z nimi lub podejrzenia, że zostały wyodrębnione przez atakującego. Dlatego ważne jest, aby stan każdego certyfikatu w łańcuchu atestów był sprawdzany na podstawie oficjalnej listy odwołanych certyfikatów (CRL). Lista ta jest utrzymywana przez Google i publikowana na stronie: https://android.googleapis.com/attestation/status. Nagłówek Cache-Control w odpowiedzi HTTP określa, jak często należy sprawdzać aktualizacje, więc w przypadku każdego weryfikowanego certyfikatu nie jest wymagane wysyłanie żądania sieciowego. Ten adres URL zwraca plik JSON zawierający stan unieważnienia wszystkich certyfikatów, które nie mają normalnego stanu ważności. Format pliku JSON jest zgodny z tą definicją schematu JSON (wersja 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
}

Przykładowa lista CRL:

{
  "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"
    }
  }
}

Zasady unieważniania certyfikatów

Atestowanie jest podstawą przeciwdziałania nadużyciom i budowania zaufania w ekosystemie Androida. Jest to kryptograficznie weryfikowalny komunikat dla podmiotów zewnętrznych dotyczący stanu uruchomienia urządzenia.

Certyfikaty kluczy atestacyjnych Androida zostaną unieważnione, gdy klucze zostaną naruszone ze względu na krytyczny charakter ważności atestu. W tej sekcji przedstawiamy zasady dotyczące odwoływania certyfikatów. Ta zasada będzie prawdopodobnie ewoluować i z czasem będzie obejmować dodatkowe przypadki.

Co kwalifikuje się do cofnięcia?

Wycieki kluczy atestacyjnych mają wpływ tylko na starszy mechanizm udostępniania obsługiwany w Androidzie i nie dotyczą kluczy atestacyjnych certyfikowanych przez nowszy mechanizm zdalnego udostępniania kluczy (RKP).

W przypadku kluczy atestacyjnych, które wyciekły, zawsze można unieważnić certyfikaty. Wycieki można wykryć na kilka sposobów, m.in.:

  • Analiza danych atestu w rzeczywistych warunkach.
  • Odkrycie kluczy atestacyjnych w mediach społecznościowych lub innych witrynach publicznych.
  • Raporty bezpośrednio od badaczy zajmujących się bezpieczeństwem.

Po wykryciu certyfikaty atestu zostaną odwołane przez dodanie ich numerów seryjnych do listy odwołań. Zwykle następuje to w ciągu kilku dni od wykrycia, ale w rzadkich przypadkach może potrwać dłużej. Na przykład unieważnienie certyfikatów w przypadku wycieku kluczy atestacyjnych jest zwykle opóźnione, jeśli urządzenia, których dotyczy unieważnienie, można bezpiecznie ponownie skonfigurować. Skala wpływu wycofania jest również ważnym czynnikiem w określaniu harmonogramu wycofania.

Schemat danych rozszerzenia atestacji klucza

Schemat danych rozszerzenia informacji o wdrażaniu