Memverifikasi pasangan kunci yang didukung hardware dengan pengesahan kunci

Pengesahan Kunci memberi Anda keyakinan lebih bahwa kunci yang Anda gunakan dalam aplikasi disimpan dalam keystore yang didukung hardware perangkat. Bagian berikut menjelaskan cara memverifikasi properti kunci yang didukung hardware dan cara menafsirkan data ekstensi sertifikat pengesahan.

Sebelum memulai: pastikan perangkat Anda mendukung pengesahan kunci level hardware

Sebelum Anda memverifikasi properti kunci yang didukung hardware di perangkat dalam lingkungan level produksi, pastikan perangkat tersebut mendukung pengesahan kunci level hardware. Untuk melakukannya, pastikan rantai sertifikat pengesahan berisi root certificate yang ditandatangani oleh kunci utama pengesahan Google dan elemen attestationSecurityLevel dalam deskripsi kunci struktur data disetel ke tingkat keamanan TrustedEnvironment atau ke tingkat keamanan StrongBox.

Selain itu, penting untuk memverifikasi tanda tangan dalam rantai sertifikat dan mengonfirmasi tidak ada kunci dalam rantai yang dicabut dengan memeriksa daftar status pencabutan sertifikat. Jangan sepenuhnya memercayai pengesahan tersebut, kecuali jika semuanya valid dan root adalah kunci utama Google.

Mengambil dan memverifikasi pasangan kunci yang didukung hardware

Selama pengesahan kunci, Anda menentukan alias pasangan kunci dan mengambil rantai sertifikatnya, yang dapat Anda gunakan untuk memverifikasi properti pasangan kunci tersebut.

Jika perangkat mendukung pengesahan kunci level hardware, root certificate dalam rantai ditandatangani menggunakan kunci utama pengesahan yang disediakan dengan aman ke keystore yang didukung hardware di perangkat.

Untuk mengimplementasikan pengesahan kunci, lakukan langkah-langkah berikut:

  1. Gunakan metode getCertificateChain() objek KeyStore untuk mendapatkan referensi ke rantai sertifikat X.509 yang terkait dengan keystore yang didukung hardware.
  2. Kirim sertifikat ke server terpisah yang Anda percayai untuk validasi.

    Perhatian: Jangan selesaikan proses validasi berikut di perangkat yang sama. Jika sistem Android pada perangkat tersebut disusupi, proses validasi menjadi bisa memercayai sesuatu yang tidak dapat dipercaya.

  3. Dapatkan referensi ke library validasi dan penguraian rantai sertifikat X.509 yang paling sesuai untuk rangkaian alat Anda. Pastikan bahwa root certificate publik dapat dipercaya dan setiap sertifikat menandatangani sertifikat berikutnya di dalam rantai.

  4. Periksa status pencabutan setiap sertifikat untuk memastikan tidak ada sertifikat yang dicabut.

  5. Periksa ekstensi sertifikat informasi penyediaan yang hanya berada dalam rantai sertifikat yang lebih baru secara opsional.

    Dapatkan referensi ke library parser CBOR yang paling sesuai untuk rangkaian alat Anda. Temukan sertifikat terdekat ke root yang berisi ekstensi sertifikat informasi penyediaan. Gunakan parser untuk mengekstrak data ekstensi sertifikat informasi penyediaan dari sertifikat tersebut.

    Lihat bagian ekstensi informasi penyediaan untuk mengetahui detail selengkapnya.

  6. Dapatkan referensi ke library parser ASN.1 yang paling sesuai untuk rangkaian alat Anda. Temukan sertifikat terdekat ke root yang berisi ekstensi sertifikat pengesahan kunci. Jika ada ekstensi sertifikat informasi penyediaan, ekstensi sertifikat pengesahan kunci harus berada dalam sertifikat berikutnya secara langsung. Gunakan parser untuk mengekstrak data ekstensi sertifikat pengesahan kunci dari sertifikat tersebut.

    Perhatian: Jangan berasumsi bahwa ekstensi sertifikat pengesahan kunci berada dalam sertifikat entitas akhir rantai. Hanya kemunculan ekstensi pertama dalam rantai yang dapat dipercaya. Setiap instance ekstensi lebih lanjut belum dikeluarkan oleh hardware yang aman dan dapat dikeluarkan oleh penyerang yang memperluas rantai sambil mencoba membuat pengesahan palsu untuk kunci yang tidak tepercaya.

    Sampel Pengesahan Kunci menggunakan parser ASN.1 dari Bouncy Castle untuk mengekstrak data ekstensi sertifikat pengesahan. Anda dapat menggunakan sampel ini sebagai referensi untuk membuat parser Anda sendiri.

    Lihat bagian skema data ekstensi pengesahan kunci untuk mengetahui detail selengkapnya.

  7. Periksa konsistensi data ekstensi yang telah Anda ambil pada langkah sebelumnya, dan bandingkan dengan kumpulan nilai yang Anda harapkan untuk dimuat oleh kunci yang didukung hardware.

