Xác minh cặp khoá dựa trên phần cứng bằng chứng thực khoá

Chứng thực khoá giúp bạn yên tâm hơn khi các khoá bạn dùng trong ứng dụng được lưu trữ trong kho khoá dựa trên phần cứng của thiết bị. Những phần sau đây mô tả cách xác minh các thuộc tính của khoá dựa trên phần cứng và cách diễn giải dữ liệu của tiện ích chứng chỉ chứng thực.

Trước khi bắt đầu: đảm bảo thiết bị của bạn hỗ trợ quy trình chứng thực khoá ở cấp độ phần cứng

Trước khi bạn xác minh các thuộc tính của khoá dựa trên phần cứng trên thiết bị trong môi trường cấp sản xuất, hãy đảm bảo rằng thiết bị hỗ trợ quy trình chứng thực khoá ở cấp độ phần cứng. Để thực hiện việc này, hãy kiểm tra nhằm đảm bảo rằng chuỗi chứng chỉ chứng thực có chứa chứng chỉ gốc được ký bằng khoá gốc của chứng thực Google và phần tử attestationSecurityLevel trong cấu trúc dữ liệu mô tả khoá được đặt thành mức an ninh TrustedEnvironment hoặc mức an ninh StrongBox.

Ngoài ra, bạn cần xác minh các chữ ký trong chuỗi chứng chỉ và xác nhận rằng không có khoá nào trong chuỗi đã bị thu hồi bằng cách kiểm tra danh sách trạng thái thu hồi chứng chỉ. Trừ phi tất cả đều hợp lệ và gốc là khoá gốc của Google, đừng hoàn toàn tin tưởng vào việc chứng thực.

Truy xuất và xác minh cặp khoá dựa trên phần cứng

Trong quá trình chứng thực khoá, bạn chỉ định email đại diện của một cặp khoá và truy xuất chuỗi chứng chỉ của cặp khoá đó. Bạn có thể sử dụng chuỗi chứng chỉ này để xác minh các thuộc tính của cặp khoá đó.

Nếu thiết bị hỗ trợ Chứng thực khoá ở cấp độ phần cứng, thì chứng chỉ gốc trong chuỗi này sẽ được ký bằng một khoá gốc của chứng thực (được cấp phép an toàn cho kho khoá dựa trên phần cứng của thiết bị).

