صفحه جزئیات فنی شفافیت باینری پیکسل

گزارش شفافیت دودویی پیکسل از فناوری گزارش شفافیت بهره می‌برد.

کاربرد گزارش‌های شفافیت با شفافیت گواهی (Certificate Transparency )، یک پروتکل اینترنتی که مراجع صدور گواهی را ملزم به انتشار گواهی‌هایی می‌کند که صادر می‌کنند، در گزارش‌های شفافیت گواهی عمومی، اثبات شده است. این فرآیند، صدور نادرست گواهی‌ها را تا حد زیادی کاهش داده و در نتیجه امنیت اینترنت را افزایش داده است. بسیاری از اپراتورهای گزارش شفافیت گواهی به پیاده‌سازی گزارش‌های شفافیت موجود در transparency.dev متکی هستند.

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

پیاده‌سازی لاگ

گزارش شفافیت دودویی پیکسل به صورت یک درخت مرکل مبتنی بر کاشی پیاده‌سازی شده است. ریشه محتوای کاشی در آدرس https://developers.google.com/android/binary_transparency/tile ارائه می‌شود. توجه: این یک صفحه وب معمولی نیست؛ ورودی‌های گزارش موجود در زیرشاخه‌های آن باید به صورت برنامه‌نویسی شده با کتابخانه Golang SumDB TLog خوانده شوند و نه از طریق مرورگر.

برای توضیح محتویات ورودی‌ها، به محتوای گزارش مراجعه کنید.

هش ریشه درخت مرکل یک لاگ، که در یک Checkpoint قرار دارد، در آدرس https://developers.google.com/android/binary_transparency/checkpoint.txt ارائه می‌شود. این فایل در قالب Checkpoint ارائه می‌شود. برگ‌های این درخت مرکل در آدرس https://developers.google.com/android/binary_transparency/image_info.txt ارائه می‌شوند. امضای Checkpoint را می‌توان با کلید عمومی زیر تأیید کرد:

-----BEGIN CERTIFICATE-----
MIICPDCCAeOgAwIBAgIVAPooxISw/nFF/dPwmCUaV36Z4s3hMAoGCCqGSM49BAMCMHQxCzAJBgNV
BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYD
VQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDAgFw0y
MTA3MTkyMjQxNDFaGA8yMDUxMDcxOTIyNDE0MVowdDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNh
bGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBJbmMuMRAw
DgYDVQQLEwdBbmRyb2lkMRAwDgYDVQQDEwdBbmRyb2lkMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD
QgAEU83uXNUiTYE53c2TfdWmqpW20bBXy4KEf5Ff8dV8GLKlVAXKHyjw3Lp9J3E0yCRJ/39XKeuA
AMF7KzSvhD248KNQME4wDAYDVR0TBAUwAwEB/zAdBgNVHQ4EFgQUHRpvuNkzjtBY213BWgUyWWHm
3VYwHwYDVR0jBBgwFoAUHRpvuNkzjtBY213BWgUyWWHm3VYwCgYIKoZIzj0EAwIDRwAwRAIgZsZb
CNBXRkCKLS+LG/41VWj1cTszt9QCdJQNuy7aT94CIDPgn7v5b1ykBVUTuLgRSofxAzHg9R4dg1oA
7tTFAuDg
-----END CERTIFICATE-----

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

فرآیند تأیید

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

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

برای تأیید تصویر پیکسلی خود، اثبات شمول را انجام دهید. انجام محاسبات اثبات سازگاری اختیاری است، زیرا اشخاص ثالث دائماً این کار را انجام می‌دهند.

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

پیش‌نیازهای تأیید

قبل از اقدام برای تأیید مطابقت محصول (میان‌افزار یا APK) با ادعا، مطمئن شوید که ابزارهای زیر در رایانه متصل به شبکه موجود هستند. بسته به هدف تأیید، ممکن است به همه آنها نیاز نداشته باشید.

گولانگ

ابزار تأیید با زبان Go نوشته شده است. برای ساخت آن، Go 1.24 یا بالاتر را از سایت Go نصب کنید.

پل اشکال‌زدایی اندروید (ADB)

ADB ابزاری است که با دستگاه اندروید ارتباط برقرار می‌کند تا تصویر را بررسی کند یا فایل‌های APK را استخراج کند، که در وب‌سایت Android SDK Platform Tools موجود است.

تأییدکننده اثبات شمول

تأییدکننده‌ی اثبات شمول، یک ماژول Go است که لاگ شفافیت را بررسی می‌کند و مشخص می‌کند که آیا یک مصنوع در لاگ گنجانده شده است یا خیر. این ماژول در مخزن گیت‌هاب android-binary-transparency به آدرس https://github.com/android/android-binary-transparency/tree/main منتشر شده است.

برای کلون کردن مخزن AOSP avb :

computer:~$ git clone https://android.googlesource.com/platform/external/avb

برای کلون کردن مخزن گیت‌هاب android-binary-transparency :

computer:~$ git clone https://github.com/android/android-binary-transparency

AAPT2

AAPT2 (ابزار بسته‌بندی دارایی‌های اندروید) یک ابزار ساخت است که برای کامپایل و بسته‌بندی منابع یک برنامه اندروید استفاده می‌شود. این ابزار را می‌توان به عنوان یک ابزار مستقل در ابزارهای ساخت SDK اندروید نسخه 26.0.2 و بالاتر یافت.