Root certificate

Validitas pengesahan tergantung pada root certificate rantai. Perangkat Android yang telah lulus pengujian harus memiliki rangkaian aplikasi Google, termasuk Google Play, dan yang diluncurkan dengan Android 7.0 (API level 24) atau lebih tinggi harus menggunakan kunci pengesahan yang ditandatangani oleh sertifikat Root Pengesahan Hardware Google. Perhatikan bahwa pengesahan tidak diperlukan hingga Android 8.0 (level API 26). Kumpulan root certificate yang valid dapat didownload sebagai a array berformat JSON.

Root Certificate

Dua root certificate berikut harus digunakan sebagai anchor tepercaya saat memverifikasi rantai sertifikat pengesahan kunci.

-----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-----
  
Root Certificate yang Sudah Diterbitkan Sebelumnya
-----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-----
  

Jika root certificate dalam rantai pengesahan yang Anda terima berisi kunci publik dan tidak ada sertifikat dalam rantai yang dicabut, Anda dapat memastikan bahwa:

  1. Kunci Anda berada di hardware yang Google yakini aman; dan
  2. Kunci memiliki properti yang dijelaskan dalam sertifikat pengesahan.

Jika rantai pengesahan memiliki root kunci publik lain, Google tidak membuat klaim apa pun tentang keamanan hardware. Hal ini tidak berarti kunci Anda disusupi, hanya saja pengesahan tidak membuktikan kunci tersebut berada dalam hardware yang aman. Sesuaikan asumsi keamanan Anda dengan semestinya.

Jika root certificate tidak berisi kunci publik di halaman ini, ada dua kemungkinan alasan:

  • Kemungkinan besar, perangkat diluncurkan dengan versi Android kurang dari 7.0 dan tidak mendukung pengesahan hardware. Dalam hal ini, Android memiliki implementasi software pengesahan yang menghasilkan sertifikat pengesahan yang sama, tetapi ditandatangani dengan kunci hardcode dalam kode sumber Android. Karena kunci penandatanganan ini tidak bersifat rahasia, pengesahan dapat dibuat oleh penyerang yang berpura-pura menyediakan hardware yang aman.
  • Kemungkinan alasan lainnya adalah perangkat tersebut bukan perangkat Google Play. Dalam hal ini, pembuat perangkat bebas untuk membuat root certificate mereka sendiri dan menentukan arti data pengesahan mereka. Lihat dokumentasi pembuat perangkat. Perhatikan bahwa Google tidak mengetahui adanya pembuat perangkat yang telah melakukan hal tersebut.

Rotasi root certificate pengesahan hardware

Google memperkenalkan root certificate baru untuk Pengesahan Kunci Android. Perubahan ini meningkatkan keamanan dan keandalan proses pengesahan untuk aplikasi sensitif. Kunci root baru telah dibuat untuk Pengesahan Kunci Android (KeyMint). Root baru adalah kunci ECDSA P-384.

Yang perlu dilakukan

  • Jika aplikasi Anda mengandalkan Pengesahan Kunci Android, tambahkan root certificate baru ke penyimpanan tepercaya Anda paling lambat 31 Maret 2026. Download sertifikat baru dan lama dari https://android.googleapis.com/attestation/root
  • Perangkat yang menggunakan Penyediaan Kunci Jarak Jauh (RKP) akan mulai menerima sertifikat yang di-root di sertifikat baru ini pada Februari 2026. Perangkat yang mendukung RKP akan menggunakan root baru secara eksklusif paling lambat 10 April 2026.
  • Perbarui proses pengesahan Anda untuk memercayai root certificate baru dan yang sudah ada. Perangkat lama dengan kunci yang disediakan pabrik tidak mendukung rotasi kunci dan terus menggunakan root lama.
  • Skema ekstensi sertifikat itu sendiri tidak akan berubah; hanya root yang berubah.
  • Bentuk root baru yang dapat dibaca manusia dan mesin akan tersedia secara publik.

