جفت‌های کلید سخت‌افزاری را با تأیید کلید تأیید کنید

تأیید کلید به شما اطمینان بیشتری می‌دهد که کلیدهایی که در برنامه خود استفاده می‌کنید در حافظه اصلی سخت‌افزاری دستگاه ذخیره می‌شوند. بخش‌های زیر نحوه تأیید ویژگی‌های کلیدهای سخت‌افزاری و نحوه تفسیر داده‌های افزونه گواهی‌های تأیید را شرح می‌دهند.

توجه: قبل از اینکه ویژگی‌های کلیدهای سخت‌افزاری دستگاه را در یک محیط عملیاتی تأیید کنید، مطمئن شوید که دستگاه از گواهی کلید در سطح سخت‌افزار پشتیبانی می‌کند. برای انجام این کار، بررسی کنید که زنجیره گواهی گواهی حاوی یک گواهی ریشه باشد که با کلید ریشه گواهی گوگل امضا شده باشد و عنصر attestationSecurityLevel در ساختار داده توضیحات کلید روی سطح امنیتی TrustedEnvironment یا سطح امنیتی StrongBox تنظیم شده باشد.

علاوه بر این، تأیید امضاها در زنجیره گواهی و تأیید اینکه هیچ یک از کلیدهای موجود در زنجیره با بررسی لیست وضعیت ابطال گواهی لغو نشده‌اند، مهم است. مگر اینکه همه معتبر باشند و ریشه، کلید ریشه گوگل باشد، به طور کامل به گواهی اعتماد نکنید.

بازیابی و تأیید یک جفت کلید با پشتیبانی سخت‌افزاری

در طول تأیید کلید، شما نام مستعار یک جفت کلید را مشخص می‌کنید و زنجیره گواهی آن را بازیابی می‌کنید که می‌توانید از آن برای تأیید ویژگی‌های آن جفت کلید استفاده کنید.

اگر دستگاه از گواهی کلید در سطح سخت‌افزار پشتیبانی کند، گواهی ریشه در این زنجیره با استفاده از یک کلید ریشه گواهی امضا می‌شود که به طور ایمن در مخزن کلید سخت‌افزاری دستگاه قرار دارد.

توجه: در دستگاه‌هایی که با گواهی کلید سطح سخت‌افزار، اندروید ۷.۰ (سطح API ۲۴) یا بالاتر و سرویس‌های گوگل پلی عرضه می‌شوند، گواهی ریشه با کلید ریشه گواهی گوگل امضا می‌شود. تأیید کنید که این گواهی ریشه جزو موارد ذکر شده در بخش گواهی‌های ریشه است.