ابزار بسته

bundletool ابزاری است که برای ساخت یک بسته نرم‌افزاری اندروید (AAB) استفاده می‌شود. همچنین می‌توان از آن برای تأیید امضاهای کد APK استفاده کرد. می‌توان آن را از GitHub دانلود کرد.

wget یا curl

wget و curl ابزارهایی هستند که می‌توانند برای بازیابی یا دانلود فایل‌ها از اینترنت استفاده شوند. مطمئن شوید که هر یک از این ابزارها را نصب کرده‌اید، زیرا اسکریپت‌های تأیید ممکن است به آنها متکی باشند.

آوبتول

avbtool برای محاسبه خلاصه VBMeta از تصاویر کارخانه و تأیید فایل‌های باینری استفاده می‌شود. پس از کلون کردن مخزن avb (همانطور که در بخش تأییدکننده اثبات شمول نشان داده شده است)، avbtool.py می‌توان در دایرکتوری avb کلون شده یافت. شما باید این دایرکتوری را به متغیر محیطی $PATH خود اضافه کنید.

computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL

ابزار بسته‌بندی فیسبوک

fbpacktool یک اسکریپت پایتون است که برای باز کردن اجزای جداگانه در bootloader.img پیکسل استفاده می‌شود. اگر در حال تأیید APKها هستید، به این ابزار نیاز ندارید. این ابزار مهم است زیرا به avbtool.py اجازه می‌دهد تصاویر مورد نیاز برای تأیید را کشف کند.

برای استفاده از این ابزار، باید سه اسکریپت پایتون زیر را در دایرکتوری که avbtool.py شما قرار دارد دانلود کنید، fbpacktool.py را قابل اجرا کنید و برای راحتی کار، یک لینک نمادین به نام fbpacktool به fbpacktool.py ایجاد کنید.

اگر wget دارید:

computer:dir_to_avbtool$ wget https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/fbpacktool.py \
https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/fbpack.py \
https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/packedstruct.py
computer:dir_to_avbtool$ chmod +x fbpacktool.py
computer:dir_to_avbtool$ ln -s fbpacktool.py fbpacktool

اگر curl دارید:

computer:dir_to_avbtool$ curl -O https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/fbpacktool.py
computer:dir_to_avbtool$ curl -O https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/fbpack.py
computer:dir_to_avbtool$ curl -O https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/packedstruct.py
computer:dir_to_avbtool$ chmod +x fbpacktool.py
computer:dir_to_avbtool$ ln -s fbpacktool.py fbpacktool

اوپن‌اس‌اس‌ال

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

computer:~$ which openssl
/usr/bin/openssl

اثبات شمول

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

برای بررسی اینکه تصویر روی دستگاه پیکسل در گزارش شفافیت وجود دارد، با adb به دستگاه متصل شوید ، سپس دستورات زیر را اجرا کنید:

FINGERPRINT=$(adb shell getprop ro.build.fingerprint)
VBMETA_DIGEST=$(adb shell getprop ro.boot.vbmeta.digest)
LOG_ENTRY="${FINGERPRINT}\n${VBMETA_DIGEST}\n"
PAYLOAD_PATH="/tmp/log_payload.txt"
echo -e $LOG_ENTRY >> $PAYLOAD_PATH

cd avb/tools/transparency/verify/
go build cmd/verifier/verifier.go
./verifier --payload_path=$PAYLOAD_PATH

بند اول، فراداده را از یک دستگاه پیکسل در قالب یک ورودی لاگ بازیابی می‌کند و آن را در /tmp/log_payload.txt ذخیره می‌کند.

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

خروجی دستور در stdout نوشته می‌شود:

  • اگر تصویر در گزارش گنجانده شده باشد، OK ،
  • اگر اینطور نباشد، FAILURE .

اثبات سازگاری (اختیاری)

از آنجایی که گوگل به صورت دوره‌ای نسخه‌های جدیدی از تصویر کارخانه پیکسل را منتشر می‌کند، گزارش شفافیت به طور مداوم در حال رشد است. یک شاهد (witness) بررسی می‌کند که درخت به شیوه‌ای سازگار با برگ‌های قبلی خود رشد می‌کند. شاهد، هش ریشه درخت را پیگیری می‌کند و با درخواست هش‌های برگ جدید از درخت، هش ریشه کاندید بعدی را محاسبه می‌کند. برای اینکه یک گزارش شفافیت از نظر دستکاری قابل اعتماد باشد، باید به طور مداوم از نظر سازگاری بررسی شود.

رفتار فقط-افزودنیِ گزارش شفافیت به‌طور فعال توسط اشخاص ثالث بررسی می‌شود و بنابراین اکثر کاربران نیازی به انجام این کار خودشان ندارند، اما هر کسی می‌تواند بر ثبات گزارش نظارت کند. گوگل یک پیاده‌سازی متن‌باز از یک شاهد (witness) را در این مخزن گیت‌هاب منتشر کرده است. استفاده از پیکربندی مخصوص گزارش شفافیت دودویی پیکسل (PixelBT) ضروری است.