تأیید کلید به شما اطمینان بیشتری می دهد که کلیدهایی که در برنامه خود استفاده می کنید در فروشگاه کلیدهای سخت افزاری دستگاه ذخیره می شوند. بخشهای زیر نحوه تأیید ویژگیهای کلیدهای سختافزاری و نحوه تفسیر دادههای پسوند گواهیهای تأیید را شرح میدهند.
توجه: قبل از اینکه ویژگیهای کلیدهای دارای پشتوانه سختافزاری دستگاه را در محیطی در سطح تولید تأیید کنید، مطمئن شوید که دستگاه از تأیید کلید در سطح سختافزار پشتیبانی میکند. برای انجام این کار، بررسی کنید که زنجیره گواهی گواهی حاوی یک گواهی ریشه است که با کلید ریشه گواهی Google امضا شده است و عنصر attestationSecurityLevel
در ساختار داده توضیحات کلید روی سطح امنیتی TrustedEnvironment
یا سطح امنیتی StrongBox
تنظیم شده است.
علاوه بر این، تأیید امضاهای موجود در زنجیره گواهی و تأیید اینکه هیچ یک از کلیدهای زنجیره باطل نشده اند با بررسی لیست وضعیت ابطال گواهی مهم است. مگر اینکه همه معتبر باشند و ریشه کلید اصلی گوگل باشد، به گواهی کاملاً اعتماد نکنید. با این حال، توجه داشته باشید که دستگاههای حاوی گواهیهای باطل شده همچنان حداقل به اندازه دستگاههایی که فقط از گواهی نرمافزار پشتیبانی میکنند قابل اعتماد هستند. داشتن یک گواهی کاملا معتبر یک شاخص مثبت قوی است. نداشتن یک شاخص خنثی – نه منفی – است.
یک جفت کلید با پشتوانه سخت افزاری را بازیابی و تأیید کنید
در حین تأیید کلید، نام مستعار یک جفت کلید را مشخص میکنید و زنجیره گواهی آن را بازیابی میکنید، که میتوانید از آن برای تأیید ویژگیهای آن جفت کلید استفاده کنید.
اگر دستگاه از تأیید کلید در سطح سختافزار پشتیبانی میکند، گواهی ریشه در این زنجیره با استفاده از یک کلید ریشه تأیید که به طور ایمن در فروشگاه کلید دارای پشتوانه سختافزاری دستگاه ارائه شده است، امضا میشود.
توجه: در دستگاههایی که دارای گواهی کلید در سطح سختافزار، Android 7.0 (سطح API 24) یا بالاتر، و سرویسهای Google Play هستند، گواهی ریشه با کلید اصلی گواهی Google امضا میشود. بررسی کنید که این گواهی ریشه از جمله مواردی است که در بخش گواهینامه های ریشه فهرست شده است.
برای اجرای گواهی کلید، مراحل زیر را انجام دهید:
- از متد
getCertificateChain()
یک شیKeyStore
برای به دست آوردن ارجاع به زنجیره گواهی های X.509 مرتبط با ذخیره کلید سخت افزاری استفاده کنید. گواهی ها را برای اعتبارسنجی به سرور جداگانه ای که به آن اعتماد دارید ارسال کنید.
احتیاط: فرآیند تأیید اعتبار زیر را در همان دستگاهی که KeyStore دارد تکمیل نکنید. اگر سیستم Android در آن دستگاه به خطر بیفتد، می تواند باعث شود که فرآیند اعتبارسنجی به چیزی غیرقابل اعتماد اعتماد کند.
مرجع تجزیه و تحلیل زنجیره گواهی و کتابخانه اعتبار سنجی X.509 که برای مجموعه ابزار شما مناسب ترین است، دریافت کنید. بررسی کنید که گواهی عمومی ریشه قابل اعتماد است و هر گواهینامه گواهی بعدی را در زنجیره امضا می کند.
وضعیت ابطال هر گواهی را بررسی کنید تا مطمئن شوید که هیچ یک از گواهی ها باطل نشده اند.
به صورت اختیاری، پسوند گواهی اطلاعات ارائه را که فقط در زنجیره های گواهی جدیدتر وجود دارد، بررسی کنید.
مرجعی به کتابخانه تجزیه کننده CBOR که برای مجموعه ابزار شما مناسب است، دریافت کنید. نزدیکترین گواهی را به ریشه که حاوی پسوند گواهی اطلاعات ارائه است، بیابید. از تجزیه کننده برای استخراج داده های پسوند گواهی اطلاعات تهیه از آن گواهی استفاده کنید.
برای جزئیات بیشتر به بخش مربوط به برنامه افزودنی اطلاعات تهیه مراجعه کنید.
مرجعی به کتابخانه تجزیه کننده ASN.1 که برای مجموعه ابزار شما مناسب تر است، دریافت کنید. نزدیکترین گواهی را به ریشه ای که حاوی پسوند گواهی تأیید کلید است، بیابید. اگر پسوند گواهی اطلاعات تامین وجود داشت، پسوند گواهی تایید کلیدی باید در گواهی بلافاصله بعدی باشد. از تجزیه کننده برای استخراج داده های پسوند گواهی گواهینامه کلیدی از آن گواهی استفاده کنید.
احتیاط: تصور نکنید که پسوند گواهی گواهینامه کلید در گواهی برگ زنجیره است. فقط به اولین رخداد افزونه در زنجیره می توان اعتماد کرد. هر نمونه دیگری از برنامه افزودنی توسط سخت افزار ایمن صادر نشده است و ممکن است توسط مهاجمی صادر شده باشد که زنجیره را گسترش می دهد در حالی که سعی می کند گواهی جعلی برای کلیدهای غیرقابل اعتماد ایجاد کند.
نمونه تأیید کلیدی از تجزیه کننده ASN.1 از Bouncy Castle برای استخراج داده های توسعه گواهی گواهی استفاده می کند. می توانید از این نمونه به عنوان مرجعی برای ایجاد تجزیه کننده خود استفاده کنید.
برای جزئیات بیشتر به بخش مربوط به طرح داده های پسوند گواهی کلید مراجعه کنید.
داده های برنامه افزودنی را که در مراحل قبلی بازیابی کرده اید از نظر سازگاری بررسی کنید و با مجموعه مقادیری که انتظار دارید کلید سخت افزاری دارای پشتوانه سخت افزاری باشد، مقایسه کنید.
گواهی های ریشه
قابل اعتماد بودن گواهی به گواهی ریشه زنجیره بستگی دارد. دستگاههای اندرویدی که آزمایشهای لازم برای داشتن مجموعه برنامههای Google از جمله Google Play را گذراندهاند و با Android 7.0 (سطح API 24) یا بالاتر راهاندازی شدهاند، باید از کلیدهای تأیید امضا شده توسط گواهینامه Google Hardware Attestation Root استفاده کنند. توجه داشته باشید که تا قبل از 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-----
اگر گواهی ریشه در زنجیره گواهی که دریافت میکنید حاوی این کلید عمومی باشد و هیچ یک از گواهیهای زنجیره باطل نشده باشد، میدانید که:
- کلید شما در سخت افزاری است که گوگل معتقد است امن است. و
- دارای خواصی است که در گواهینامه ذکر شده است.
اگر زنجیره گواهی دارای کلید عمومی ریشه دیگری باشد، گوگل هیچ ادعایی در مورد امنیت سخت افزار ندارد. این به این معنی نیست که کلید شما به خطر افتاده است، فقط تأیید نمیکند که کلید در سختافزار امن است. مفروضات امنیتی خود را بر این اساس تنظیم کنید.
اگر گواهی ریشه حاوی کلید عمومی در این صفحه نباشد، دو دلیل محتمل وجود دارد:
- به احتمال زیاد، دستگاه با نسخه اندروید کمتر از 7.0 راه اندازی شده است و از تایید سخت افزاری پشتیبانی نمی کند. در این مورد، اندروید دارای یک پیادهسازی نرمافزار گواهی است که همان نوع گواهی گواهی را تولید میکند، اما با یک کلید رمزگذاری شده در کد منبع اندروید امضا شده است. از آنجایی که این کلید امضا مخفی نیست، گواهی ممکن است توسط مهاجمی ایجاد شده باشد که تظاهر به ارائه سخت افزار ایمن می کند.
- دلیل احتمالی دیگر این است که دستگاه یک دستگاه Google Play نیست. در این صورت، سازنده دستگاه مختار است که ریشه خود را ایجاد کند و هر ادعایی را که دوست دارد در مورد معنای گواهی ارائه دهد. به مستندات سازنده دستگاه مراجعه کنید. توجه داشته باشید که گوگل از هیچ سازنده دستگاهی که این کار را انجام داده است اطلاعی ندارد.
لیست وضعیت ابطال گواهی
کلیدهای تصدیق را می توان به دلایلی باطل کرد، از جمله سوء استفاده یا استخراج مشکوک توسط مهاجم. بنابراین، بسیار مهم است که وضعیت هر گواهی در یک زنجیره گواهی با فهرست وضعیت ابطال گواهی رسمی (CRL) بررسی شود. این فهرست توسط گوگل نگهداری می شود و در آدرس زیر منتشر شده است: https://android.googleapis.com/attestation/status . سرآیند Cache-Control
در پاسخ HTTP تعیین میکند که هر چند وقت یکبار برای بهروزرسانیها بررسی شود، بنابراین برای هر گواهی تأیید شده نیازی به درخواست شبکه نیست. این نشانی وب یک فایل 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" } } }
طرح داده های پسوند گواهی کلید
ارائه طرح داده گسترش اطلاعات
،تأیید کلید به شما اطمینان بیشتری می دهد که کلیدهایی که در برنامه خود استفاده می کنید در فروشگاه کلیدهای سخت افزاری دستگاه ذخیره می شوند. بخشهای زیر نحوه تأیید ویژگیهای کلیدهای سختافزاری و نحوه تفسیر دادههای پسوند گواهیهای تأیید را شرح میدهند.
توجه: قبل از اینکه ویژگیهای کلیدهای دارای پشتوانه سختافزاری دستگاه را در محیطی در سطح تولید تأیید کنید، مطمئن شوید که دستگاه از تأیید کلید در سطح سختافزار پشتیبانی میکند. برای انجام این کار، بررسی کنید که زنجیره گواهی گواهی حاوی یک گواهی ریشه است که با کلید ریشه گواهی Google امضا شده است و عنصر attestationSecurityLevel
در ساختار داده توضیحات کلید روی سطح امنیتی TrustedEnvironment
یا سطح امنیتی StrongBox
تنظیم شده است.
علاوه بر این، تأیید امضاهای موجود در زنجیره گواهی و تأیید اینکه هیچ یک از کلیدهای زنجیره باطل نشده اند با بررسی لیست وضعیت ابطال گواهی مهم است. مگر اینکه همه معتبر باشند و ریشه کلید اصلی گوگل باشد، به گواهی کاملاً اعتماد نکنید. با این حال، توجه داشته باشید که دستگاههای حاوی گواهیهای باطل شده همچنان حداقل به اندازه دستگاههایی که فقط از گواهی نرمافزار پشتیبانی میکنند قابل اعتماد هستند. داشتن یک گواهی کاملا معتبر یک شاخص مثبت قوی است. نداشتن یک شاخص خنثی – نه منفی – است.
یک جفت کلید با پشتوانه سخت افزاری را بازیابی و تأیید کنید
در حین تأیید کلید، نام مستعار یک جفت کلید را مشخص میکنید و زنجیره گواهی آن را بازیابی میکنید، که میتوانید از آن برای تأیید ویژگیهای آن جفت کلید استفاده کنید.
اگر دستگاه از تأیید کلید در سطح سختافزار پشتیبانی میکند، گواهی ریشه در این زنجیره با استفاده از یک کلید ریشه تأیید که به طور ایمن در فروشگاه کلید دارای پشتوانه سختافزاری دستگاه ارائه شده است، امضا میشود.
توجه: در دستگاههایی که دارای گواهی کلید در سطح سختافزار، Android 7.0 (سطح API 24) یا بالاتر، و سرویسهای Google Play هستند، گواهی ریشه با کلید اصلی گواهی Google امضا میشود. بررسی کنید که این گواهی ریشه از جمله مواردی است که در بخش گواهینامه های ریشه فهرست شده است.
برای اجرای گواهی کلید، مراحل زیر را انجام دهید:
- از متد
getCertificateChain()
یک شیKeyStore
برای به دست آوردن ارجاع به زنجیره گواهی های X.509 مرتبط با ذخیره کلید سخت افزاری استفاده کنید. گواهی ها را برای اعتبارسنجی به سرور جداگانه ای که به آن اعتماد دارید ارسال کنید.
احتیاط: فرآیند تأیید اعتبار زیر را در همان دستگاهی که KeyStore دارد تکمیل نکنید. اگر سیستم Android در آن دستگاه به خطر بیفتد، می تواند باعث شود که فرآیند اعتبارسنجی به چیزی غیرقابل اعتماد اعتماد کند.
مرجع تجزیه و تحلیل زنجیره گواهی و کتابخانه اعتبار سنجی X.509 که برای مجموعه ابزار شما مناسب ترین است، دریافت کنید. بررسی کنید که گواهی عمومی ریشه قابل اعتماد است و هر گواهینامه گواهی بعدی را در زنجیره امضا می کند.
وضعیت ابطال هر گواهی را بررسی کنید تا مطمئن شوید که هیچ یک از گواهی ها باطل نشده اند.
به صورت اختیاری، پسوند گواهی اطلاعات ارائه را که فقط در زنجیره های گواهی جدیدتر وجود دارد، بررسی کنید.
مرجعی به کتابخانه تجزیه کننده CBOR که برای مجموعه ابزار شما مناسب است، دریافت کنید. نزدیکترین گواهی را به ریشه که حاوی پسوند گواهی اطلاعات ارائه است، بیابید. از تجزیه کننده برای استخراج داده های پسوند گواهی اطلاعات تهیه از آن گواهی استفاده کنید.
برای جزئیات بیشتر به بخش مربوط به برنامه افزودنی اطلاعات تهیه مراجعه کنید.
مرجعی به کتابخانه تجزیه کننده ASN.1 که برای مجموعه ابزار شما مناسب تر است، دریافت کنید. نزدیکترین گواهی را به ریشه ای که حاوی پسوند گواهی تأیید کلید است، بیابید. اگر پسوند گواهی اطلاعات تامین وجود داشت، پسوند گواهی تایید کلیدی باید در گواهی بلافاصله بعدی باشد. از تجزیه کننده برای استخراج داده های پسوند گواهی گواهینامه کلیدی از آن گواهی استفاده کنید.
احتیاط: تصور نکنید که پسوند گواهی گواهینامه کلید در گواهی برگ زنجیره است. فقط به اولین رخداد افزونه در زنجیره می توان اعتماد کرد. هر نمونه دیگری از برنامه افزودنی توسط سخت افزار ایمن صادر نشده است و ممکن است توسط مهاجمی صادر شده باشد که زنجیره را گسترش می دهد در حالی که سعی می کند گواهی جعلی برای کلیدهای غیرقابل اعتماد ایجاد کند.
نمونه تأیید کلیدی از تجزیه کننده ASN.1 از Bouncy Castle برای استخراج داده های توسعه گواهی گواهی استفاده می کند. می توانید از این نمونه به عنوان مرجعی برای ایجاد تجزیه کننده خود استفاده کنید.
برای جزئیات بیشتر به بخش مربوط به طرح داده های پسوند گواهی کلید مراجعه کنید.
داده های برنامه افزودنی را که در مراحل قبلی بازیابی کرده اید از نظر سازگاری بررسی کنید و با مجموعه مقادیری که انتظار دارید کلید سخت افزاری دارای پشتوانه سخت افزاری باشد، مقایسه کنید.
گواهی های ریشه
قابل اعتماد بودن گواهی به گواهی ریشه زنجیره بستگی دارد. دستگاههای اندرویدی که آزمایشهای لازم برای داشتن مجموعه برنامههای Google از جمله Google Play را گذراندهاند و با Android 7.0 (سطح API 24) یا بالاتر راهاندازی شدهاند، باید از کلیدهای تأیید امضا شده توسط گواهینامه Google Hardware Attestation Root استفاده کنند. توجه داشته باشید که تا قبل از 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-----
اگر گواهی ریشه در زنجیره گواهی که دریافت میکنید حاوی این کلید عمومی باشد و هیچ یک از گواهیهای زنجیره باطل نشده باشد، میدانید که:
- کلید شما در سخت افزاری است که گوگل معتقد است امن است. و
- دارای خواصی است که در گواهینامه ذکر شده است.
اگر زنجیره گواهی دارای کلید عمومی ریشه دیگری باشد، گوگل هیچ ادعایی در مورد امنیت سخت افزار ندارد. این به این معنی نیست که کلید شما به خطر افتاده است، فقط تأیید نمیکند که کلید در سختافزار امن است. مفروضات امنیتی خود را بر این اساس تنظیم کنید.
اگر گواهی ریشه حاوی کلید عمومی در این صفحه نباشد، دو دلیل محتمل وجود دارد:
- به احتمال زیاد، دستگاه با نسخه اندروید کمتر از 7.0 راه اندازی شده است و از تایید سخت افزاری پشتیبانی نمی کند. در این مورد، اندروید دارای یک پیادهسازی نرمافزار گواهی است که همان نوع گواهی گواهی را تولید میکند، اما با یک کلید رمزگذاری شده در کد منبع اندروید امضا شده است. از آنجایی که این کلید امضا مخفی نیست، گواهی ممکن است توسط مهاجمی ایجاد شده باشد که تظاهر به ارائه سخت افزار ایمن می کند.
- دلیل احتمالی دیگر این است که دستگاه یک دستگاه Google Play نیست. در این صورت، سازنده دستگاه مختار است که ریشه خود را ایجاد کند و هر ادعایی را که دوست دارد در مورد معنای گواهی ارائه دهد. به مستندات سازنده دستگاه مراجعه کنید. توجه داشته باشید که گوگل از هیچ سازنده دستگاهی که این کار را انجام داده است اطلاعی ندارد.
لیست وضعیت ابطال گواهی
کلیدهای تصدیق را می توان به دلایلی باطل کرد، از جمله سوء استفاده یا استخراج مشکوک توسط مهاجم. بنابراین، بسیار مهم است که وضعیت هر گواهی در یک زنجیره گواهی با فهرست وضعیت ابطال گواهی رسمی (CRL) بررسی شود. این فهرست توسط گوگل نگهداری می شود و در آدرس زیر منتشر شده است: https://android.googleapis.com/attestation/status . سرآیند Cache-Control
در پاسخ HTTP تعیین میکند که هر چند وقت یکبار برای بهروزرسانیها بررسی شود، بنابراین برای هر گواهی تأیید شده نیازی به درخواست شبکه نیست. این نشانی وب یک فایل 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" } } }
طرح داده های پسوند گواهی کلید
ارائه طرح داده گسترش اطلاعات
،تأیید کلید به شما اطمینان بیشتری می دهد که کلیدهایی که در برنامه خود استفاده می کنید در فروشگاه کلیدهای سخت افزاری دستگاه ذخیره می شوند. بخشهای زیر نحوه تأیید ویژگیهای کلیدهای سختافزاری و نحوه تفسیر دادههای پسوند گواهیهای تأیید را شرح میدهند.
توجه: قبل از اینکه ویژگیهای کلیدهای دارای پشتوانه سختافزاری دستگاه را در محیطی در سطح تولید تأیید کنید، مطمئن شوید که دستگاه از تأیید کلید در سطح سختافزار پشتیبانی میکند. برای انجام این کار، بررسی کنید که زنجیره گواهی گواهی حاوی یک گواهی ریشه است که با کلید ریشه گواهی Google امضا شده است و عنصر attestationSecurityLevel
در ساختار داده توضیحات کلید روی سطح امنیتی TrustedEnvironment
یا سطح امنیتی StrongBox
تنظیم شده است.
علاوه بر این، تأیید امضاهای موجود در زنجیره گواهی و تأیید اینکه هیچ یک از کلیدهای زنجیره باطل نشده اند با بررسی لیست وضعیت ابطال گواهی مهم است. مگر اینکه همه معتبر باشند و ریشه کلید اصلی گوگل باشد، به گواهی کاملاً اعتماد نکنید. با این حال، توجه داشته باشید که دستگاههای حاوی گواهیهای باطل شده همچنان حداقل به اندازه دستگاههایی که فقط از گواهی نرمافزار پشتیبانی میکنند قابل اعتماد هستند. داشتن یک گواهی کاملا معتبر یک شاخص مثبت قوی است. نداشتن یک شاخص خنثی – نه منفی – است.
یک جفت کلید با پشتوانه سخت افزاری را بازیابی و تأیید کنید
در حین تأیید کلید، نام مستعار یک جفت کلید را مشخص میکنید و زنجیره گواهی آن را بازیابی میکنید، که میتوانید از آن برای تأیید ویژگیهای آن جفت کلید استفاده کنید.
اگر دستگاه از تأیید کلید در سطح سختافزار پشتیبانی میکند، گواهی ریشه در این زنجیره با استفاده از یک کلید ریشه تأیید که به طور ایمن در فروشگاه کلید دارای پشتوانه سختافزاری دستگاه ارائه شده است، امضا میشود.
توجه: در دستگاههایی که دارای گواهی کلید در سطح سختافزار، Android 7.0 (سطح API 24) یا بالاتر، و سرویسهای Google Play هستند، گواهی ریشه با کلید اصلی گواهی Google امضا میشود. بررسی کنید که این گواهی ریشه از جمله مواردی است که در بخش گواهینامه های ریشه فهرست شده است.
برای اجرای گواهی کلید، مراحل زیر را انجام دهید:
- از متد
getCertificateChain()
یک شیKeyStore
برای به دست آوردن ارجاع به زنجیره گواهی های X.509 مرتبط با ذخیره کلید سخت افزاری استفاده کنید. گواهی ها را برای اعتبارسنجی به سرور جداگانه ای که به آن اعتماد دارید ارسال کنید.
احتیاط: فرآیند تأیید اعتبار زیر را در همان دستگاهی که KeyStore دارد تکمیل نکنید. اگر سیستم Android در آن دستگاه به خطر بیفتد، می تواند باعث شود که فرآیند اعتبارسنجی به چیزی غیرقابل اعتماد اعتماد کند.
مرجع تجزیه و تحلیل زنجیره گواهی و کتابخانه اعتبار سنجی X.509 که برای مجموعه ابزار شما مناسب ترین است، دریافت کنید. بررسی کنید که گواهی عمومی ریشه قابل اعتماد است و هر گواهینامه گواهی بعدی را در زنجیره امضا می کند.
وضعیت ابطال هر گواهی را بررسی کنید تا مطمئن شوید که هیچ یک از گواهی ها باطل نشده اند.
به صورت اختیاری، پسوند گواهی اطلاعات ارائه را که فقط در زنجیره های گواهی جدیدتر وجود دارد، بررسی کنید.
مرجعی به کتابخانه تجزیه کننده CBOR که برای مجموعه ابزار شما مناسب است، دریافت کنید. نزدیکترین گواهی را به ریشه که حاوی پسوند گواهی اطلاعات ارائه است، بیابید. از تجزیه کننده برای استخراج داده های پسوند گواهی اطلاعات تهیه از آن گواهی استفاده کنید.
برای جزئیات بیشتر به بخش مربوط به برنامه افزودنی اطلاعات تهیه مراجعه کنید.
مرجعی به کتابخانه تجزیه کننده ASN.1 که برای مجموعه ابزار شما مناسب تر است، دریافت کنید. نزدیکترین گواهی را به ریشه ای که حاوی پسوند گواهی تأیید کلید است، بیابید. اگر پسوند گواهی اطلاعات تامین وجود داشت، پسوند گواهی تایید کلیدی باید در گواهی بلافاصله بعدی باشد. از تجزیه کننده برای استخراج داده های پسوند گواهی گواهینامه کلیدی از آن گواهی استفاده کنید.
احتیاط: تصور نکنید که پسوند گواهی گواهینامه کلید در گواهی برگ زنجیره است. فقط به اولین رخداد افزونه در زنجیره می توان اعتماد کرد. هر نمونه دیگری از برنامه افزودنی توسط سخت افزار ایمن صادر نشده است و ممکن است توسط مهاجمی صادر شده باشد که زنجیره را گسترش می دهد در حالی که سعی می کند گواهی جعلی برای کلیدهای غیرقابل اعتماد ایجاد کند.
نمونه تأیید کلیدی از تجزیه کننده ASN.1 از Bouncy Castle برای استخراج داده های توسعه گواهی گواهی استفاده می کند. می توانید از این نمونه به عنوان مرجعی برای ایجاد تجزیه کننده خود استفاده کنید.
برای جزئیات بیشتر به بخش مربوط به طرح داده های پسوند گواهی کلید مراجعه کنید.
داده های برنامه افزودنی را که در مراحل قبلی بازیابی کرده اید از نظر سازگاری بررسی کنید و با مجموعه مقادیری که انتظار دارید کلید سخت افزاری دارای پشتوانه سخت افزاری باشد، مقایسه کنید.
گواهی های ریشه
قابل اعتماد بودن گواهی به گواهی ریشه زنجیره بستگی دارد. دستگاههای اندرویدی که آزمایشهای لازم برای داشتن مجموعه برنامههای Google از جمله Google Play را گذراندهاند و با Android 7.0 (سطح API 24) یا بالاتر راهاندازی شدهاند، باید از کلیدهای تأیید امضا شده توسط گواهینامه Google Hardware Attestation Root استفاده کنند. توجه داشته باشید که تا قبل از 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-----
اگر گواهی ریشه در زنجیره گواهی که دریافت میکنید حاوی این کلید عمومی باشد و هیچ یک از گواهیهای زنجیره باطل نشده باشد، میدانید که:
- کلید شما در سخت افزاری است که گوگل معتقد است امن است. و
- دارای خواصی است که در گواهینامه ذکر شده است.
اگر زنجیره گواهی دارای کلید عمومی ریشه دیگری باشد، گوگل هیچ ادعایی در مورد امنیت سخت افزار ندارد. این به این معنی نیست که کلید شما به خطر افتاده است، فقط تأیید نمیکند که کلید در سختافزار امن است. مفروضات امنیتی خود را بر این اساس تنظیم کنید.
اگر گواهی ریشه حاوی کلید عمومی در این صفحه نباشد، دو دلیل محتمل وجود دارد:
- به احتمال زیاد، دستگاه با نسخه اندروید کمتر از 7.0 راه اندازی شده است و از تایید سخت افزاری پشتیبانی نمی کند. در این مورد، اندروید دارای یک پیادهسازی نرمافزار گواهی است که همان نوع گواهی گواهی را تولید میکند، اما با یک کلید رمزگذاری شده در کد منبع اندروید امضا شده است. از آنجایی که این کلید امضا مخفی نیست، گواهی ممکن است توسط مهاجمی ایجاد شده باشد که تظاهر به ارائه سخت افزار ایمن می کند.
- دلیل احتمالی دیگر این است که دستگاه یک دستگاه Google Play نیست. در این صورت، سازنده دستگاه مختار است که ریشه خود را ایجاد کند و هر ادعایی را که دوست دارد در مورد معنای گواهی ارائه دهد. به مستندات سازنده دستگاه مراجعه کنید. توجه داشته باشید که گوگل از هیچ سازنده دستگاهی که این کار را انجام داده است اطلاعی ندارد.
لیست وضعیت ابطال گواهی
کلیدهای تصدیق را می توان به دلایلی باطل کرد، از جمله سوء استفاده یا استخراج مشکوک توسط مهاجم. بنابراین، بسیار مهم است که وضعیت هر گواهی در یک زنجیره گواهی با فهرست وضعیت ابطال گواهی رسمی (CRL) بررسی شود. این فهرست توسط گوگل نگهداری می شود و در آدرس زیر منتشر شده است: https://android.googleapis.com/attestation/status . سرآیند Cache-Control
در پاسخ HTTP تعیین میکند که هر چند وقت یکبار برای بهروزرسانیها بررسی شود، بنابراین برای هر گواهی تأیید شده نیازی به درخواست شبکه نیست. این نشانی وب یک فایل 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" } } }