برای پیاده‌سازی گواهی کلید، مراحل زیر را انجام دهید:

  1. از متد getCertificateChain() یک شیء KeyStore برای دریافت ارجاعی به زنجیره‌ی گواهی‌های X.509 مرتبط با کلیدِ سخت‌افزاریِ پشتیبان استفاده کنید.
  2. گواهی‌ها را برای اعتبارسنجی به سرور جداگانه‌ای که به آن اعتماد دارید ارسال کنید.

    احتیاط: فرآیند اعتبارسنجی زیر را روی همان دستگاه انجام ندهید. اگر سیستم اندروید روی آن دستگاه به خطر افتاده باشد، این می‌تواند باعث شود فرآیند اعتبارسنجی به چیزی غیرقابل اعتماد اعتماد کند.

  3. یک مرجع به کتابخانه تجزیه و اعتبارسنجی زنجیره گواهی X.509 که برای مجموعه ابزارهای شما مناسب‌تر است، دریافت کنید. تأیید کنید که گواهی عمومی ریشه قابل اعتماد است و هر گواهی، گواهی بعدی را در زنجیره امضا می‌کند.

  4. وضعیت ابطال هر گواهی را بررسی کنید تا مطمئن شوید که هیچ یک از گواهی‌ها ابطال نشده‌اند.

  5. در صورت تمایل، افزونه‌ی گواهی اطلاعات تأمین را که فقط در زنجیره‌های گواهی جدیدتر وجود دارد، بررسی کنید.

    یک مرجع به کتابخانه تجزیه‌گر CBOR که برای مجموعه ابزارهای شما مناسب‌تر است، دریافت کنید. نزدیکترین گواهی به ریشه که حاوی افزونه گواهی اطلاعات تأمین است را پیدا کنید. از تجزیه‌گر برای استخراج داده‌های افزونه گواهی اطلاعات تأمین از آن گواهی استفاده کنید.

    برای جزئیات بیشتر به بخش مربوط به افزونه‌ی اطلاعات تأمین مراجعه کنید.

  6. یک مرجع به کتابخانه تجزیه‌گر ASN.1 که برای مجموعه ابزارهای شما مناسب‌تر است، دریافت کنید. نزدیکترین گواهی به ریشه که حاوی افزونه گواهی تأیید کلید است را پیدا کنید. اگر افزونه گواهی اطلاعات تأمین وجود داشته باشد، افزونه گواهی تأیید کلید باید در گواهی بلافاصله بعدی باشد. از تجزیه‌گر برای استخراج داده‌های افزونه گواهی تأیید کلید از آن گواهی استفاده کنید.

    احتیاط: فرض نکنید که پسوند گواهی تأیید کلید در گواهی برگ زنجیره قرار دارد. فقط اولین رخداد پسوند در زنجیره قابل اعتماد است. هر نمونه دیگری از پسوند توسط سخت‌افزار امن صادر نشده است و ممکن است توسط مهاجمی صادر شده باشد که زنجیره را گسترش می‌دهد و در تلاش برای ایجاد گواهی‌های جعلی برای کلیدهای غیرقابل اعتماد است.

    نمونه‌ی Key Attestation از تجزیه‌گر ASN.1 از Bouncy Castle برای استخراج داده‌های افزونه‌ی گواهی تأیید استفاده می‌کند. می‌توانید از این نمونه به عنوان مرجعی برای ایجاد تجزیه‌گر خودتان استفاده کنید.

    برای جزئیات بیشتر به بخش مربوط به طرحواره داده‌های افزونه گواهی کلیدی مراجعه کنید.

  7. داده‌های افزونه‌ای که در مراحل قبلی بازیابی کرده‌اید را از نظر سازگاری بررسی کنید و با مجموعه‌ای از مقادیری که انتظار دارید کلید سخت‌افزاری شامل آنها باشد، مقایسه کنید.

گواهی‌های ریشه

اعتبار گواهی به گواهی ریشه زنجیره بستگی دارد. دستگاه‌های اندرویدی که آزمایش‌های لازم برای داشتن مجموعه برنامه‌های گوگل، از جمله گوگل پلی، را با موفقیت پشت سر گذاشته‌اند و با اندروید ۷.۰ (سطح API ۲۴) یا بالاتر راه‌اندازی شده‌اند، باید از کلیدهای گواهی امضا شده توسط گواهی ریشه گواهی سخت‌افزار گوگل استفاده کنند. توجه داشته باشید که گواهی تا اندروید ۸.۰ (سطح API ۲۶) الزامی نبود. مجموعه گواهی‌های ریشه معتبر را می‌توان به صورت یک آرایه با فرمت JSON دانلود کرد.

گواهی‌های ریشه

دو گواهی ریشه زیر باید به عنوان لنگرهای اعتماد هنگام تأیید زنجیره گواهی تأیید کلید استفاده شوند.

-----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. کلید شما در سخت‌افزاری است که گوگل آن را امن می‌داند؛ و
  2. دارای ویژگی‌های ذکر شده در گواهی تأیید است.

اگر زنجیره گواهی، کلید عمومی ریشه دیگری داشته باشد، گوگل هیچ ادعایی در مورد امنیت سخت‌افزار نمی‌کند. این به این معنی نیست که کلید شما در معرض خطر است، بلکه فقط به این معنی است که گواهی ثابت نمی‌کند که کلید در سخت‌افزار امنی قرار دارد. فرضیات امنیتی خود را بر این اساس تنظیم کنید.