Để triển khai quy trình chứng thực khoá, hãy hoàn tất các bước sau:

  1. Sử dụng phương thức getCertificateChain() của đối tượng KeyStore để lấy thông tin tham chiếu đến chuỗi chứng chỉ X.509 liên kết với kho khoá dựa trên phần cứng.
  2. Gửi chứng chỉ đến một máy chủ riêng biệt mà bạn tin tưởng để xác thực.

    Thận trọng: Không thực hiện quy trình xác thực sau đây trên cùng một thiết bị. Nếu hệ thống Android trên thiết bị đó bị xâm phạm, điều này có thể khiến quy trình xác thực tin tưởng nội dung không đáng tin cậy.

  3. Lấy thông tin tham chiếu đến thư viện xác thực và phân tích cú pháp chuỗi chứng chỉ X.509 phù hợp nhất với bộ công cụ của bạn. Xác minh rằng chứng chỉ gốc công khai là đáng tin cậy và mỗi chứng chỉ sẽ ký chứng chỉ tiếp theo trong chuỗi.

  4. Kiểm tra trạng thái thu hồi của từng chứng chỉ để đảm bảo rằng không có chứng chỉ nào bị thu hồi.

  5. Bạn có thể tuỳ ý kiểm tra tiện ích chứng chỉ thông tin cấp phép chỉ có trong các chuỗi chứng chỉ mới.

    Lấy thông tin tham chiếu đến thư viện trình phân tích cú pháp CBOR phù hợp nhất với bộ công cụ của bạn. Tìm chứng chỉ gần với chứng chỉ gốc nhất có chứa tiện ích chứng chỉ thông tin cấp phép. Sử dụng trình phân tích cú pháp để trích xuất dữ liệu của tiện ích chứng chỉ thông tin cấp phép từ chứng chỉ đó.

    Hãy xem phần về tiện ích thông tin cấp phép để biết thêm thông tin.

  6. Lấy thông tin tham chiếu đến thư viện trình phân tích cú pháp ASN.1 phù hợp nhất với bộ công cụ của bạn. Tìm chứng chỉ gần với chứng chỉ gốc nhất có chứa tiện ích chứng chỉ chứng thực khoá. Nếu có tiện ích chứng chỉ thông tin cấp phép, thì tiện ích chứng chỉ chứng thực khoá phải có trong chứng chỉ ngay sau đó. Sử dụng trình phân tích cú pháp để trích xuất dữ liệu của tiện ích chứng chỉ chứng thực khoá từ chứng chỉ đó.

    Thận trọng: Đừng giả định rằng tiện ích chứng chỉ chứng thực khoá nằm trong leaf certificate của chuỗi. Chỉ có thể tin tưởng lần xuất hiện đầu tiên của tiện ích trong chuỗi. Mọi phiên bản tiếp theo của tiện ích chưa được phần cứng bảo mật phát hành và có thể đã bị kẻ tấn công mở rộng chuỗi phát hành trong khi tìm cách tạo chứng thực giả mạo cho các khoá không tin cậy.

    Mẫu Chứng thực khoá sử dụng trình phân tích cú pháp ASN.1 từ Bouncy Castle để trích xuất dữ liệu tiện ích của chứng chỉ chứng thực. Bạn có thể sử dụng mẫu này làm tài liệu tham khảo để tạo trình phân tích cú pháp của riêng mình.

    Hãy xem phần về giản đồ dữ liệu của tiện ích chứng thực khoá để biết thêm thông tin.

  7. Kiểm tra dữ liệu của tiện ích mà bạn đã truy xuất ở các bước trước để đảm bảo tính nhất quán và so sánh với tập hợp các giá trị mà bạn mong đợi có trong khoá dựa trên phần cứng.

Chứng chỉ gốc

Mức độ đáng tin cậy của quy trình chứng thực phụ thuộc vào chứng chỉ gốc của chuỗi. Các thiết bị Android (vượt qua quy trình kiểm tra) bắt buộc phải có bộ ứng dụng của Google, bao gồm cả Google Play và các thiết bị chạy bằng Android 7.0 (API cấp 24) trở lên phải sử dụng khoá chứng thực được ký bằng Chứng chỉ gốc chứng thực phần cứng của Google. Lưu ý rằng việc chứng thực là không bắt buộc cho đến Android 8.0 (API cấp 26). Bạn có thể tải tập hợp chứng chỉ gốc hợp lệ xuống dưới dạng một mảng ở định dạng JSON.

Chứng chỉ gốc

Bạn nên sử dụng 2 chứng chỉ gốc sau đây làm neo tin cậy khi xác minh chuỗi chứng chỉ chứng thực khoá.

-----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-----
  
Chứng chỉ gốc đã phát hành trước đây
-----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-----
  

Nếu chứng chỉ gốc trong chuỗi chứng thực mà bạn nhận được chứa khoá công khai này và không có chứng chỉ nào trong chuỗi đó bị thu hồi, thì bạn biết rằng:

  1. Khoá của bạn nằm trong phần cứng mà Google cho là bảo mật; và
  2. Khoá này có các thuộc tính được mô tả trong chứng chỉ chứng thực.

Nếu chuỗi chứng thực có bất kỳ khoá gốc công khai nào khác, thì Google sẽ không đưa ra tuyên bố về tính bảo mật của phần cứng. Điều này không có nghĩa là khoá của bạn bị xâm phạm mà chỉ là quy trình chứng thực không chứng minh được khoá nằm trong phần cứng bảo mật. Hãy điều chỉnh các giả định mà bạn đưa ra về bảo mật sao cho phù hợp.

