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

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

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

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

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

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

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

หมายเหตุ: ในอุปกรณ์ที่มาพร้อมกับการรับรองคีย์ระดับฮาร์ดแวร์, Android 7.0 (API ระดับ 24) ขึ้นไป และบริการ Google Play ใบรับรองรูทจะได้รับการรับรองด้วยคีย์รูทการรับรองของ 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) คีย์สาธารณะรูทมีดังนี้

  -----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-----
  

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

  1. คีย์ของคุณอยู่ในฮาร์ดแวร์ที่ Google เชื่อว่าปลอดภัย และ
  2. โดยมีคุณสมบัติตามที่อธิบายไว้ในใบรับรองการรับรอง

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

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

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