ยืนยันคู่คีย์แบบใช้ฮาร์ดแวร์ด้วยเอกสารรับรองคีย์

การรับรองคีย์ช่วยให้คุณมั่นใจได้มากขึ้นว่าคีย์ที่คุณใช้ในแอป จะจัดเก็บไว้ในที่เก็บคีย์ที่ได้รับการสนับสนุนจากฮาร์ดแวร์ของอุปกรณ์ ส่วนต่อไปนี้ จะอธิบายวิธียืนยันพร็อพเพอร์ตี้ของคีย์ที่ได้รับการสนับสนุนจากฮาร์ดแวร์และวิธี ตีความข้อมูลส่วนขยายของใบรับรองการรับรอง

ก่อนเริ่มต้นใช้งาน โปรดตรวจสอบว่าอุปกรณ์รองรับการรับรองคีย์ระดับฮาร์ดแวร์

ก่อนยืนยันพร็อพเพอร์ตี้ของคีย์ที่ใช้ฮาร์ดแวร์ของอุปกรณ์ใน สภาพแวดล้อมระดับการใช้งานจริง โปรดตรวจสอบว่าอุปกรณ์รองรับ เอกสารรับรองคีย์ระดับฮาร์ดแวร์ โดยตรวจสอบว่าเชนใบรับรองการรับรอง มีใบรับรองรูทที่ลงนามด้วยคีย์รูทการรับรองของ Google และตั้งค่าองค์ประกอบ attestationSecurityLevel ภายในโครงสร้างข้อมูลคำอธิบายคีย์ เป็นระดับการรักษาความปลอดภัย TrustedEnvironment หรือระดับการรักษาความปลอดภัย StrongBox

นอกจากนี้ คุณควรยืนยันลายเซ็นในห่วงโซ่ใบรับรอง และยืนยันว่าไม่มีคีย์ใดในห่วงโซ่ที่ถูกเพิกถอนโดยการตรวจสอบรายการสถานะการเพิกถอนใบรับรอง อย่าเชื่อถือการรับรองอย่างเต็มที่ เว้นแต่ว่าทั้งหมดจะถูกต้องและรูทเป็นคีย์รูทของ Google

เรียกข้อมูลและยืนยันคู่คีย์อิงฮาร์ดแวร์

ในระหว่างการรับรองคีย์ คุณจะระบุนามแฝงของคู่คีย์และเรียกเชนใบรับรองของคู่คีย์นั้น ซึ่งคุณสามารถใช้เพื่อยืนยันพร็อพเพอร์ตี้ของคู่คีย์นั้นได้

หากอุปกรณ์รองรับเอกสารรับรองคีย์ระดับฮาร์ดแวร์ ระบบจะลงนามในใบรับรองรูท ภายในเชนนี้โดยใช้คีย์รูทของเอกสารรับรองที่จัดสรรอย่างปลอดภัย ไปยังที่เก็บคีย์อิงฮาร์ดแวร์ของอุปกรณ์

