حکم‌های بهبودیافته در دستگاه‌های دارای Android 13 و نسخه‌های جدیدتر

اخیراً اعلام کردیم که حکم‌های Play Integrity API را تقویت کرده‌ایم تا سریع‌تر، دربرابر حملات مقاوم‌تر، و برای کاربران خصوصی‌تر شوند و همچنین بهبودهای امنیتی دیگری نیز اعمال کرده‌ایم.

خلاصه تغییرات

در ادامه این سند، می‌توانید خلاصه دقیقی از تغییرات و پرسشگان را ببینید. تغییرات حکم در مه ۲۰۲۵ به‌شرح زیر بود:

What چه چیزی تغییر کرده است تأثیر تخمینی* کدام دستگاه‌ها
تغییراتی که بر همه توسعه‌دهندگانی که درخواست‌های Play Integrity API را ایجاد می‌کنند تأثیر می‌گذارد
پاسخ حکم دستگاه: meets-device-integrity باید دارای حکم راه‌اندازی درستی‌سنجی‌شده مثبت با پشتیبانی سخت‌افزاری باشد تأثیر حداقلی چون Play Integrity API درحال‌حاضر از سیگنال‌های امنیتی با پشتیبانی سخت‌افزار در دستگاه‌های Android 13 یا جدیدتر استفاده می‌کند (~۰٫۴٪) ‫Android 13 و نسخه‌های بالاتر
پاسخ تمامیت برنامه: حکم تشخیص برنامه تغییری نیست تأثیر حداقلی، این تغییر در رأی دستگاه منعکس خواهد شد (~۰٫۴٪) ‫Android 13 و نسخه‌های بالاتر
پاسخ جزئیات حساب: حکم پروانه Play برنامه درخواست‌کننده باید توسط Google Play نصب یا به‌روزرسانی شود کاهش جزئی در پاسخ‌های دارای پروانه (~۲٫۵٪) ‫Android 6 و نسخه‌های بالاتر
تغییراتی که فقط بر توسعه‌دهندگان «کنسول Play» و توسعه‌دهندگان «کنسول کیت توسعه نرم‌افزار Play» که از ویژگی‌های اختیاری استفاده می‌کنند تأثیر می‌گذارد
پاسخ حکم دستگاه: meets-basic-integrity «تصدیق کلید پلاتفرم Android» الزامی است اما وضعیت راه‌اندازی می‌تواند درستی‌سنجی‌شده یا درستی‌سنجی‌نشده باشد کاهش جزئی در پاسخ‌های ابتدایی (حدود ۰٫۴٪) ‫Android 13 و بالاتر
پاسخ حکم دستگاه: meets-strong-integrity باید در سال گذشته به‌روزرسانی امنیتی دریافت کرده باشد کاهش در پاسخ‌های قوی (~۱۴٫۵٪) ‫Android 13 و بالاتر
همه سیگنال‌های اختیاری (به‌جز مشخصه‌های دستگاه)** برنامه درخواست‌کننده باید توسط Google Play نصب یا به‌روزرسانی شود کاهش درصد پاسخ‌هایی که شامل سیگنال‌های اختیاری هستند (~۷٪) ‫Android 13 و بالاتر

*همه درصدهای تأثیر تخمینی که قبلاً ذکر شد براساس میانگین‌ها بود و برنامه‌های مختلف ممکن است بسته به پایگاه نصبشان تغییرات کوچک‌تر یا بزرگ‌تری را مشاهده کرده باشند.

**سیگنال‌های اختیاری (به‌جز مشخصه‌های دستگاه) عبارتند از: meets-basic-integrity، meets-strong-integrity، فعالیت اخیر دستگاه، فراخوانی دستگاه (بتا)، وضعیت «سپر ایمنی Play»، و خطر دسترسی به برنامه.

پرسشگان

نمای کلی

‫Play Integrity API چیست؟

‫Play Integrity API با دریافت اطلاعاتی درباره دستگاه، برنامه، و کاربر به شما کمک می‌کند میزان قابل‌اعتماد بودن محیط برنامه کاربر را ارزیابی کنید تا بتوانید سوءاستفاده‌ها و حملات احتمالی را شناسایی کنید و به آن‌ها پاسخ دهید.

