การรับรองคีย์ช่วยให้คุณมั่นใจมากขึ้นว่าคีย์ที่คุณใช้ในแอปได้รับการจัดเก็บไว้ในคีย์สโตร์ที่รองรับฮาร์ดแวร์ของอุปกรณ์ ส่วนต่อไปนี้จะอธิบายวิธียืนยันคุณสมบัติของคีย์ที่เก็บไว้ในฮาร์ดแวร์และวิธีตีความข้อมูลส่วนขยายของใบรับรองการรับรอง
หมายเหตุ: ก่อนที่จะยืนยันพร็อพเพอร์ตี้ของคีย์ที่สำรองข้อมูลด้วยฮาร์ดแวร์ของอุปกรณ์ในสภาพแวดล้อมระดับเวอร์ชันที่ใช้งานจริง โปรดตรวจสอบว่าอุปกรณ์รองรับการรับรองคีย์ระดับฮาร์ดแวร์ โดยตรวจสอบว่าเชนใบรับรองการรับรองมีใบรับรองรูทที่ลงนามด้วยคีย์รูทการรับรองของ Google และองค์ประกอบ attestationSecurityLevel
ภายในโครงสร้างข้อมูลคําอธิบายคีย์ได้รับการตั้งค่าเป็นระดับความปลอดภัย TrustedEnvironment
หรือระดับความปลอดภัย StrongBox
นอกจากนี้ คุณควรตรวจสอบลายเซ็นในเชนใบรับรอง และยืนยันว่าไม่มีคีย์ใดในเชนที่ถูกเพิกถอนโดยดูรายการสถานะการเพิกถอนใบรับรอง อย่าเชื่อถือการรับรองอย่างเต็มรูปแบบ เว้นแต่ว่าคีย์ทั้งหมดจะถูกต้องและรูทเป็นคีย์รูทของ Google
เรียกข้อมูลและยืนยันคู่คีย์แบบใช้ฮาร์ดแวร์
ในระหว่างการรับรองคีย์ คุณจะระบุชื่อแทนของคู่คีย์และดึงข้อมูลเชนใบรับรองของคู่คีย์ดังกล่าว ซึ่งคุณใช้เพื่อยืนยันพร็อพเพอร์ตี้ของคู่คีย์นั้นได้
หากอุปกรณ์รองรับเอกสารรับรองคีย์ระดับฮาร์ดแวร์ ใบรับรองรูทในเชนนี้จะลงนามโดยใช้คีย์รูทเอกสารรับรองที่จัดสรรไว้อย่างปลอดภัยในคีย์สโตร์แบบใช้ฮาร์ดแวร์ของอุปกรณ์
หมายเหตุ: ในอุปกรณ์ที่มาพร้อมกับการรับรองคีย์ระดับฮาร์ดแวร์, Android 7.0 (API ระดับ 24) ขึ้นไป และบริการ Google Play ใบรับรองรูทจะได้รับการรับรองด้วยคีย์รูทการรับรองของ Google ยืนยันว่าใบรับรองรูทนี้อยู่ในรายการที่แสดงในส่วนใบรับรองรูท
หากต้องการใช้การรับรองคีย์ ให้ทําตามขั้นตอนต่อไปนี้
-
ใช้
KeyStore
ของออบเจ็กต์getCertificateChain()
เพื่อทำเครื่องหมายอ้างอิงเชนใบรับรอง X.509 ที่เชื่อมโยงกับที่เก็บคีย์ที่รองรับฮาร์ดแวร์ -
ส่งใบรับรองไปยังเซิร์ฟเวอร์แยกต่างหากที่คุณเชื่อถือเพื่อตรวจสอบ
ข้อควรระวัง: อย่าทำตามกระบวนการตรวจสอบต่อไปนี้ในอุปกรณ์เดียวกับที่เก็บคีย์ หากระบบ Android ในอุปกรณ์ดังกล่าวถูกบุกรุก กระบวนการตรวจสอบอาจเชื่อถือสิ่งที่ไม่น่าเชื่อถือ
-
ดูข้อมูลอ้างอิงเกี่ยวกับไลบรารีการแยกวิเคราะห์และตรวจสอบเชนใบรับรอง X.509 ที่เหมาะกับชุดเครื่องมือของคุณมากที่สุด ยืนยันว่าใบรับรองสาธารณะรูทเชื่อถือได้และใบรับรองแต่ละใบลงนามในใบรับรองถัดไปในเชน
-
ตรวจสอบสถานะการเพิกถอนของใบรับรองแต่ละใบเพื่อให้แน่ใจว่าไม่มีใบรับรองใดถูกเพิกถอน
-
(ไม่บังคับ) ตรวจสอบส่วนขยายใบรับรองข้อมูลการจัดสรรที่มีอยู่ในเชนใบรับรองรุ่นใหม่เท่านั้น
รับข้อมูลอ้างอิงไปยังไลบรารีโปรแกรมแยกวิเคราะห์ CBOR ที่เหมาะกับชุดเครื่องมือของคุณมากที่สุด ค้นหาใบรับรองที่ใกล้กับรูทที่สุดซึ่งมี ส่วนขยายใบรับรองข้อมูลการจัดสรร ใช้โปรแกรมแยกวิเคราะห์เพื่อดึงข้อมูลส่วนขยายใบรับรองข้อมูลการจัดสรรจากใบรับรองนั้น
ดูรายละเอียดเพิ่มเติมได้ที่ส่วนเกี่ยวกับ ส่วนขยายข้อมูลการจัดสรร
-
รับข้อมูลอ้างอิงเกี่ยวกับไลบรารีโปรแกรมแยกวิเคราะห์ ASN.1 ที่เหมาะกับชุดเครื่องมือของคุณมากที่สุด ค้นหาใบรับรองที่ใกล้กับรูทที่สุดซึ่งมี ส่วนขยายใบรับรองการรับรองคีย์ หากมีส่วนขยายใบรับรองข้อมูลการจัดสรรอยู่ ส่วนขยายใบรับรองการรับรองคีย์ต้องอยู่ในใบรับรองถัดไปทันที ใช้โปรแกรมแยกวิเคราะห์เพื่อดึงข้อมูลส่วนขยายของใบรับรองการรับรองคีย์จากใบรับรองนั้น
ข้อควรระวัง: อย่าคิดว่าส่วนขยายใบรับรองการรับรองคีย์อยู่ในใบรับรองใบสุดท้ายของเชน เฉพาะการปรากฏครั้งแรกของส่วนขยายในเชนเท่านั้นที่เชื่อถือได้ อินสแตนซ์เพิ่มเติมของส่วนขยายไม่ได้ออกโดยฮาร์ดแวร์ที่มีความปลอดภัย และอาจออกโดยผู้โจมตีที่ขยายเชนขณะพยายามสร้างการรับรองที่เป็นการปลอมแปลงสำหรับคีย์ที่ไม่น่าเชื่อถือ
ตัวอย่างการรับรองคีย์ใช้โปรแกรมแยกวิเคราะห์ ASN.1 จาก Bouncy Castle เพื่อดึงข้อมูลส่วนขยายของใบรับรองการรับรอง คุณสามารถใช้ตัวอย่างนี้เพื่อเป็นข้อมูลอ้างอิงในการสร้างโปรแกรมแยกวิเคราะห์ของคุณเอง
ดูรายละเอียดเพิ่มเติมได้ที่ส่วน สคีมาข้อมูลส่วนขยายการรับรองคีย์
-
ตรวจสอบความสอดคล้องของข้อมูลส่วนขยายที่คุณดึงข้อมูลในขั้นตอนก่อนหน้า และเปรีย���เทียบกับชุดค่าที่คุณคาดหวังว่าคีย์ที่สำรองข้อมูลด้วยฮาร์ดแวร์จะมี
ใบรับรองรูท
ความน่าเชื่อถือของการรับรองขึ้นอยู่กับใบรับรองรูทของเชน อุปกรณ์ Android ที่ผ่านการทดสอบที่จำเป็นต้องมีชุดแอปของ Google ซึ่งรวมถึง Google Play และเปิดตัวด้วย Android 7.0 (API ระดับ 24) ขึ้นไปควรใช้คีย์การรับรองที่รับรองโดยใบรับรองรูทการรับรองฮาร์ดแวร์ของ Google โปรดทราบว่าการรับรองไม่จำเป็นจนกระทั่ง Android 8.0 (API ระดับ 26) คีย์สาธารณะรูทมีดังนี้
-----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xU FmOr75gvMsd/dTEDDJdSSxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5j lRfdnJLmN0pTy/4lj4/7tv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y //0rb+T+W8a9nsNL/ggjnar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73X pXyTqRxB/M0n1n/W9nGqC4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYI mQQcHtGl/m00QLVWutHQoVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB +TxywElgS70vE0XmLD+OJtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7q uvmag8jfPioyKvxnK/EgsTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgp Zrt3i5MIlCaY504LzSRiigHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7 gLiMm0jhO2B6tUXHI/+MRPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82 ixPvZtXQpUpuL12ab+9EaDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+ NpUFgNPN9PvQi8WEg5UmAGMCAwEAAQ== -----END PUBLIC KEY-----
ใบรับรองรูทที่ออกก่อนหน้านี้
-----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-----
-----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-----
หากใบรับรองรูทในเชนการรับรองที่คุณได้รับมีคีย์สาธารณะนี้และไม่มีใบรับรองใดในเชนถูกเพิกถอน คุณจะทราบสิ่งต่อไปนี้
- คีย์ของคุณอยู่ในฮาร์ดแวร์ที่ Google เชื่อว่าปลอดภัย และ
- โดยมีคุณสมบัติตามที่อธิบายไว้ในใบรับรองการรับรอง
หากเชนการรับรองมีคีย์สาธารณะรูทอื่นๆ อยู่ Google จะไม่อ้างสิทธิ์ใดๆ เกี่ยวกับความปลอดภัยของฮาร์ดแวร์ ซึ่งไม่ได้หมายความว่าคีย์ของคุณถูกบุกรุก แต่การรับรองไม่ได้พิสูจน์ว่าคีย์อยู่ในฮาร์ดแวร์ที่ปลอดภัย ปรับสมมติฐานด้านความปลอดภัยตามความเหมาะสม
หากใบรับรองรูทไม่มีคีย์สาธารณะในหน้านี้ สาเหตุที่เป็นไปได้มี 2 ปร��การดังนี้
- เป็นไปได้ว่าอุปกรณ์เปิดตัวด้วย Android เวอร์ชันต่ำกว่า 7.0 และไม่รองรับการรับรองฮาร์ดแวร์ ในกรณีนี้ Android มีการใช้ซอฟต์แวร์ในการรับรองซึ่งจะสร้างใบรับรองการรับรองประเภทเดียวกัน แต่ลงนามด้วยคีย์ ที่ฮาร์ดโค้ดไว้ในซอร์สโค้ดของ Android เนื่องจากคีย์การรับรองนี้ไม่ใช่ข้อมูลลับ ผู้โจมตีอาจสร้างการรับรองโดยแอบอ้างว่าจัดหาฮาร์ดแวร์ที่ปลอดภัย
- อีกสาเหตุหนึ่งที่เป็นไปได้คืออุปกรณ์ไม่ใช่อุปกรณ์ Google Play ในกรณีนี้ ผู้ผลิตอุปกรณ์มีอิสระในการสร้างรูทของตนเองและอ้างสิทธิ์เกี่ยวกับความหมายของการรับรองได้ตามต้องการ โปรดดูเอกสารประกอบของผู้ผลิตอุปกรณ์ โปรดทราบว่า Google ไม่ทราบว่ามีผู้ผลิตอุปกรณ์รายใดที่ดำเนินการเช่นนี้
รายการสถานะการเพิกถอนใบรับรอง
สิทธิ์การรับรองอาจถูกเพิกถอนด้วยเหตุผลหลายประการ ซึ่งรวมถึงการจัดการที่ไม่เหมาะสมหรือการดึงข้อมูลโดยผู้โจมตี ดังนั้น จึงจำเป็นต้องตรวจสอบสถานะของใบรับรองแต่ละใบในเชนการรับรองกับรายการสถานะการเพิกถอนใบรับรองอย่างเป็นทางการ (CRL)
รายการนี้ดูแลจัดการโดย Google และเผยแพร่ที่
https://android.googleapis.com/attestation/status ส่วนหัว Cache-Control
ในการตอบกลับ HTTP จะกำหนดความถี่ในการตรวจสอบการอัปเดตเพื่อไม่ให้ต้องส่งคำขอเครือข่ายสำหรับใบรับรองทุกใบที่ยืนยัน
URL นี้จะแสดงผลไฟล์ JSON ที่มีสถานะการเพิกถอนสำหรับใบรับรองที่ไม่มีสถานะ "ใช้งานได้ตามปกติ" รูปแบบของไฟล์ JSON ต้องเป็นไปตามคำจำกัดความของสคีมา JSON (ฉบับร่าง 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 จะเพิกถอนเมื่อคีย์ถูกบุกรุก เนื่องจากความสำคัญของความถูกต้องของการรับรอง ส่วนนี้จะอธิบายนโยบายสำหรับการเพิกถอนใบรับรอง นโยบายนี้มีแนวโน้มที่จะพัฒนาและระบุกรณีเพิ่มเติมเมื่อเวลาผ่านไป
สิ่งใดบ้างที่เข้าเกณฑ์การเพิกถอน
การเปิดเผยคีย์การรับรองจะมีผลต่อกลไ��การจัดสรรแบบเก่าที่รองรับใน Android เท่านั้น และไม่มีผลกับคีย์การรับรองที่ได้รับการรับรองโดยกลไกการจัดสรรคีย์ระยะไกลแบบใหม่
คีย์การรับรองที่รั่วไหลจะมีสิทธิ์ถูกเพิกถอนใบรับรองเสมอ คุณสามารถค้นพบข้อมูลรั่วไหลได้หลายวิธี เช่น
- การวิเคราะห์ข้อมูลการรับรองในการใช้งานจริง
- การค้นพบคีย์การรับรองในโซเชียลมีเดียหรือเว็บไซต์สาธารณะอื่นๆ
- รายงานจากนักวิจัยด้านความปลอดภัยโดยตรง
เมื่อพบใบรับรองการรับรอง ระบบจะยกเลิกใบรับรองดังกล่าวโดยเพิ่มหมายเลขซีเรียลของใบรับรองลงในรายการการเพิกถอน โดยปกติแล้ว การดำเนินการนี้จะใช้เวลา 2-3 วันหลังจากพบ แต่อาจใช้เวลานานกว่านั้นในบางกรณี ตัวอย่างเช่น การเพิกถอนใบรับรองสำหรับคีย์การรับรองที่รั่วไหลมักจะล่าช้าหากอุปกรณ์ที่ได้รับผลกระทบจากการเพิกถอนสามารถจัดสรรใหม่ได้อย่างปลอดภัย ขอบเขตของผลกระทบจากการเพิกถอนก็เป็นอีกหนึ่งปัจจัยสำคัญในลำดับเวลาการเพิกถอนด้วย