หากต้องการใช้การรับรองคีย์ ให้ทำตามขั้นตอนต่อไปนี้

  1. ใช้เมธอด KeyStore ของออบเจ็กต์ getCertificateChain() เพื่อรับการอ้างอิงไปยังเชนของใบรับรอง X.509 ที่เชื่อมโยงกับ ที่เก็บคีย์ที่อิงฮาร์ดแวร์
  2. ส่งใบรับรองไปยังเซิร์ฟเวอร์อื่นที่คุณเชื่อถือเพื่อทำการตรวจสอบ

    ข้อควรระวัง: อย่าดำเนินการตรวจสอบต่อไปนี้ให้เสร็จสมบูรณ์ ในอุปกรณ์เดียวกัน หากระบบ Android ในอุปกรณ์นั้นถูกบุกรุก กระบวนการตรวจสอบอาจเชื่อถือสิ่งที่ไม่น่าเชื่อถือ ได้

  3. รับข้อมูลอ้างอิงถึงการแยกวิเคราะห์และการตรวจสอบห่วงโซ่ใบรับรอง X.509 ซึ่งเป็นไลบรารีที่เหมาะสมที่สุดสำหรับชุดเครื่องมือของคุณ ตรวจสอบว่าใบรับรองสาธารณะของรูท เชื่อถือได้ และใบรับรองแต่ละใบเซ็น ใบรับรองถัดไปในเชน

  4. ตรวจสอบสถานะการเพิกถอนของใบรับรองแต่ละรายการ เพื่อให้แน่ใจว่าไม่มีใบรับรองใดถูกเพิกถอน

  5. หรือจะตรวจสอบส่วนขยายใบรับรองข้อมูลการจัดสรรซึ่ง มีเฉพาะในห่วงโซ่ใบรับรองที่ใหม่กว่าก็ได้

    รับการอ้างอิงไปยังไลบรารีตัวแยกวิเคราะห์ CBOR ที่เหมาะสมที่สุดสำหรับชุดเครื่องมือของคุณ ค้นหาใบรับรองที่ใกล้เคียงกับรูทมากที่สุดซึ่งมี ส่วนขยายใบรับรองข้อมูลการจัดสรร ใช้ตัวแยกวิเคราะห์เพื่อดึงข้อมูลการจัดสรร ข้อมูลส่วนขยายใบรับรองจากใบรับรองนั้น

    ดูรายละเอียดเพิ่มเติมได้ที่ส่วนเกี่ยวกับ ส่วนขยายข้อมูลการจัดสรร

  6. รับการอ้างอิงไปยังไลบรารีตัวแยกวิเคราะห์ ASN.1 ที่เหมาะสมที่สุด สำหรับชุดเครื่องมือของคุณ ค้นหาใบรับรองที่ใกล้เคียงกับรูทมากที่สุดซึ่งมี ส่วนขยายใบรับรองการรับรองคีย์ หากมีส่วนขยายใบรับรองข้อมูลการจัดสรร ส่วนขยายใบรับรองการรับรองคีย์ ต้องอยู่ในใบรับรองที่ตามมาทันที ใช้ เครื่องมือแยกวิเคราะห์เพื่อดึงข้อมูลส่วนขยายใบรับรองการรับรองคีย์จาก ใบรับรองนั้น

    ข้อควรระวัง: อย่าคิดว่าส่วนขยายใบรับรองการรับรองคีย์ อยู่ในใบรับรองลีฟของเชน เชื่อถือได้เฉพาะ ส่วนขยายที่ปรากฏครั้งแรกในห่วงโซ่เท่านั้น อินสแตนซ์อื่นๆ ของส่วนขยายไม่ได้ออกโดยฮาร์ดแวร์ที่ปลอดภัย และอาจออกโดยผู้โจมตีที่ขยายห่วงโซ่ขณะพยายามสร้างการรับรองปลอมสำหรับคีย์ที่ไม่น่าเชื่อถือ

    ตัวอย่างการรับรองคีย์ใช้ตัวแยกวิเคราะห์ ASN.1 จาก Bouncy Castle เพื่อดึงข้อมูลส่วนขยายของใบรับรองการรับรอง คุณสามารถใช้ตัวอย่างนี้เป็น ข้อมูลอ้างอิงในการสร้างตัวแยกวิเคราะห์ของคุณเอง

    ดูรายละเอียดเพิ่มเติมได้ที่ส่วนเกี่ยวกับ สคีมาข้อมูลส่วนขยายการรับรองคีย์

  7. ตรวจสอบข้อมูลส่วนขยายที่คุณดึงมาในขั้นตอนก่อนหน้าเพื่อดูความสอดคล้อง และเปรียบเทียบกับชุดค่าที่คุณคาดหวังว่าคีย์อิงฮาร์ดแวร์จะมี

ใบรับรองรูท

ความน่าเชื่อถือของการรับรองขึ้นอยู่กับใบรับรองรูทของห่วงโซ่ อุปกรณ์ Android ที่ผ่านการทดสอบที่จำเป็นต่อการมีชุดแอปของ Google ซึ่งรวมถึง Google Play และเปิดตัวด้วย Android 7.0 (ระดับ API 24) ขึ้นไปควรใช้คีย์การรับรองที่ลงนามโดยใบรับรองรูทการรับรองฮาร์ดแวร์ของ Google โปรดทราบว่าการรับรองไม่จำเป็นจนกว่าจะถึง Android 8.0 (API ระดับ 26) คุณดาวน์โหลดชุดใบรับรองรูทที่ถูกต้องเป็นอาร์เรย์รูปแบบ JSON ได้