‫Play Integrity API چه سیگنال‌هایی ارائه می‌دهد؟

Play Integrity API شامل هویت برنامه درخواست‌کننده، اینکه آیا برنامه درخواست‌کننده توسط Google Play نصب شده است یا نه، و اینکه آیا دستگاه یک دستگاه Android دارای گواهینامه و واقعی است یا نه می‌شود. این سیگنال‌ها به‌طور پیش‌فرض ارائه می‌شوند. می‌توانید این سیگنال‌ها را در سرور زیرینه برنامه‌تان بخوانید و تصمیم بگیرید که آیا برنامه‌تان باید پاسخ دهد و چگونه باید پاسخ دهد. توسعه‌دهندگان Google Play می‌توانند برای دریافت سیگنال‌های بیشتر در نصب‌های Play خود موافقت کنند تا اطلاعات بیشتری ببینند.

«تصدیق کلید پلاتفرم Android» چیست؟

تصدیق کلید پلاتفرم Android به برنامه‌ها اجازه می‌دهد وضعیت دستگاه را درستی‌سنجی کنند و سیگنال قوی‌ای از تمامیت راه‌اندازی با پشتیبانی سخت‌افزاری دریافت کنند. این گواهی به کلیدی بستگی دارد که Google در مخزن کلید با پشتوانه سخت‌افزاری دستگاه فراهم کرده است. ‫Play Integrity API درحال‌حاضر از تصدیق کلید برای دریافت سیگنال‌های امنیتی با پشتیبانی سخت‌افزار در برخی دستگاه‌ها استفاده می‌کند و اکنون آن‌ها را به‌طور عمیق‌تری در همه دستگاه‌های دارای Android 13 یا بالاتر ادغام خواهد کرد.

تغییرات حکم

چه تغییراتی در حکم‌های Play Integrity API در دستگاه‌های Android 13 یا نسخه‌های جدیدتر ایجاد شده است؟

اکنون Play Integrity API برای همه حکم‌های یکپارچگی به سیگنال‌های امنیتی با پشتیبانی سخت‌افزار نیاز دارد:

  • رأی تشخیص دستگاه meets-device-integrity نشان می‌دهد که دستگاهی که برنامه در آن اجرا می‌شود، دستگاه Android واقعی و دارای گواهینامه است. این حکم مستلزم آن است که راه‌انداز سیستم دستگاه قفل باشد و سیستم‌عامل Android بارشده تصویر سازنده دستگاه دارای گواهینامه باشد.
  • حکم تشخیص دستگاه meets-strong-integrity نشان‌دهنده دستگاه Android واقعی و دارای گواهینامه با به‌روزرسانی امنیتی اخیر است. این حکم به meets-device-integrity و به‌روزرسانی‌های امنیتی در سال گذشته برای همه پارتیشن‌های دستگاه، ازجمله وصله پارتیشن سیستم‌عامل Android و وصله پارتیشن فروشنده نیاز دارد. این شرایط ممکن است در آینده تغییر کند.
  • رأی تشخیص دستگاه meets-basic-integrity نشان می‌دهد که بررسی در دستگاه Android فیزیکی انجام شده است. راه‌انداز سیستم دستگاه می‌تواند قفل یا باز باشد و وضعیت راه‌اندازی می‌تواند درستی‌سنجی‌شده یا درستی‌سنجی‌نشده باشد. ممکن است گواهینامه نداشته باشد، که در این صورت Google نمی‌تواند هیچ‌گونه تضمینی برای امنیت، حریم خصوصی، یا سازگاری برنامه ارائه دهد و نمی‌تواند تضمین کند که دستگاه به‌عنوان پراکسی عمل نمی‌کند، مثلاً برای یک نمونه مجازی Android. این یعنی دستگاه‌های ریشه‌دارشده نیز تا زمانی که تصدیق کلید وجود داشته باشد، واجدشرایط برگرداندن meets-basic-integrity هستند.

این تغییرات بر Play Integrity API در «بازی‌های Play» برای رایانه تأثیر نمی‌گذارد و این API همچنان meets-virtual-integrity را برمی‌گرداند.