Việc chứng chỉ gốc không chứa khoá công khai có thể là vì một trong hai lý do sau:

  • Nhiều khả năng nhất là thiết bị chạy Android phiên bản dưới 7.0 và phiên bản này không hỗ trợ quy trình chứng thực phần cứng. Trong trường hợp này, Android có một cách triển khai quy trình chứng thực bằng phần mềm. Quy trình này tạo ra cùng một loại chứng chỉ chứng thực, nhưng được ký bằng một khoá cố định giá trị trong mã nguồn của Android. Vì khoá ký này không phải là khoá bí mật nên quy trình chứng thực có thể đã do kẻ tấn công tạo ra để giả vờ cung cấp phần cứng bảo mật.
  • Một lý do khác có thể là thiết bị đó không phải của Google Play. Trong trường hợp đó, nhà sản xuất thiết bị có thể tuỳ ý tạo chứng chỉ gốc riêng và xác định ý nghĩa của dữ liệu chứng thực. Hãy tham khảo tài liệu của nhà sản xuất thiết bị. Lưu ý rằng Google không biết bất kỳ nhà sản xuất thiết bị nào đã thực hiện việc này.

Xoay vòng chứng chỉ gốc chứng thực phần cứng

Google đang giới thiệu một chứng chỉ gốc mới cho quy trình Chứng thực khoá Android. Thay đổi này giúp tăng cường tính bảo mật và độ tin cậy của quy trình chứng thực cho các ứng dụng nhạy cảm. Một khoá gốc mới đã được tạo cho quy trình Chứng thực khoá Android (KeyMint). Gốc mới là khoá ECDSA P-384.

Việc cần làm

  • Nếu ứng dụng của bạn dựa vào quy trình Chứng thực khoá Android, hãy thêm chứng chỉ gốc mới vào kho tin cậy của bạn trước ngày 31 tháng 3 năm 2026. Tải cả chứng chỉ mới và cũ xuống từ https://android.googleapis.com/attestation/root
  • Các thiết bị sử dụng quy trình Cấp phép khoá từ xa (RKP) sẽ bắt đầu nhận chứng chỉ gốc trong chứng chỉ mới này vào tháng 2 năm 2026. Các thiết bị hỗ trợ RKP sẽ chỉ sử dụng gốc mới trước ngày 10 tháng 4 năm 2026.
  • Cập nhật quy trình chứng thực để tin tưởng cả chứng chỉ gốc mới và hiện có. Các thiết bị cũ có khoá được cấp phép tại nhà máy không hỗ trợ xoay vòng khoá và tiếp tục sử dụng gốc cũ.
  • Bản thân giản đồ tiện ích chứng chỉ sẽ không thay đổi; chỉ có gốc thay đổi.
  • Cả dạng có thể đọc được và dạng máy có thể đọc được của gốc mới sẽ được cung cấp công khai.

Các phương pháp hay nhất

Đừng truy vấn một điểm cuối để tìm các gốc tin cậy trong thời gian chạy, vì hành động này tạo ra các rủi ro về bảo mật. Xử lý các thay đổi đối với gốc tin cậy thông qua một quy trình chính thức.

Giai đoạn loại bỏ các khoá tại nhà máy: Cấp phép khoá từ xa (RKP)

Đối với các thiết bị chạy Android 16, hệ thống chỉ hỗ trợ RKP. Chính sách này loại bỏ các khoá tại nhà máy. Chính sách này cải thiện cách bạn cấp phép và quản lý các khoá chứng thực, mở rộng chính sách Android 15 (trong đó hỗ trợ RKP là không bắt buộc). RKP ngăn chặn rò rỉ khoá vì hệ thống không lập trình khoá trực tiếp vào thiết bị. Bạn không thể xoá các khoá này khỏi thiết bị. Nếu phải thu hồi một khoá, bạn có thể nhắm mục tiêu thu hồi vào một thiết bị.

