Проверка пар аппаратных ключей с помощью аттестации ключей

Подтверждение подлинности ключей дает вам больше уверенности в том, что ключи, используемые в вашем приложении, хранятся в аппаратном хранилище ключей устройства. В следующих разделах описывается, как проверить свойства аппаратных ключей и как интерпретировать расширенные данные сертификатов подтверждения подлинности.

Перед началом работы: убедитесь, что ваше устройство поддерживает аттестацию ключей на аппаратном уровне.

Прежде чем проверять свойства аппаратных ключей устройства в производственной среде, убедитесь, что устройство поддерживает аппаратную аттестацию ключей. Для этого проверьте, содержит ли цепочка сертификатов аттестации корневой сертификат, подписанный корневым ключом аттестации Google, и что элемент attestationSecurityLevel в структуре данных описания ключа установлен на уровень безопасности TrustedEnvironment или StrongBox .

Кроме того, важно проверить подписи в цепочке сертификатов и убедиться, что ни один из ключей в цепочке не был отозван, проверив список статусов отзыва сертификатов . Если все подписи недействительны и корневой ключ не является корневым ключом Google, не следует полностью доверять аттестации.

Получите и проверьте пару ключей, поддерживаемую аппаратным обеспечением.

В процессе аттестации ключей вы указываете псевдоним пары ключей и получаете цепочку сертификатов, которую можно использовать для проверки свойств этой пары ключей.

Если устройство поддерживает аппаратную аттестацию ключей, корневой сертификат в этой цепочке подписывается с использованием аттестационного корневого ключа, который надежно сохраняется в аппаратном хранилище ключей устройства.

Для внедрения аттестации ключей выполните следующие шаги:

  1. Используйте метод getCertificateChain() объекта KeyStore , чтобы получить ссылку на цепочку сертификатов X.509, связанных с аппаратным хранилищем ключей.
  2. Отправьте сертификаты на отдельный сервер, которому вы доверяете, для проверки.

    Внимание: Не выполняйте следующую проверку на одном и том же устройстве. Если система Android на этом устройстве скомпрометирована, это может привести к тому, что в процессе проверки будет доверено что-то ненадежное.

  3. Получите ссылку на библиотеку для анализа и проверки цепочек сертификатов X.509, наиболее подходящую для вашего набора инструментов. Убедитесь, что корневой открытый сертификат является надежным и что каждый сертификат подписывает следующий сертификат в цепочке.

  4. Проверьте статус отзыва каждого сертификата, чтобы убедиться, что ни один из сертификатов не был отозван.

  5. При желании можно проверить расширение сертификата, содержащее информацию о предоставлении доступа, которое присутствует только в более новых цепочках сертификатов.

    Получите ссылку на библиотеку парсера CBOR, наиболее подходящую для вашего набора инструментов. Найдите ближайший к корневому сертификату, содержащий расширение сертификата с информацией о предоставлении доступа . Используйте парсер для извлечения данных расширения сертификата с информацией о предоставлении доступа из этого сертификата.

    Более подробную информацию см. в разделе, посвященном расширению информации о предоставлении ресурсов .

  6. Получите ссылку на библиотеку парсера ASN.1, наиболее подходящую для вашего набора инструментов. Найдите ближайший к корневому сертификат, содержащий расширение сертификата подтверждения ключа . Если расширение сертификата информации о предоставлении ресурсов присутствовало, расширение сертификата подтверждения ключа должно присутствовать в непосредственно следующем сертификате. Используйте парсер для извлечения данных расширения сертификата подтверждения ключа из этого сертификата.

    Внимание: Не следует предполагать, что расширение сертификата подтверждения ключа находится в конечном сертификате цепочки. Доверять можно только первому вхождению расширения в цепочке. Любые последующие экземпляры расширения не были выпущены защищенным оборудованием и могли быть выпущены злоумышленником, расширяющим цепочку при попытке создать поддельные подтверждения для недоверенных ключей.

    В примере Key Attestation используется парсер ASN.1 от Bouncy Castle для извлечения данных расширения сертификата аттестации. Вы можете использовать этот пример в качестве образца для создания собственного парсера.

    Более подробную информацию см. в разделе, посвященном схеме данных расширения аттестации ключей .

  7. Проверьте согласованность данных расширения, полученных на предыдущих шагах, и сравните их с набором значений, которые, как вы ожидаете, должен содержать аппаратный ключ.

Корневые сертификаты

Достоверность аттестации зависит от корневого сертификата цепочки. Устройства Android, прошедшие тестирование, необходимое для установки пакета приложений Google, включая Google Play, и выпущенные с Android 7.0 (уровень API 24) или выше, должны использовать ключи аттестации, подписанные корневым сертификатом Google Hardware Attestation Root. Обратите внимание, что аттестация не требовалась до Android 8.0 (уровень API 26). Набор действительных корневых сертификатов можно загрузить в виде массива в формате JSON .

Корневые сертификаты