چرا حکم‌های Play Integrity API در دستگاه‌های Android 13 یا نسخه‌های جدیدتر تغییر کرد؟

‫Play Integrity API در Android 12 و نسخه‌های پایین‌تر تاحدی از سیگنال‌های امنیتی با پشتیبانی سخت‌افزار استفاده می‌کرد. با الزامی کردن امنیت با پشتیبانی سخت‌افزار در Android 13 و نسخه‌های بالاتر، حکم‌های Play Integrity API دربرابر مهاجمان مقاوم‌تر، برای برنامه‌ها کارآمدتر، و برای کاربران خصوصی‌تر است. توسعه‌دهندگان می‌توانند انتظار بهبودهای زیر را در دستگاه‌های دارای Android 13 یا بالاتر داشته باشند:

  • کاهش سیگنال‌های دستگاه که باید جمع‌آوری و ارزیابی شوند تا رأی پیش‌فرض در سرورهای Google با حدود ۹۰٪ تولید شود. سیگنال‌های اختیاری همچنان به سیگنال‌های اضافی برای جمع‌آوری نیاز خواهند داشت.
  • بهبود تأخیر حکم تا ۸۰٪ برای بدترین حالت درخواست‌های استاندارد و تا ۸۰٪ برای همه درخواست‌های کلاسیک برای دریافت حکم پیش‌فرض. سیگنال‌های اختیاری می‌توانند تأخیر را افزایش دهند.
  • سطح ثابتی از قابلیت اطمینان و پشتیبانی برای همه ابعاد Android با تصدیق کلید، ازجمله تلفن همراه، رایانه لوحی، تاشو، TV،‏ Auto،‏ Wear OS، و ChromeOS.
  • تمایز بیشتر بین هر برچسب دستگاه در حکم تشخیص دستگاه: meets-strong-integrity، meets-device-integrity، و meets-basic-integrity.

حکم Play Integrity API در «بازی‌های Play در رایانه» تغییر نمی‌کند و در Android 12 و نسخه‌های قدیمی‌تر همانند Android 13 و نسخه‌های بالاتر خواهد بود.

چگونه می‌توانم منطق پس‌زمینه برنامه‌ام را برای حکم‌های تمامیت به‌روز کنم تا نسخه کیت توسعه نرم‌افزار Android را درنظر بگیرد؟

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

کاتلین

val deviceIntegrity =
  JSONObject(payload).getJSONObject("deviceIntegrity")
val sdkVersion =
  if (deviceIntegrity.has("deviceAttributes")) {
    deviceIntegrity.getJSONObject("deviceAttributes").getInt("sdkVersion")
  } else {
    0
  }

if (sdkVersion >= 30) {
  // Provide Android R+ specific experience to the user.
}

جاوا

JSONObject deviceIntegrity =
  new JSONObject(payload).getJSONObject("deviceIntegrity");
int sdkVersion =
  deviceIntegrity.has("deviceAttributes")
    ? deviceIntegrity.getJSONArray("deviceAttributes").getInt("sdkVersion")
    : 0;

if (sdkVersion >= 30) {
  // Provide Android R+ specific experience to the user.
}

چگونه می‌توانم از تعریف برچسب قدیمی meets-strong-integrity در همه نسخه‌های کیت توسعه نرم‌افزار Android استفاده کنم؟

برای این کار می‌توانید منطق پسای برنامه را به‌روز کنید تا از meets-strong-integrity برای دستگاه‌های قدیمی‌تر از Android 13 و از meets-device-integrity برای دستگاه‌های Android 13 یا جدیدتر استفاده کند. برای این کار از فیلد مشخصه‌های جدید دستگاه در حکم که حاوی نسخه کیت توسعه نرم‌افزار Android است استفاده کنید. در اینجا نمونه‌ای از انجام این کار آورده شده است:

کاتلین

val deviceRecognitionVerdict =
  if (deviceIntegrity.has("deviceRecognitionVerdict")) {
    deviceIntegrity.getJSONArray("deviceRecognitionVerdict").toString()
  } else {
    ""
  }

