Atestacja klucza daje większą pewność, że klucze używane w aplikacji są przechowywane w magazynie kluczy obsługiwanym przez sprzęt urządzenia. W kolejnych sekcjach opisujemy, jak sprawdzić właściwości kluczy obsługiwanych przez sprzęt i jak interpretować dane rozszerzenia certyfikatów atestu.
Zanim zaczniesz: upewnij się, że Twoje urządzenie obsługuje atestację klucza na poziomie sprzętu
Zanim zweryfikujesz właściwości kluczy obsługiwanych przez sprzęt urządzenia w
środowisku produkcyjnym, upewnij się, że urządzenie obsługuje
atestację klucza na poziomie sprzętu. Aby to zrobić, 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
na poziom bezpieczeństwa StrongBox.
Oprócz tego ważne jest, aby zweryfikować podpisy w łańcuchu certyfikatów i sprawdzić, czy żaden z kluczy w łańcuchu nie został odwołany. W tym celu sprawdź listę stanu odwołania certyfikatów. Jeśli wszystkie certyfikaty nie są prawidłowe, a klucz główny nie jest kluczem głównym Google, nie ufaj atestowi w pełni.
Pobieranie i weryfikowanie pary kluczy wspieranych sprzętowo
Podczas atestacji klucza określasz alias pary kluczy i pobierasz jej łańcuch certyfikatów, którego możesz użyć do sprawdzenia właściwości tej pary kluczy.
Jeśli urządzenie obsługuje atestację klucza na poziomie sprzętu, certyfikat główny w tym łańcuchu jest podpisany kluczem głównym atestu, który jest bezpiecznie udostępniany w magazynie kluczy obsługiwanym przez sprzęt urządzenia.
Aby zaimplementować atestację klucza, wykonaj te czynności:
-
Użyj obiektu
KeyStorei jego metodygetCertificateChain(), aby uzyskać odniesienie do łańcucha certyfikatów X.509 powiązanych z magazynem kluczy obsługiwanym przez sprzęt. -
Wyślij certyfikaty na oddzielny serwer, któremu ufasz, aby przeprowadzić weryfikację.
Uwaga: nie wykonuj poniższego procesu weryfikacji na tym samym urządzeniu. Jeśli system Android na tym urządzeniu zostanie naruszony, proces weryfikacji może uznać za zaufane coś, co nie jest zaufane.
-
Uzyskaj odniesienie do biblioteki analizy i weryfikacji łańcucha certyfikatów X.509 która najlepiej pasuje do Twojego zestawu narzędzi. Sprawdź, czy główny certyfikat publiczny jest zaufany i czy każdy certyfikat podpisuje następny certyfikat w łańcuchu.
-
Sprawdź stan odwołania każdego certyfikatu, aby upewnić się, że żaden z nich nie został odwołany.
-
Opcjonalnie możesz sprawdzić rozszerzenie certyfikatu informacji o udostępnianiu, które jest dostępne tylko w nowszych łańcuchach certyfikatów.
Uzyskaj odniesienie do biblioteki parsera CBOR, która najlepiej pasuje do Twojego zestawu narzędzi. Znajdź najbliższy certyfikat główny, który zawiera rozszerzenie certyfikatu informacji o udostępnianiu. Użyj parsera, aby wyodrębnić dane rozszerzenia certyfikatu informacji o udostępnianiu z tego certyfikatu.
Więcej informacji znajdziesz w sekcji Rozszerzenie informacji o udostępnianiu.
-
Uzyskaj odniesienie do biblioteki parsera ASN.1, która najlepiej pasuje do Twojego zestawu narzędzi. Znajdź najbliższy certyfikat główny, który zawiera rozszerzenie certyfikatu atestacji klucza. Jeśli rozszerzenie certyfikatu informacji o udostępnianiu było obecne, rozszerzenie certyfikatu atestacji klucza musi znajdować się w bezpośrednio następującym certyfikacie. Użyj parsera, aby wyodrębnić dane rozszerzenia certyfikatu atestacji klucza z tego certyfikatu.
Uwaga: nie zakładaj, że rozszerzenie certyfikatu atestacji klucza znajduje się w certyfikacie liścia łańcucha. Możesz ufać tylko pierwszemu wystąpieniu rozszerzenia w łańcuchu. Wszystkie kolejne wystąpienia rozszerzenia nie zostały wydane przez bezpieczny sprzęt i mogły zostać wydane przez atakującego, który rozszerzył łańcuch, próbując utworzyć fałszywe atesty dla niezaufanych kluczy.
Przykładowy kod atestacji klucza atestacji używa parsera ASN.1 z biblioteki Bouncy Castle do wyodrębniania danych rozszerzenia certyfikatu atestu. Możesz użyć tego przykładu jako odniesienia do utworzenia własnego parsera.
Więcej informacji znajdziesz w sekcji Schemat danych rozszerzenia atestacji klucza.
-
Sprawdź, czy dane rozszerzenia pobrane w poprzednich krokach są spójne, i porównaj je z zestawem wartości, które powinien zawierać klucz wspierany sprzętowo.
Certyfikaty główne
Wiarygodność atestu zależy od certyfikatu głównego łańcucha. Urządzenia z Androidem , które przeszły testy wymagane do korzystania z pakietu aplikacji Google, w tym z Google Play, i które zostały wprowadzone na rynek z Androidem 7.0 (poziom interfejsu API 24) lub nowszym, powinny używać kluczy atestu podpisanych certyfikatem głównym atestu sprzętu Google. Pamiętaj, że atest nie był wymagany do Androida 8.0 (poziom interfejsu API 26). Zestaw prawidłowych certyfikatów głównych można pobrać jako a tablicę w formacie JSON.
Certyfikaty główne
Podczas weryfikacji łańcucha certyfikatów atestacji klucza należy używać tych 2 certyfikatów głównych jako kotwic 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-----
-----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ł odwołany, oznacza to, że:
- Twój klucz znajduje się w sprzęcie, który Google uważa za bezpieczny;
- ma właściwości opisane w certyfikacie atestu.
Jeśli łańcuch atestu zawiera inny klucz publiczny, Google nie gwarantuje bezpieczeństwa sprzętu. Nie oznacza to, że Twój klucz został naruszony, tylko że atest nie potwierdza, że klucz znajduje się w bezpiecznym sprzęcie. Dostosuj do tego swoje 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 atestacji sprzętu. W takim przypadku Android ma implementację atestacji w oprogramowaniu, która generuje ten sam rodzaj certyfikatu atestu, ale podpisany kluczem zakodowanym na stałe w kodzie źródłowym Androida. Ponieważ ten klucz podpisywania nie jest tajny, the atest mógł zostać utworzony przez atakującego, który udaje, że zapewnia bezpieczny sprzęt.
- Drugą prawdopodobną przyczyną jest to, że urządzenie nie jest urządzeniem Google Play. W takim przypadku producent urządzenia może utworzyć własny certyfikat główny i zdefiniować znaczenie danych atestu. Zapoznaj się z dokumentacją producenta urządzenia. Pamiętaj, że Google nie wie o żadnym producencie urządzenia, który by to zrobił.
Rotacja certyfikatu głównego atestacji sprzętu
Google wprowadza nowy certyfikat główny na potrzeby atestacji klucza na Androidzie. Ta zmiana zwiększa bezpieczeństwo i niezawodność procesu atestacji w przypadku aplikacji zawierających poufne dane. Wygenerowano nowy klucz główny na potrzeby atestacji klucza na Androidzie (KeyMint). Nowy klucz główny to klucz ECDSA P-384.
Co musisz zrobić
- Jeśli Twoja aplikacja korzysta z atestacji klucza na Androidzie, do 31 marca 2026 r. dodaj nowy certyfikat główny do magazynów zaufanych certyfikatów . Pobierz nowy i stary certyfikat z https://android.googleapis.com/attestation/root
- Urządzenia, które korzystają z zdalnego udostępniania kluczy (RKP) zaczną otrzymywać certyfikaty oparte na tym nowym certyfikacie w lutym 2026 r. Do 10 kwietnia 2026 r. urządzenia z RKP będą używać wyłącznie nowego klucza głównego.
- Zaktualizuj procesy atestacji, aby ufać zarówno nowym, jak i dotychczasowym certyfikatom głównym. Starsze urządzenia z kluczami udostępnionymi fabrycznie nie obsługują rotacji kluczy i nadal używają starego klucza głównego.
- Sam schemat rozszerzenia certyfikatu pozostanie bez zmian. Zmieni się tylko klucz główny.
- Nowy klucz główny będzie publicznie dostępny w postaci czytelnej dla człowieka i komputera.
Sprawdzone metody
Nie wysyłaj zapytań do punktu końcowego o zaufane klucze główne w czasie działania programu, ponieważ stwarza to zagrożenie dla bezpieczeństwa. Zmiany w kluczach głównych zaufania wprowadzaj w ramach formalnego procesu.
Wycofywanie kluczy fabrycznych: zdalne udostępnianie kluczy (RKP)
W przypadku urządzeń wprowadzonych na rynek z Androidem 16 system obsługuje tylko RKP. Ta zasada wycofuje klucze fabryczne. Usprawnia ona sposób udostępniania kluczy atestu i zarządzania nimi, rozszerzając zasadę Androida 15, w której obsługa RKP była opcjonalna. RKP zapobiega wyciekowi kluczy, ponieważ system nie programuje kluczy bezpośrednio na urządzeniu. Nie możesz usunąć tych kluczy z urządzenia. Jeśli musisz odwołać klucz, możesz ograniczyć odwołanie do jednego urządzenia.
Biblioteki weryfikacji atestu
Do weryfikacji łańcuchów certyfikatów atestacji klucza użyj biblioteki Kotlin do weryfikacji atestu. Ponadto ta biblioteka zawiera już nowe certyfikaty główne. Jeśli używasz innego weryfikatora, zalecamy przejście na bibliotekę Kotlin. Jest ona dobrze przetestowana i obejmuje przypadki brzegowe, które często są pomijane przez niestandardowe weryfikatory.
Lista stanu odwołania certyfikatów
Klucze atestu mogą zostać odwołane 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 sprawdzić stan każdego certyfikatu w
łańcuchu atestu na oficjalnej liście stanu odwołania certyfikatów (CRL).
Ta lista jest utrzymywana przez Google i publikowana pod adresem:
https://android.googleapis.com/attestation/status. Nagłówek Cache-Control w
odpowiedzi HTTP określa, jak często należy sprawdzać dostępność aktualizacji, dzięki czemu nie jest wymagane wysyłanie żądania sieciowego
w przypadku każdego weryfikowanego certyfikatu.
Ten adres URL zwraca plik JSON zawierający stan odwołania wszystkich certyfikatów, które nie mają
normalnego stanu ważności. Format pliku JSON jest zgodny z tą definicją schematu JSON
(wersja robocza 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ład listy 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 odwoływania certyfikatów
Atest stanowi podstawę przeciwdziałania nadużyciom i zaufania w ekosystemie Androida. Zapewnia on stronom zewnętrznym kryptograficznie weryfikowalny komunikat o stanie uruchomienia urządzenia.
Certyfikaty kluczy atestu na Androidzie zostaną odwołane, gdy klucze zostaną naruszone, ze względu na krytyczny charakter ważności atestu. W tej sekcji przedstawiamy zasady odwoływania certyfikatów. Zasady te będą prawdopodobnie ewoluować i z czasem będą obejmować dodatkowe przypadki.
Co kwalifikuje się do odwołania?
Klucze atestu, które wyciekły, zawsze kwalifikują się do odwołania certyfikatów. Wycieki można wykryć na kilka sposobów, m.in.:
- analiza danych atestu w środowisku produkcyjnym;
- wykrycie kluczy atestu w mediach społecznościowych lub innych witrynach publicznych;
- raporty bezpośrednio od badaczy bezpieczeństwa.
Po wykryciu certyfikaty atestu zostaną odwołane przez dodanie ich numerów seryjnych do listy odwołań. Zwykle nastąpi to w ciągu kilku dni od wykrycia, ale w rzadkich przypadkach może potrwać dłużej. Na przykład, odwołanie certyfikatów wyciekłych kluczy atestu jest zwykle opóźniane, jeśli urządzenia których dotyczy odwołanie, można bezpiecznie ponownie udostępnić. Skala wpływu odwołania jest również ważnym czynnikiem w przypadku harmonogramów odwołań.