ใบรับรองรูท

ควรใช้ใบรับรองรูท 2 รายการต่อไปนี้เป็น Trust Anchor เมื่อยืนยันเชนใบรับรองการรับรองคีย์

-----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 จะไม่กล่าวอ้างใดๆ เกี่ยวกับความปลอดภัยของฮาร์ดแวร์ ไม่ได้หมายความว่าคีย์ของคุณถูกบุกรุก เพียงแต่เอกสารรับรองไม่ได้พิสูจน์ว่าคีย์อยู่ในฮาร์ดแวร์ที่ปลอดภัย โปรดปรับ สมมติฐานด้านความปลอดภัยตามนั้น

หากใบรับรองรูทไม่มีคีย์สาธารณะในหน้านี้ สาเหตุที่เป็นไปได้มี 2 ประการดังนี้

  • ส่วนใหญ่แล้ว อุปกรณ์จะเปิดตัวพร้อมกับ Android เวอร์ชันต่ำกว่า 7.0 และไม่รองรับ การรับรองฮาร์ดแวร์ ในกรณีนี้ Android มีการติดตั้งใช้งานการรับรองซอฟต์แวร์ที่ สร้างใบรับรองการรับรองประเภทเดียวกัน แต่ลงนามด้วยคีย์ ที่ฮาร์ดโค้ดในซอร์สโค้ดของ Android เนื่องจากคีย์การลงนามนี้ไม่ใช่ความลับ ผู้โจมตีที่แสร้งทำเป็นให้บริการฮาร์ดแวร์ที่ปลอดภัยจึงอาจสร้าง การรับรองได้
  • อีกเหตุผลที่เป็นไปได้คืออุปกรณ์ไม่ใช่ Google Play ในกรณีดังกล่าว ผู้ผลิตอุปกรณ์ สามารถสร้างใบรับรองรูทของตนเองและกำหนดความหมายของข้อมูลการรับรอง ได้ โปรดดูเอกสารประกอบของผู้ผลิตอุปกรณ์ โปรดทราบว่า Google ไม่ทราบว่ามีผู้ผลิตอุปกรณ์รายใด ที่ทำเช่นนี้

การหมุนเวียนใบรับรองรูทสำหรับการรับรองฮาร์ดแวร์

Google กำลังเปิดตัวใบรับรองรูทใหม่สำหรับเอกสารรับรองคีย์ Android การเปลี่ยนแปลงนี้ ช่วยเพิ่มความปลอดภัยและความน่าเชื่อถือของกระบวนการรับรองสำหรับแอปพลิเคชันที่มีความละเอียดอ่อน ระบบได้สร้างคีย์รูทใหม่สำหรับการรับรองคีย์ของ Android (KeyMint) แล้ว รูทใหม่คือคีย์ ECDSA P-384

สิ่งที่ต้องทำ

  • หากแอปของคุณใช้การรับรองคีย์ Android ให้เพิ่มใบรับรองรูทใหม่ลงในที่เก็บที่เชื่อถือได้ภายในวันที่ 31 มีนาคม 2026 ดาวน์โหลดทั้งใบรับรองใหม่และใบรับรองเก่าจาก https://android.googleapis.com/attestation/root
  • อุปกรณ์ที่ใช้ Remote Key Provisioning (RKP) จะเริ่มได้รับใบรับรองที่อิงตามใบรับรองใหม่นี้ในเดือนกุมภาพันธ์ 2026 อุปกรณ์ที่เปิดใช้ RKP จะใช้รูทใหม่เท่านั้นภายในวันที่ 10 เมษายน 2026
  • อัปเดตกระบวนการรับรองเพื่อเชื่อถือทั้งใบรับรองรูทใหม่และที่มีอยู่ อุปกรณ์รุ่นเก่าที่มีคีย์ที่จัดสรรจากโรงงานไม่รองรับการหมุนเวียนคีย์และจะใช้รูทเดิมต่อไป
  • โดยสคีมาส่วนขยายใบรับรองจะยังคงเหมือนเดิม มีเพียงรูทเท่านั้นที่จะเปลี่ยนแปลง
  • ทั้งรูปแบบที่มนุษย์อ่านได้และรูปแบบที่เครื่องอ่านได้ของรูทใหม่จะพร้อมใช้งานแบบสาธารณะ