اگر گواهی ریشه حاوی کلید عمومی موجود در این صفحه نباشد، دو دلیل احتمالی وجود دارد:

  • به احتمال زیاد، دستگاه با نسخه اندروید پایین‌تر از ۷.۰ عرضه شده و از گواهی سخت‌افزاری پشتیبانی نمی‌کند. در این مورد، اندروید یک پیاده‌سازی نرم‌افزاری از گواهی دارد که همان نوع گواهی را تولید می‌کند، اما با کلیدی که در کد منبع اندروید به صورت کد ثابت وجود دارد، امضا شده است. از آنجا که این کلید امضا یک راز نیست، ممکن است گواهی توسط مهاجمی ایجاد شده باشد که وانمود می‌کند سخت‌افزار امنی ارائه می‌دهد.
  • دلیل احتمالی دیگر این است که دستگاه مورد نظر، یک دستگاه گوگل پلی نیست. در این صورت، سازنده دستگاه می‌تواند گواهی ریشه خود را ایجاد کند و معنای داده‌های گواهی خود را تعریف کند. به مستندات سازنده دستگاه مراجعه کنید. توجه داشته باشید که گوگل از هیچ سازنده دستگاهی که این کار را انجام داده باشد، اطلاعی ندارد.

گواهی سخت‌افزاری، چرخش گواهی ریشه

گوگل در حال معرفی یک گواهی ریشه جدید برای گواهی کلید اندروید است . این تغییر، امنیت و قابلیت اطمینان فرآیند گواهی را برای برنامه‌های حساس افزایش می‌دهد. یک کلید ریشه جدید برای گواهی کلید اندروید (KeyMint) ایجاد شده است. این کلید ریشه جدید یک کلید ECDSA P-384 است و یک کلید ML-DSA (الگوریتم امضای دیجیتال پس از کوانتومی) برای آینده برنامه‌ریزی شده است.

اقدام برای توسعه‌دهندگان

  • اگر برنامه شما به گواهی کلید اندروید (Android Key Attestation) متکی است، گواهی ریشه جدید را تا ژانویه ۲۰۲۶ به فروشگاه‌های اعتماد خود اضافه کنید. گواهی‌های جدید و قدیمی را از https://android.googleapis.com/attestation/root دانلود کنید.
  • دستگاه‌هایی که از Remote Key Provisioning (RKP) استفاده می‌کنند، از فوریه ۲۰۲۶ گواهی‌هایی را که ریشه در این گواهی جدید دارند، دریافت خواهند کرد. دستگاه‌های دارای قابلیت RKP تا ۱۰ آوریل ۲۰۲۶ منحصراً از ریشه جدید استفاده خواهند کرد.
  • فرآیندهای تأیید خود را به‌روزرسانی کنید تا به گواهی‌های ریشه جدید و موجود اعتماد کنید. دستگاه‌های قدیمی‌تر با کلیدهای ارائه شده توسط کارخانه، از چرخش کلید پشتیبانی نمی‌کنند و همچنان از ریشه قدیمی استفاده می‌کنند.
  • خودِ طرحِ توسعه‌ی گواهی بدون تغییر باقی خواهد ماند؛ فقط ریشه تغییر می‌کند.
  • هر دو شکل قابل خواندن توسط انسان و قابل خواندن توسط ماشین از ریشه جدید به صورت عمومی در دسترس خواهند بود.

بهترین شیوه‌ها

در زمان اجرا، از یک نقطه پایانی، ریشه‌های مورد اعتماد را جستجو نکنید، زیرا این عمل خطرات امنیتی ایجاد می‌کند. تغییرات در ریشه‌های اعتماد را از طریق یک فرآیند رسمی مدیریت کنید.

حذف تدریجی کلیدهای کارخانه‌ای: تأمین کلید از راه دور (RKP)