При проверке цепочки сертификатов подтверждения ключа в качестве доверенных точек следует использовать следующие два корневых сертификата.

-----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-----
  
Ранее выданные корневые сертификаты
-----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-----
  

Если корневой сертификат в полученной вами цепочке аттестации содержит этот открытый ключ, и ни один из сертификатов в цепочке не был отозван , то вы знаете, что:

  1. Ваш ключ находится в оборудовании, которое Google считает безопасным;
  2. Оно обладает свойствами, описанными в свидетельстве о подтверждении.

Если в цепочке аттестации присутствует какой-либо другой корневой открытый ключ, то Google не делает никаких заявлений о безопасности оборудования. Это не означает, что ваш ключ скомпрометирован, а лишь то, что аттестация не доказывает, что ключ находится в защищенном оборудовании. Соответственно скорректируйте свои предположения о безопасности.

Если корневой сертификат не содержит открытый ключ, указанный на этой странице, возможны две причины:

  • Вероятнее всего, устройство было выпущено с версией Android ниже 7.0 и не поддерживает аппаратную аттестацию. В этом случае Android имеет программную реализацию аттестации, которая создает аналогичный сертификат, но подписанный ключом , жестко закодированным в исходном коде Android . Поскольку этот ключ подписи не является секретом, аттестация могла быть создана злоумышленником, выдающим себя за создателя защищенного оборудования.
  • Другая вероятная причина заключается в том, что устройство не является устройством Google Play. В этом случае производитель устройства может свободно создать собственный корневой сертификат и определить значение данных аттестации. Обратитесь к документации производителя устройства. Следует отметить, что Google не располагает информацией о каких-либо производителях устройств, которые бы так поступили.

ротация корневого сертификата подтверждения оборудования

Google внедряет новый корневой сертификат для аттестации ключей Android . Это изменение повышает безопасность и надежность процесса аттестации для конфиденциальных приложений. Для аттестации ключей Android (KeyMint) был сгенерирован новый корневой ключ. Новый корневой ключ представляет собой ключ ECDSA P-384.

Что вам нужно сделать

  • Если ваше приложение использует аттестацию ключей Android, добавьте новый корневой сертификат в хранилище доверенных сертификатов до 31 марта 2026 года. Загрузите как новый, так и старый сертификаты по ссылке https://android.googleapis.com/attestation/root
  • Устройства, использующие технологию удаленного предоставления ключей (RKP), начнут получать сертификаты, основанные на этом новом сертификате, в феврале 2026 года. К 10 апреля 2026 года устройства с поддержкой RKP будут использовать исключительно новый корневой сертификат.
  • Обновите процессы аттестации, чтобы они доверяли как новому, так и существующему корневому сертификату. Более старые устройства с заводскими ключами не поддерживают смену ключей и продолжают использовать старый корневой сертификат.
  • Сама схема расширения сертификата останется неизменной; изменится только корневой сертификат.
  • Как удобочитаемая, так и машиночитаемая версии нового корневого кода будут доступны для публичного доступа.

Проверьте совместимость с новым корневым каталогом.

Чтобы убедиться в совместимости вашего приложения с новым корневым сертификатом, вы можете зарегистрировать тестовое устройство в бэкэнде Google RKP, чтобы оно получало сертификаты, подписанные новым корневым сертификатом. Выполните следующие шаги, чтобы протестировать ваше приложение с новым корневым сертификатом:

Предварительные требования

Убедитесь, что выполнены следующие требования:

  • Python 3
  • Отладочный мост Android (adb)
  • Устройство под управлением Android с заданной конфигурацией:
    • Используется Android 15 или выше.
    • Параметры разработчика включены .
    • Устройство поддерживает RKP. Большинство устройств, выпущенных в 2025 году и позже, поддерживают RKP. Вы можете проверить поддержку RKP, используя adb shell cmd remote_provisioning dump . В результате должна отобразиться следующая информация:
      default:
        hwVersion=[INTEGER]
        rpcAuthorName=[DEVICE MAKER]
          

Зарегистрируйте ваше устройство