Praktik Terbaik

Jangan kueri endpoint untuk root tepercaya saat runtime, karena tindakan ini menimbulkan risiko keamanan. Tangani perubahan pada root tepercaya melalui proses formal.

Menghapus kunci pabrik: Penyediaan Kunci Jarak Jauh (RKP)

Untuk perangkat yang diluncurkan dengan Android 16, sistem hanya mendukung RKP. Kebijakan ini menghapus kunci pabrik. Kebijakan ini meningkatkan cara Anda menyediakan dan mengelola kunci pengesahan, yang memperluas kebijakan Android 15 yang dukungan RKP-nya bersifat opsional. RKP mencegah kebocoran kunci karena sistem tidak memprogram kunci langsung ke perangkat. Anda tidak dapat menghapus kunci ini dari perangkat. Jika harus mencabut kunci, Anda dapat menargetkan pencabutan ke satu perangkat.

Library verifikasi pengesahan

Gunakan library Kotlin verifikasi pengesahan untuk memverifikasi rantai sertifikat Pengesahan Kunci. Selain itu, library ini sudah mengintegrasikan root certificate baru. Jika Anda menggunakan verifikator lain, sebaiknya beralih ke library Kotlin. Library ini telah diuji dengan baik, dan mencakup kasus ekstrem yang sering terlewat oleh verifikator kustom.

Daftar status pencabutan sertifikat

Kunci pengesahan dapat dicabut karena berbagai alasan, termasuk kesalahan penanganan atau dugaan ekstraksi oleh penyerang. Oleh karena itu, status setiap sertifikat dalam rantai pengesahan harus diperiksa dengan daftar status pencabutan sertifikat (CRL) resmi. Daftar ini dikelola oleh Google dan dipublikasikan di: https://android.googleapis.com/attestation/status. Header Cache-Control dalam respons HTTP menentukan seberapa sering pemeriksaan update dilakukan sehingga tidak diperlukan permintaan jaringan untuk setiap sertifikat yang diverifikasi. URL ini menampilkan file JSON yang berisi status pencabutan sertifikat apa pun yang tidak memiliki status valid yang normal. Format file JSON mematuhi definisi Skema JSON (draf 07) berikut:

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

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

Kebijakan pencabutan sertifikat

Pengesahan membentuk tulang punggung upaya melawan penyalahgunaan dan kepercayaan dalam ekosistem Android. Pengesahan memberikan pernyataan yang dapat diverifikasi secara kriptografis kepada pihak di luar perangkat tentang status booting perangkat.

Sertifikat untuk kunci pengesahan Android akan dicabut jika kunci tersebut disusupi, karena sifat penting validitas pengesahan. Bagian ini menguraikan kebijakan tentang kapan sertifikat dicabut. Kebijakan ini kemungkinan akan berkembang dan mencantumkan kasus tambahan dari waktu ke waktu.

Apa yang memenuhi syarat untuk pencabutan?

Kunci pengesahan yang telah bocor selalu memenuhi syarat untuk dicabut sertifikatnya. Kebocoran dapat ditemukan dengan beberapa cara, termasuk:

  • Analisis data pengesahan di luar.
  • Penemuan kunci pengesahan di media sosial atau situs publik lainnya.
  • Laporan langsung dari peneliti keamanan.

Setelah ditemukan, sertifikat pengesahan akan dicabut dengan menambahkan nomor serinya ke daftar pencabutan. Biasanya hal ini akan terjadi dalam beberapa hari setelah penemuan, tetapi mungkin memerlukan waktu lebih lama dalam kasus yang jarang terjadi. Misalnya, pencabutan sertifikat untuk kunci pengesahan yang bocor biasanya ditunda jika perangkat yang terpengaruh oleh pencabutan dapat disediakan ulang dengan aman. Skala dampak pencabutan juga merupakan faktor penting dalam linimasa pencabutan.

Skema data ekstensi pengesahan kunci

Skema data ekstensi informasi penyediaan