برای دستگاه‌هایی که با اندروید ۱۶ عرضه می‌شوند، سیستم فقط از RKP پشتیبانی می‌کند. این سیاست، کلیدهای کارخانه‌ای را به تدریج حذف می‌کند. این سیاست، نحوه‌ی ارائه و مدیریت کلیدهای تأیید را بهبود می‌بخشد و سیاست اندروید ۱۵ را که در آن پشتیبانی از RKP اختیاری بود، گسترش می‌دهد. RKP از نشت کلید جلوگیری می‌کند زیرا سیستم کلیدها را مستقیماً روی دستگاه برنامه‌ریزی نمی‌کند. شما نمی‌توانید این کلیدها را از دستگاه حذف کنید. اگر مجبور به لغو یک کلید هستید، می‌توانید این لغو را به یک دستگاه واحد اختصاص دهید.

کتابخانه‌های تأیید اعتبار

از کتابخانه‌ی کاتلینِ attestation verification برای تأیید زنجیره‌های گواهی Key Attestation استفاده کنید. علاوه بر این، این کتابخانه از قبل گواهی‌های ریشه‌ی جدید را ادغام می‌کند. اگر از یک تأییدکننده‌ی دیگر استفاده می‌کنید، توصیه می‌کنیم به جای آن به کتابخانه‌ی کاتلین بروید. این کتابخانه به خوبی آزمایش شده است و موارد حاشیه‌ای را که اغلب توسط تأییدکننده‌های سفارشی از قلم می‌افتند، پوشش می‌دهد.

فهرست وضعیت ابطال گواهینامه

کلیدهای گواهی می‌توانند به دلایل مختلفی، از جمله سوء استفاده یا استخراج مشکوک توسط یک مهاجم، لغو شوند. بنابراین، بسیار مهم است که وضعیت هر گواهی در یک زنجیره گواهی با لیست رسمی وضعیت ابطال گواهی (CRL) بررسی شود. این لیست توسط گوگل نگهداری و در آدرس 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"
    }
  }
}

سیاست لغو گواهینامه

گواهی، ستون فقرات مقابله با سوءاستفاده و اعتماد در اکوسیستم اندروید را تشکیل می‌دهد. این گواهی، بیانیه‌ای قابل تأیید رمزنگاری‌شده برای طرفین خارج از دستگاه در مورد وضعیت بوت شدن دستگاه ارائه می‌دهد.

به دلیل ماهیت حیاتی اعتبار گواهی، گواهی‌های مربوط به کلیدهای گواهی اندروید در صورت لو رفتن کلیدها لغو خواهند شد. این بخش، سیاستی را برای زمان لغو گواهی‌ها تشریح می‌کند. این سیاست احتمالاً در طول زمان تکامل یافته و موارد دیگری را نیز شامل خواهد شد.

چه چیزی واجد شرایط لغو است؟

افشای کلید گواهی فقط بر مکانیزم تأمین قدیمی‌تر پشتیبانی‌شده در اندروید تأثیر می‌گذارد و بر کلیدهای گواهی تأییدشده توسط مکانیزم جدیدتر تأمین کلید از راه دور (RKP) اعمال نمی‌شود.

کلیدهای گواهی که فاش شده‌اند، همیشه واجد شرایط لغو گواهی‌هایشان هستند. نشت اطلاعات از چندین طریق قابل کشف است، از جمله:

  • تجزیه و تحلیل داده‌های گواهی در طبیعت.
  • کشف کلیدهای تأیید در رسانه‌های اجتماعی یا سایر سایت‌های عمومی.
  • گزارش‌ها مستقیماً از محققان امنیتی.

پس از کشف، گواهی‌های تأیید با اضافه شدن شماره سریال آنها به لیست ابطال ، ابطال می‌شوند. معمولاً این اتفاق ظرف چند روز پس از کشف رخ می‌دهد، اما در موارد نادر ممکن است بیشتر طول بکشد. به عنوان مثال، ابطال گواهی‌های مربوط به کلیدهای تأیید فاش شده معمولاً به تأخیر می‌افتد اگر دستگاه‌هایی که تحت تأثیر ابطال قرار گرفته‌اند، بتوانند به طور ایمن دوباره تأمین شوند. میزان تأثیر ابطال نیز عامل مهمی در جدول زمانی ابطال است.

طرحواره داده افزونه گواهی کلید

ارائه طرح داده افزونه اطلاعات