val deviceIntegrityToCheckFor =
  sdkVersion < 33 ? "MEETS_STRONG_INTEGRITY" : "MEETS_DEVICE_INTEGRITY";

if (deviceRecognitionVerdict.contains(deviceIntegrityToCheckFor)) {
  // Looks good!
}

جاوا

JSONObject deviceIntegrity =
  new JSONObject(payload).getJSONObject("deviceIntegrity");
String deviceRecognitionVerdict =
  deviceIntegrity.has("deviceRecognitionVerdict")
    ? deviceIntegrity.getJSONArray("deviceRecognitionVerdict").toString()
    : "";

String deviceIntegrityToCheckFor =
  sdkVersion < 33 ? "MEETS_STRONG_INTEGRITY" : "MEETS_DEVICE_INTEGRITY";

if (deviceRecognitionVerdict.contains(deviceIntegrityToCheckFor)) {
  // Looks good!
}

چون این سیگنال با پشتیبانی سخت‌افزار نیز ارائه می‌شود، فیلد مشخصه‌های دستگاه در دستگاه‌های دارای Android 13 و بالاتر قابل‌اعتمادتر است.

چه تغییرات دیگری در حکم ایجاد شده است؟

ما به‌طور مداوم سرمایه‌گذاری می‌کنیم تا سیگنال‌های موجود در Play Integrity API را قابل‌اعتمادتر کنیم و به‌طور دوره‌ای ویژگی‌های جدیدی را برای کمک به توسعه‌دهندگان در مقابله با تهدیدات نوظهور و موارد استفاده جدید راه‌اندازی می‌کنیم. سایر بهبودهای حکم که ایجاد کرده‌ایم عبارتند از:

  • پاسخ دارای پروانه Play: برای برگرداندن پاسخ دارای پروانه Play، Play Integrity API اکنون همیشه نیاز دارد که برنامه درخواست‌کننده توسط Google Play نصب یا به‌روزرسانی شود. این کار برخی‌از موارد حاشیه‌ای را برطرف می‌کند و تفسیر پاسخ را برای توسعه‌دهندگان آسان‌تر می‌کند.
  • دردسترس بودن نشان‌های اختیاری: همه نشان‌های اختیاری دردسترس برای توسعه‌دهندگانی که از «کنسول Google Play» یا «کنسول کیت توسعه نرم‌افزار Play» استفاده می‌کنند (به‌جز مشخصه‌های دستگاه) اکنون مستلزم این هستند که برنامه درخواست‌کننده توسط Google Play در Android 13 یا نسخه‌های جدیدتر نصب یا به‌روزرسانی شده باشد. این شامل meets-strong-integrity، meets-basic-integrity، فعالیت اخیر دستگاه، به‌خاطرآوری دستگاه (نسخه بتا)، رأی مخاطره دسترسی برنامه‌ها، و رأی «سپر ایمنی Play» می‌شود. همه درخواست‌های دیگر Play Integrity API را استانداردسازی کردیم تا بررسی دستگاه (فقط با برچسب meets-device-integrity)، بررسی نصب‌کننده، بررسی تمامیت برنامه، و مشخصه‌های دستگاه (درصورت فعال بودن) را دریافت کنند.
  • تغییرات حکم برای دستگاه‌های خاص: Play Integrity API به‌طور خودکار حکم‌های دستگاه را در سناریوهای بیشتری تغییر می‌دهد تا از برنامه‌ها در همه نسخه‌های کیت توسعه نرم‌افزار Android زودتر محافظت کند، مثلاً وقتی که شواهدی از فعالیت بیش‌ازحد یا به‌خطر افتادن کلید وجود دارد. این شامل توانایی Play برای بازگشت به سیگنال‌های دیگر برای تولید حکم‌های موقت دستگاه برای کاربران در زمانی است که سیگنال‌های با پشتیبانی سخت‌افزاری دردسترس نیستند. به توسعه‌دهندگان توصیه می‌شود از گفتگوهای اصلاح Play درون‌برنامه استفاده کنند یا کاربران را به برنامه «فروشگاه Play» هدایت کنند تا مشکلات مربوط به حکم یکپارچگی را برطرف کنند. به‌مرور زمان، این کادرهای گفتگو سناریوهای بیشتری را پوشش خواهند داد و شامل راهنمایی‌های خاصی برای کاربران خواهند بود که به آن‌ها می‌گوید براساس دستگاه یا حساب خاص خود چه چیزی را باید اصلاح کنند.