Thư viện xác minh chứng thực

Sử dụng thư viện Kotlin xác minh chứng thực để xác minh các chuỗi chứng chỉ Chứng thực khoá. Ngoài ra, thư viện này đã tích hợp các chứng chỉ gốc mới. Nếu bạn đang sử dụng một trình xác minh khác, bạn nên chuyển sang thư viện Kotlin. Thư viện này đã được kiểm thử kỹ lưỡng và bao gồm các trường hợp đặc biệt mà trình xác minh tuỳ chỉnh thường bỏ lỡ.

Danh sách trạng thái thu hồi chứng chỉ

Khoá chứng thực có thể bị thu hồi vì một số lý do, bao gồm cả việc kẻ tấn công sử dụng sai hoặc có hành vi trích xuất đáng ngờ. Do đó, điều quan trọng là phải kiểm tra trạng thái của từng chứng chỉ trong chuỗi chứng thực dựa vào danh sách trạng thái thu hồi chứng chỉ (CRL) chính thức. Danh sách này do Google duy trì và xuất bản tại: https://android.googleapis.com/attestation/status. Tiêu đề Cache-Control trong phản hồi HTTP xác định tần suất kiểm tra các bản cập nhật. Vì vậy, bạn không cần phải có yêu cầu mạng cho mọi chứng chỉ đang được xác minh. URL này trả về một tệp JSON chứa trạng thái thu hồi của mọi chứng chỉ không có trạng thái hợp lệ và bình thường. Định dạng của tệp JSON tuân thủ định nghĩa về Giản đồ JSON (bản nháp 07) sau đây:

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

Ví dụ về 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"
    }
  }
}

Chính sách thu hồi chứng chỉ

Chứng thực tạo thành xương sống của việc chống lạm dụng và tin cậy trong hệ sinh thái Android. Chứng thực cung cấp một câu lệnh có thể xác minh bằng mật mã cho các bên ngoài thiết bị về trạng thái khởi động của thiết bị.

Các chứng chỉ cho khoá chứng thực Android sẽ bị thu hồi khi các khoá bị xâm phạm, do tính chất quan trọng của tính hợp lệ của chứng thực. Phần này trình bày chính sách về thời điểm thu hồi chứng chỉ. Chính sách này có thể sẽ phát triển và liệt kê thêm các trường hợp theo thời gian.

Điều kiện để thu hồi là gì?

Các khoá chứng thực bị rò rỉ luôn đủ điều kiện để bị thu hồi chứng chỉ. Bạn có thể phát hiện rò rỉ theo một số cách, bao gồm:

  • Phân tích dữ liệu chứng thực trong thực tế.
  • Phát hiện các khoá chứng thực trên mạng xã hội hoặc các trang công khai khác.
  • Báo cáo trực tiếp từ các nhà nghiên cứu bảo mật.

Sau khi phát hiện, các chứng chỉ chứng thực sẽ bị thu hồi bằng cách thêm số sê-ri của chúng vào danh sách thu hồi. Thông thường việc này sẽ diễn ra trong vòng vài ngày kể từ khi phát hiện, nhưng có thể mất nhiều thời gian hơn trong một số trường hợp hiếm gặp. Ví dụ: việc thu hồi chứng chỉ cho các khoá chứng thực bị rò rỉ thường bị trì hoãn nếu các thiết bị bị ảnh hưởng bởi việc thu hồi có thể được cấp phép lại một cách an toàn. Quy mô tác động của việc thu hồi cũng là một yếu tố quan trọng trong thời gian thu hồi.

Giản đồ dữ liệu của tiện ích chứng thực khoá

Cung cấp giản đồ dữ liệu của tiện ích thông tin