שקיפות הקוד היא מנגנון אופציונלי לחתימת קוד ולאימות, אפליקציות שפורסמו בקובץ Android App Bundle. הוא משתמש בשקיפות קוד מפתח החתימה, שנמצא בבעלותו הבלעדית של מפַתח האפליקציה.
שקיפות הקוד לא תלויה בסכמת החתימה שמשמשת עבור קובצי App Bundle וגם חבילות APK. מפתח השקיפות של הקוד הוא נפרד ושונה מחתימת האפליקציה מפתח שמאוחסן בתשתית המאובטחת של Google כשמשתמשים בחתימת אפליקציה ב-Play.
איך פועלת שקיפות הקוד
התהליך פועל על ידי הכללת קובץ של שקיפות קוד בחבילה לאחר מכן נבנה, אבל לפני שהוא מועלה ל-Play Console להפצה.
קובץ שקיפות הקוד הוא אסימון רשת מבוסס JSON (JWT) שמכיל רשימה של DEX הקבצים והספריות המקוריות שכלולים בחבילה, יחד עם הגיבובים שלהם. לאחר מכן הוא חתומה באמצעות מפתח שקיפות של קוד שנמצא בידי המפתח בלבד.
קובץ שקיפות הקוד הזה מופץ אל ה-APK הבסיסי שנוצר מהאפליקציה חבילה (במיוחד לפיצול הראשי של מודול הבסיס). לאחר מכן היא יכולה להיות אימת ש:
- לכל קובצי ה-DEX והקודים המקוריים שקיימים בחבילות ה-APK יש גיבובים (hash) תואמים את קובץ שקיפות הקוד.
- רכיב המפתח הציבורי של מפתח החתימה לשקיפות קוד באפליקציה תואם למפתח הציבורי של המפתח (שצריך לספק על ידי בערוץ נפרד ומאובטח).
ביחד, המידע הזה מאמת שהקוד שכלול חבילות ה-APK תואמות למה שהמפתח התכוון אליו, ושלא בוצעו בהן שינויים.
קובץ שקיפות הקוד לא מאמת משאבים, נכסים או מכשירי Android
קובץ מניפסט או כל קובץ אחר שאינו קובצי DEX או ספריות מקוריות
בתיקייה lib/
.
אימות שקיפות הקוד משמש אך ורק למטרת בדיקה על ידי מפתחים ומשתמשי קצה, שרוצים לוודא שהקוד שהם מפעילים תואם את הקוד שנוצר במקור ונחתם על ידי מפַתח האפליקציה.
מגבלות ידועות
יש מצבים מסוימים שבהם אי אפשר להשתמש בשקיפות קוד:
- אפליקציות שמציינות את
sharedUserId
במניפסט. בקשות כאלה עשויות לשתף את התהליך שלהן עם אחרים, ולכן קשה להבטיח שהם מריצים. - אפליקציות שמשתמשות בהגנה מפני זיוף או כל שירות אחר שמבצע שינויים בקוד אחרי שנוצר קובץ שקיפות הקוד, שקיפות הקוד תיכשל.
- אפליקציות שמשתמשות ב-Multidex מדור קודם ברמות API שקודמות ל-21 (Android 5.0) ומשתמשים בהן של הפיצ'רים האלה. שקיפות הקוד תמשיך לפעול כשהאפליקציה מותקנת על ידי Google Play במכשירים עם Android 5.0 ואילך. שקיפות הקוד תהיה מושבת בגרסאות מערכת הפעלה ישנות יותר.
איך להוסיף שקיפות קוד
לפני שתוכלו להוסיף שקיפות קוד לאפליקציה, עליכם לוודא שיש לכם זוג של מפתחות פרטיים וציבוריים, שאפשר להשתמש בהם לצורך חתימה על שקיפות קוד. הזה הוא צריך להיות מפתח ייחודי ששונה מחתימת האפליקציה שבה משתמשים עבור 'חתימת אפליקציה ב-Play', וצריך להחזיק את האפליקציה באופן מאובטח ואף פעם לא לשתף אותה מחוץ בארגון שלך.
אם אין לכם מפתח, תוכלו לפעול לפי ההוראות במאמר בנושא חתימה על האפליקציה. שלנו כדי ליצור מודל במחשב שלכם. שקיפות הקוד מבוססת על של מאגר מפתחות, כך שלמרות שהמדריך מיועד לחתימת אפליקציות, יצירת מפתחות אותו תהליך.
שימוש בפלאגין של Android Gradle
כדי לתמוך בשקיפות קוד נדרשת גרסה 7.1.0-alpha03 של הפלאגין Android Gradle
או גרסה חדשה יותר. כדי להגדיר את המפתח שמשמש לחתימה על שקיפות קוד, צריך להוסיף את
עוקבים בבלוק bundle
.
מגניב
// In your app module's build.gradle file: android { ... bundle { codeTransparency { signing { keyAlias = "ALIAS" keyPassword = "PASSWORD" storeFile = file("path/to/keystore") storePassword = "PASSWORD" } } ... } }
Kotlin
// In your app module's build.gradle.kts file: android { ... bundle { codeTransparency { signing { keyAlias = "ALIAS" keyPassword = "PASSWORD" storeFile = file("path/to/keystore") storePassword = "PASSWORD" } } ... } }
המפתח שמשתמשים בו חייב להיות מפתח שישמש אתכם רק לצורך שקיפות קוד. ולא חתימת האפליקציה שמשמשת את חתימת האפליקציה ב-Play.
שימוש ב-bundletool
בשורת הפקודה
לתמיכה בשקיפות קוד נדרשת Bundletool בגרסה 1.7.0 ואילך, יכולים להוריד מ-GitHub.
מריצים את הפקודה הבאה כדי להוסיף שקיפות קוד לקובץ Android App Bundle. המפתח שמשתמשים בו חייב להיות מפתח שישמש אתכם רק לצורך שקיפות קוד. ולא חתימת האפליקציה שמשמשת את חתימת האפליקציה ב-Play.
bundletool add-transparency \
--bundle=/MyApp/my_app.aab \
--output=/MyApp/my_app_with_transparency.aab \
--ks=/MyApp/keystore.jks \
--ks-pass=file:/MyApp/keystore.pwd \
--ks-key-alias=MyKeyAlias \
--key-pass=file:/MyApp/key.pwd
לחלופין, אם ברצונך להשתמש בכלי חתימה משלך, אפשר להשתמש ב-bundletool כדי ליצור את קובץ השקיפות של הקוד הלא חתום, חותמים עליו ולהחדיר את החתימה לחבילה:
# Generate code transparency file
bundletool add-transparency \
--mode=generate_code_transparency_file \
--bundle=/MyApp/my_app.aab \
--output=/MyApp/code_transparency_file.jwt \
--transparency-key-certificate=/MyApp/transparency.cert
# Add code transparency signature to the bundle
bundletool add-transparency \
--mode=inject_signature \
--bundle=/MyApp/my_app.aab \
--output=/MyApp/my_app_with_transparency.aab \
--transparency-key-certificate=/MyApp/transparency.cert \
--transparency-signature=/MyApp/signature
אימות שקיפות הקוד של האפליקציה
יש שיטות שונות לאימות הקוד ביחס לשקיפות הקוד קובץ, בהתאם לאופן שבו חבילות ה-APK מותקנות במכשיר Android או באופן מקומי למחשב.
שימוש ב-Bundtool כדי לבדוק קבוצת App Bundle או APK
אפשר להשתמש ב-bundletool כדי לאמת שקיפות קוד ב-App Bundle או ב-APK
הוגדרה. משתמשים בפקודה check-transparency
כדי להדפיס את טביעת האצבע לאישור הציבורי:
# For checking a bundle:
bundletool check-transparency \
--mode=bundle \
--bundle=/MyApp/my_app_with_transparency.aab
No APK present. APK signature was not checked.
Code transparency signature is valid. SHA-256 fingerprint of the code transparency key certificate (must be compared with the developer's public key manually): 01 23 45 67 89 AB CD EF ..
Code transparency verified: code related file contents match the code transparency file.
# For checking a ZIP containing app's APK splits:
bundletool check-transparency \
--mode=apk \
--apk-zip=/MyApp/my_app_with_transparency.zip
APK signature is valid. SHA-256 fingerprint of the apk signing key certificate (must be compared with the developer's public key manually): 02 34 E5 98 CD A7 B2 12 ..
Code transparency signature is valid. SHA-256 fingerprint of the code transparency key certificate (must be compared with the developer's public key manually): 01 23 45 67 89 AB CD EF ..
Code transparency verified: code related file contents match the code transparency file.
אפשר לציין את האישור הציבורי שאותו רוצים לאמת. Bundle או APK לפיהם, כך שלא יהיה צורך להשוות את הגיבובים באופן ידני:
bundletool check-transparency \
--mode=bundle \
--bundle=/MyApp/my_app_with_transparency.aab \
--transparency-key-certificate=/MyApp/transparency.cert
No APK present. APK signature was not checked.
Code transparency signature verified for the provided code transparency key certificate.
Code transparency verified: code related file contents match the code transparency file.
bundletool check-transparency \
--mode=apk \
--apk-zip=/MyApp/my_app_with_transparency.zip \
--apk-signing-key-certificate=/MyApp/apk.cert \
--transparency-key-certificate=/MyApp/transparency.cert
APK signature verified for the provided apk signing key certificate.
Code transparency signature verified for the provided code transparency key certificate.
Code transparency verified: code related file contents match the code transparency file.
שימוש ב-Bundtool כדי לבדוק אפליקציה שמותקנת במכשיר
כדי לבדוק אפליקציה שהותקנה במכשיר Android, מוודאים המכשיר מחובר למחשב דרך ADB ושולח את הפקודה הבאה:
bundletool check-transparency \
--mode=connected_device \
--package-name="com.my.app"
APK signature is valid. SHA-256 fingerprint of the apk signing key certificate (must be compared with the developer's public key manually): 02 34 E5 98 CD A7 B2 12 ..
Code transparency signature is valid. SHA-256 fingerprint of the code transparency key certificate (must be compared with the developer's public key manually): 01 23 45 67 89 AB CD EF ..
Code transparency verified: code related file contents match the code transparency file.
בדיקת השקיפות של המכשיר המחובר יכולה גם לאמת את החתימה מול מפתח ציבורי שציינתם:
bundletool check-transparency \
--mode=connected-device \
--package-name="com.my.app" \
--apk-signing-key-certificate=/MyApp/apk.cert \
--transparency-key-certificate=/MyApp/transparency.cert
APK signature verified for the provided apk signing key certificate.
Code transparency signature verified for the provided code transparency key certificate.
Code transparency verified: code related file contents match the code transparency file.