Выполните следующие шаги, чтобы зарегистрировать ваше устройство.

  1. Загрузите инструмент для регистрации тестового устройства: google_root_register.py
  2. Запустите инструмент регистрации: python3 google_root_register.py
  3. Выполните сброс настроек устройства до заводских . Этот шаг необходим для удаления всех ранее предоставленных сертификатов.
  4. Убедитесь, что устройство получает сертификаты, подписанные новым корневым сертификатом, выполнив команду adb shell cmd remote_provisioning certify default . В результате будет получена цепочка сертификатов X.509 в формате PEM. Последний сертификат является корневым и должен соответствовать следующим параметрам:
    -----BEGIN CERTIFICATE-----
    MIICIjCCAaigAwIBAgIRAISp0Cl7DrWK5/8OgN52BgUwCgYIKoZIzj0EAwMwUjEcMBoGA1UEAwwTS2V5
    IEF0dGVzdGF0aW9uIENBMTEQMA4GA1UECwwHQW5kcm9pZDETMBEGA1UECgwKR29vZ2xlIExMQzELMAkG
    A1UEBhMCVVMwHhcNMjUwNzE3MjIzMjE4WhcNMzUwNzE1MjIzMjE4WjBSMRwwGgYDVQQDDBNLZXkgQXR0
    ZXN0YXRpb24gQ0ExMRAwDgYDVQQLDAdBbmRyb2lkMRMwEQYDVQQKDApHb29nbGUgTExDMQswCQYDVQQG
    EwJVUzB2MBAGByqGSM49AgEGBSuBBAAiA2IABCPaI3FO3z5bBQo8cuiEas4HjqCtG/mLFfRT0MsIssPB
    EEU5Cfbt6sH5yOAxqEi5QagpU1yX4HwnGb7OtBYpDTB57uH5Eczm34A5FNijV3s0/f0UPl7zbJcTx6xw
    qMIRq6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFFIyuyz7RkOb
    3NaBqQ5lZuA0QepAMAoGCCqGSM49BAMDA2gAMGUCMETfjPO/HwqReR2CS7p0ZWoD/LHs6hDi422opifH
    EUaYLxwGlT9SLdjkVpz0UUOR5wIxAIoGyxGKRHVTpqpGRFiJtQEOOTp/+s1GcxeYuR2zh/80lQyu9vAF
    Cj6E4AXc+osmRg==
    -----END CERTIFICATE-----
    
  5. Протестируйте приложение на устройстве.

Передовые методы

Не следует запрашивать у конечной точки информацию о доверенных корневых узлах во время выполнения, поскольку это создает риски безопасности. Изменения в доверенных корневых узлах следует обрабатывать с помощью формального процесса.

Постепенный отказ от заводских ключей: удаленная настройка ключей (RKP).

Для устройств, выпущенных с Android 16, система поддерживает только RKP. Эта политика постепенно отказывается от заводских ключей. Она улучшает процесс предоставления и управления ключами аттестации, расширяя возможности политики Android 15, где поддержка RKP была необязательной. RKP предотвращает утечку ключей, поскольку система не программирует ключи непосредственно на устройство. Вы не можете удалить эти ключи с устройства. Если вам необходимо отозвать ключ, вы можете сделать это для одного конкретного устройства.

Библиотеки аттестационной проверки

Используйте библиотеку Kotlin для проверки цепочек сертификатов Key Attestation. Более того, эта библиотека уже интегрирует новые корневые сертификаты . Если вы используете другой верификатор, мы рекомендуем перейти на библиотеку Kotlin. Она хорошо протестирована и охватывает граничные случаи, которые часто упускаются пользовательскими верификаторами.

список статусов аннулирования сертификатов

Ключи аттестации могут быть отозваны по ряду причин, включая некорректное обращение или подозрение на их извлечение злоумышленником. Поэтому крайне важно проверять статус каждого сертификата в цепочке аттестации по официальному списку статусов отзыва сертификатов (CRL). Этот список поддерживается Google и публикуется по адресу: https://android.googleapis.com/attestation/status . Заголовок Cache-Control в HTTP-ответе определяет, как часто следует проверять наличие обновлений, поэтому сетевой запрос не требуется для каждого проверяемого сертификата. Этот URL-адрес возвращает JSON-файл, содержащий статус отзыва для всех сертификатов, которые не имеют обычного действительного статуса. Формат JSON-файла соответствует следующему определению JSON Schema ( проект 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
}

Пример списка отозванных клиентов (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"
    }
  }
}

Политика аннулирования сертификатов

Аттестация является основой противодействия злоупотреблениям и обеспечения доверия в экосистеме Android. Она предоставляет криптографически проверяемое подтверждение внешнему пользователю о состоянии устройства после загрузки.

Сертификаты для ключей аттестации Android будут отозваны в случае компрометации ключей из-за критической важности действительности аттестации. В этом разделе изложена политика отзыва сертификатов. Эта политика, вероятно, будет развиваться и включать дополнительные случаи со временем.

Что является основанием для отзыва лицензии?

Утечка аттестационных ключей всегда может привести к аннулированию сертификатов. Утечки можно обнаружить несколькими способами, в том числе:

  • Анализ данных аттестации в реальных условиях.
  • Обнаружение ключей аттестации в социальных сетях или на других общедоступных сайтах.
  • Отчеты получены непосредственно от исследователей в области безопасности.

После обнаружения утечки сертификаты аттестации будут аннулированы путем внесения их серийных номеров в список аннулированных . Как правило, это происходит в течение нескольких дней после обнаружения, но в редких случаях может занять больше времени. Например, аннулирование сертификатов для утёкших ключей аттестации обычно задерживается, если устройства, затронутые аннулированием, могут быть безопасно перенастроены. Масштаб последствий аннулирования также является важным фактором, влияющим на сроки аннулирования.

Схема данных расширения аттестации ключа

Схема данных расширения информации о предоставлении ресурсов