แนวทางปฏิบัติแนะนำ

อย่าค้นหาปลายทางสำหรับรูทที่เชื่อถือได้ที่รันไทม์ เนื่องจากจะทำให้เกิดความเสี่ยงด้านความปลอดภัย จัดการการเปลี่ยนแปลงรากฐานของความน่าเชื่อถือผ่านกระบวนการที่เป็นทางการ

เลิกใช้คีย์จากโรงงาน: กำลังจัดสรรคีย์จากระยะไกล (RKP)

สำหรับอุปกรณ์ที่เปิดตัวด้วย Android 16 ระบบจะรองรับเฉพาะ RKP นโยบายนี้จะเลิกใช้ คีย์จากโรงงาน โดยจะปรับปรุงวิธีที่คุณจัดสรรและจัดการคีย์การรับรอง รวมถึงขยายต่อนโยบาย Android 15 ที่การรองรับ RKP เป็นทางเลือก RKP ป้องกันการรั่วไหลของคีย์เนื่องจากระบบไม่ได้ตั้งโปรแกรมคีย์ลงในอุปกรณ์โดยตรง คุณลบคีย์เหล่านี้ออกจากอุปกรณ์ไม่ได้ หากต้องเพิกถอนคีย์ คุณสามารถกำหนดเป้าหมายการเพิกถอนไปยังอุปกรณ์เครื่องเดียวได้

ไลบรารีการยืนยันเอกสารรับรอง

ใช้ไลบรารีการยืนยันการรับรอง Kotlin เพื่อยืนยันห่วงโซ่ใบรับรองการรับรองคีย์ นอกจากนี้ ไลบรารีนี้ยังผสานรวมใบรับรองรูทใหม่แล้วด้วย หากคุณใช้เครื่องมือยืนยันอื่น เราขอแนะนำให้เปลี่ยนไปใช้ไลบรารี 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 เมื่อคีย์ถูกบุกรุก เนื่องจากลักษณะที่สำคัญของความถูกต้องของการรับรอง ส่วนนี้ระบุนโยบายสำหรับกรณีที่เพิกถอนใบรับรอง นโยบายนี้มีแนวโน้มที่จะพัฒนาและระบุกรณีเพิ่มเติมเมื่อเวลาผ่านไป

สิ่งใดบ้างที่เข้าเกณฑ์การเพิกถอน

คีย์การรับรองที่รั่วไหลจะมีสิทธิ์ถูกเพิกถอนใบรับรองเสมอ คุณค้นหาข้อมูลที่รั่วไหลได้หลายวิธี เช่น

  • การวิเคราะห์ข้อมูลการรับรองในสภาพแวดล้อมจริง
  • การค้นพบคีย์การรับรองในโซเชียลมีเดียหรือเว็บไซต์สาธารณะอื่นๆ
  • รายงานจากนักวิจัยด้านความปลอดภัยโดยตรง

เมื่อตรวจพบแล้ว ระบบจะเพิกถอนใบรับรองการรับรองโดยการเพิ่มหมายเลขซีเรียลลงในรายการเพิกถอน โดยปกติแล้ว การดำเนินการนี้จะเกิดขึ้นภายใน 2-3 วันหลังจากที่เราพบปัญหา แต่ในบางกรณีอาจใช้เวลานานกว่านั้น ตัวอย่างเช่น โดยปกติแล้วการเพิกถอนใบรับรองสำหรับคีย์การรับรองที่รั่วไหลจะล่าช้าหากอุปกรณ์ ที่ได้รับผลกระทบจากการเพิกถอนสามารถจัดสรรใหม่ได้อย่างปลอดภัย ขนาดของผลกระทบจากการเพิกถอน ยังเป็นปัจจัยสำคัญในไทม์ไลน์การเพิกถอนด้วย

สคีมาข้อมูลส่วนขยายเอกสารรับรองคีย์

สคีมาข้อมูลส่วนขยายข้อมูลการจัดสรร