چگونه مشکلات مربوط به حکم‌های یکپارچگی را گزارش کنم؟

برای گزارش کردن مشکلات مربوط به پاسخ‌های Play Integrity API، چه مشکل مربوط به حکم‌های قدیمی باشد چه حکم‌های جدید، دستورالعمل‌های موجود در صفحه پشتیبانی را دنبال کنید.

دردسترس بودن

Play Integrity API برای کار کردن به چه چیزی نیاز دارد؟

Play Integrity API مستلزم این است که «فروشگاه Google Play» و «خدمات Google Play» در دستگاه نصب شده باشد، این شامل دستگاه‌های Android و «بازی‌های Google Play» در رایانه می‌شود. درخواست‌های کلاسیک به Android نسخه ۴.۴ (سطح میانای برنامه‌سازی کاربردی ۱۹) یا بالاتر نیاز دارند و درخواست‌های استاندارد به Android نسخه ۵.۰ (سطح میانای برنامه‌سازی کاربردی ۲۱) یا بالاتر نیاز دارند. در دستگاه‌هایی که Android 13 (میانای برنامه‌سازی کاربردی سطح ۳۳) و نسخه‌های بالاتر را اجرا می‌کنند، Play Integrity API اکنون همان سطح از قابلیت اطمینان و پشتیبانی را در همه ابعاد Android با تصدیق کلید، ازجمله تلفن همراه، رایانه لوحی، دستگاه تاشو، TV،‏ Auto،‏ Wear OS، و ChromeOS خواهد داشت.

چرا Play Integrity API برای دستگاه‌های مختلف حکم‌های متفاوتی دارد؟

‫Play Integrity API چندین حکم دستگاه ارائه می‌دهد تا توسعه‌دهندگان با موارد استفاده و تحمل ریسک متفاوت بتوانند از آن استفاده کنند و امکان داشتن استراتژی اجرایی لایه‌ای فراهم شود. برای مثال، وقتی برنامه و دستگاه قابل‌اعتمادتر باشند، توسعه‌دهنده می‌تواند مراحل درستی‌سنجی کاربر را ساده‌تر کند؛ درحالی‌که وقتی دستگاه ناشناخته باشد، توسعه‌دهنده ممکن است قبل‌از انجام کنش‌های محافظت‌شده یا حساس، درستی‌سنجی کاربر بیشتری را الزامی کند. این کار می‌تواند روشی مؤثر برای کاهش سوءاستفاده و حملات باشد.

دستگاه Android دارای گواهینامه چیست؟

دستگاه Android دارای گواهینامه (که به‌عنوان دستگاه Android دارای گواهینامه «سپر ایمنی Play» نیز شناخته می‌شود) دستگاهی است که نرم‌افزار قابل‌پیش‌بینی را اجرا می‌کند، صدها آزمایش سازگاری Google را گذرانده است، از مدل امنیتی و اجازه‌های Android پیروی می‌کند، و با مجموعه ویژگی‌های ضدبدافزار «سپر ایمنی Google Play» عرضه شده است. وقتی Play Integrity API بتواند تأیید کند که دستگاهی یک دستگاه Android واقعی و دارای گواهینامه است، پاسخ meets-device-integrity را در حکم تشخیص دستگاه برمی‌گرداند.

دستگاه meets-basic-integrity چیست؟

