יומן השקיפות של מודולים ראשיים ב-Android

יומן השקיפות של מודולי Mainline ב-Android משתמש במבני נתונים שניתנים לאימות כדי להבטיח את השלמות של מודולי Mainline.

התועלת של יומני שקיפות הוכחה בפרויקטים כמו Pixel Binary Transparency ו-שקיפות אישורים.

יומני שקיפות מבוססים על עצי מרקל. בדף הזה מניחים שיש לכם ידע כללי בעצי מרקל ובשקיפות בינארית. במאמר Verifiable Data Structures (מבני נתונים שניתן לאימות) מופיע סקירה כללית של עצי מרקל, ובדף הראשי מופיעה סקירה כללית של המאמצים להשגת שקיפות בינארית ב-Android.

הטמעה של יומנים

יומן השקיפות של מודולי Android Mainline מיושם באמצעות Tessera ועומד בדרישות של מפרט tlog-tiles עם גובה משבצת של 8 (כל משבצת או חבילה מכילה לכל היותר 28 = 256 פריטים).

הבסיס של תוכן היומן מוצג בכתובת: https://gstatic.com/android/binary_transparency/mainline/2026/02/tile/entries/

השורש של תוכן הכרטיס מוצג בכתובת: https://gstatic.com/android/binary_transparency/mainline/2026/02/tile/

חשוב לדעת שכתובות ה-URL האלה לא מייצגות דפי אינטרנט רגילים. במקום זאת, צריך לגשת לערכי היומן בספריות המשנה שלו באופן פרוגרמטי באמצעות כלים כמו Tessera או הספרייה Tlog של Golang SumDB.

  • ‫Tree Tiles: גיבובים של צמתים פנימיים וצמתי עלים בעץ מרקל מוגשים בכתובת tile/<level>/<path> (לדוגמה, tile/0/000, tile/1/000).
  • חבילות של רשומות: המטען הייעודי (payload) של רשומות העלה מאורגן בחבילות של רשומות תחת tile/entries/<path> (לדוגמה, tile/entries/000, ‏ tile/entries/001), וכל חבילה מכילה עד 256 רשומות שרשוריות.

במאמר תוכן היומן מוסבר מה כל רשומה מכילה.

הגיבוב (hash) של שורש עץ מרקל ביומן, שמופיע בנקודת ביקורת, מוצג בכתובת https://gstatic.com/android/binary_transparency/mainline/2026/02/checkpoint בפורמט של נקודת ביקורת. מקור נקודת הבדיקה הוא gstatic.com/android/binary_transparency/mainline/modules/2026/1.

חתימות של נקודות ביקורת נוצרות באמצעות אלגוריתם החתימה Ed25519. אפשר לאמת את החתימה של נקודת הבדיקה באמצעות המפתח הציבורי הבא בפורמט של כלי לאימות הערות (כפי שמוגדר ב-golang.org/x/mod/sumdb/note) או בפורמט PEM רגיל:

  • פורמט מאמת ההערות (<name>+<key_hash>+<public_key_bytes>):
MainlineModulesLogV2+e490c9dd+AfwnHm59rNQTJICchMd7a2W5PQa7nC5h2gTEfq3fhCEI
  • פורמט PEM‏ (SubjectPublicKeyInfo):
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEA/Ccebn2s1BMkgJyEx3trZbk9BrucLmHaBMR+rd+EIQg=
-----END PUBLIC KEY-----

יומן שהועבר לארכיון (גרסה 1)

לפני העדכון של הרבעון השלישי של 2026, היומן פעל במסגרת הטמעה מוקדמת יותר של גרסה 1 באמצעות חתימות ECDSA (NIST P-256 עם SHA-256). היומן בגרסה 1 מאוחסן בארכיון ומוגדר לקריאה בלבד, אבל הוא עדיין נגיש לכולם כדי לאמת רשומות היסטוריות:

-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEr6nPds8eKCYU42avidXNM1GDCtQ/
66GjGuIpUcZjqQNngwRFVCFZDpWuvDnqXzhJRxqccL9lbeEVVZGpa4x6pg==
-----END PUBLIC KEY-----

מודולים של Mainline דומים לחבילות APK, ולכן שיטות האימות שמתוארות בדף האימות של חבילות APK של Google רלוונטיות גם כאן. אפשר להשתמש בשיטות שמופיעות שם כדי לאמת את הטענות שמופיעות במודל של בעל הזכויות.