Play Integrity API همچنین پاسخی اختیاری در حکم دستگاه برمی‌گرداند، meets-basic-integrity. اگر دستگاهی فقط حکم meets-basic-integrity را بدون meets-device-integrity یا meets-strong-integrity برگرداند، یعنی سیستم‌عامل Android نمی‌تواند درستی‌سنجی شود اما تصدیق کلید وجود دارد. این نشان می‌دهد که بررسی در دستگاه فیزیکی مجهز به Android انجام شده است، اما Google نمی‌تواند درباره امنیت، حریم خصوصی، یا سازگاری برنامه دستگاه اطمینان دهد و نمی‌تواند تضمین کند که دستگاه به‌عنوان پراکسی عمل نمی‌کند، مثلاً برای نمونه مجازی Android. بسته به موارد استفاده توسعه‌دهندگان و میزان تحمل ریسک آن‌ها، می‌توانند تصمیم بگیرند که چگونه می‌خواهند برنامه خود را در این دستگاه‌ها اجرا کنند.

آیا هر توسعه‌دهنده‌ای می‌تواند از Play Integrity API استفاده کند؟

بله، هر توسعه‌دهنده Android می‌تواند درخواست‌های Play Integrity API را برای دریافت حکم‌های یکپارچگی پیش‌فرض ارائه دهد. استفاده به ۱۰ هزار درخواست در روز محدود است، صرف‌نظر از کانال توزیع. توسعه‌دهندگانی که برنامه‌هایشان را علاوه‌بر کانال‌های توزیع دیگر در Google Play منتشر می‌کنند نیز می‌توانند برای افزایش سهمیه روزانه‌شان درخواست دهند.

آیا هر توسعه‌دهنده‌ای می‌تواند از «تصدیق کلید پلاتفرم Android» استفاده کند؟

بله، هر توسعه‌دهنده Android می‌تواند از «تصدیق کلید پلاتفرم Android» برای دریافت سوابق تصدیق کلید استفاده کند، که می‌تواند آن را با گواهی عمومی کلید ریشه تصدیق Google درستی‌سنجی کند. ‫Play Integrity API مزایای تصدیق کلید و ویژگی‌های اضافی را بدون پیچیدگی‌های ادغام با تصدیق کلید برای توسعه‌دهندگان فراهم می‌کند.

ضمانت اجرا

توسعه‌دهندگان چگونه از حکم‌های Play Integrity API استفاده می‌کنند؟

تصمیم‌گیری درباره اینکه آیا از احکام Play Integrity API استفاده شود یا نه و نحوه استفاده از آن‌ها برعهده توسعه‌دهندگان است. برخی‌از توسعه‌دهندگان سیگنال‌ها را برای تجزیه‌وتحلیل داخلی ضدسوءاستفاده جمع‌آوری می‌کنند، درحالی‌که توسعه‌دهندگان دیگر براساس حکم تصمیم می‌گیرند که برنامه‌شان چگونه رفتار کند. برای مثال، توسعه‌دهندگان می‌توانند تصمیم بگیرند که دستگاه‌های کمتر مطمئن را ملزم کنند تا مراحل درستی‌سنجی کاربر اضافی را هنگام ایجاد حساب انجام دهند؛ یا می‌توانند تصمیم بگیرند که دستگاه‌های کمتر مطمئن باید باهم در یک سرور چندبازیکنه بازی کنند.

آیا Play Integrity API کاربران یا دستگاه‌ها را مسدود می‌کند؟

نه، Play Integrity API خودش دسترسی به هیچ عملکردی را مسدود نمی‌کند. این سرویس اختیاری توسعه‌دهنده است که نشان‌هایی ارائه می‌دهد و توسعه‌دهندگان انتخاب می‌کنند چگونه براساس این نشان‌ها عمل کنند.

اگر دستگاه کاربران در بررسی‌های دستگاه Play Integrity API موفق عمل نکند، کاربران باید چه کاری انجام دهند؟

کاربران می‌توانند به برنامه «فروشگاه Play» در دستگاهشان بروند، منو «تنظیمات» را باز کنند، به «درباره» پیمایش کنند، و سپس زیر گواهینامه «سپر ایمنی Play» را نگاه کنند. اگر مشکلی در گواهینامه «سپر ایمنی Play» دستگاه وجود داشته باشد، دکمه‌ای وجود خواهد داشت که کاربران می‌توانند برای رفع مشکل آن را فشار دهند. با این کار، وضعیت گواهینامه دستگاه بازآوری می‌شود و راهنمایی خاصی درباره آنچه باید اصلاح شود ارائه می‌شود.