يستفيد "سجلّ الشفافية الثنائي" في Pixel من تكنولوجيا سجلّ الشفافية.
وقد ثبتت فائدة سجلّات الشفافية من خلال شهادة الشفافية، وهي بروتوكول إنترنت يتطلّب من مراجع التصديق نشر الشهادات التي تصدرها في سجلّات شهادات الشفافية العامة. وقد أدّت هذه العملية إلى الحدّ بشكل كبير من إصدار الشهادات بشكل خاطئ، ما أدّى إلى زيادة أمان الإنترنت. يعتمد العديد من مشغّلي سجلات "شهادة الشفافية" على تنفيذ لسجلات الشفافية يمكن العثور عليه في transparency.dev.
يتم تنفيذ سجلّات الشفافية باستخدام أشجار Merkle. تفترض هذه الصفحة معرفة عامة ببنية Merkle الشجرية والشفافية الثنائية. يمكنك الاطّلاع على بُنى البيانات القابلة للتحقّق للحصول على نظرة عامة حول أشجار Merkle، وعلى الصفحة المقصودة للحصول على نظرة عامة حول الشفافية الثنائية.
تنفيذ السجلّ
يتم تنفيذ "سجلّ شفافية الملفات الثنائية" في Pixel على شكل شجرة Merkle مستندة إلى مربّعات. يتم عرض جذر محتوى المربّع في https://developers.google.com/android/binary_transparency/tile. ملاحظة: هذه الصفحة ليست صفحة ويب عادية، بل يجب قراءة إدخالات السجلّ المتوفّرة في الدلائل الفرعية بشكل آلي باستخدام مكتبة TLog في Golang SumDB وليس من خلال متصفّح.
يمكنك الاطّلاع على محتوى السجلّ للحصول على وصف للمعلومات التي تتضمّنها الإدخالات.
يتم عرض تجزئة جذر شجرة Merkle لسجلّ، مضمّنة في نقطة التحقّق، على الرابط https://developers.google.com/android/binary_transparency/checkpoint.txt. ويتم تقديمها بتنسيق نقطة التحقّق. يتم عرض أوراق شجرة Merkle هذه على https://developers.google.com/android/binary_transparency/image_info.txt. يمكن التحقّق من توقيع نقطة التحقّق باستخدام المفتاح العام التالي:
-----BEGIN CERTIFICATE-----
MIICPDCCAeOgAwIBAgIVAPooxISw/nFF/dPwmCUaV36Z4s3hMAoGCCqGSM49BAMCMHQxCzAJBgNV
BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYD
VQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDAgFw0y
MTA3MTkyMjQxNDFaGA8yMDUxMDcxOTIyNDE0MVowdDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNh
bGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBJbmMuMRAw
DgYDVQQLEwdBbmRyb2lkMRAwDgYDVQQDEwdBbmRyb2lkMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD
QgAEU83uXNUiTYE53c2TfdWmqpW20bBXy4KEf5Ff8dV8GLKlVAXKHyjw3Lp9J3E0yCRJ/39XKeuA
AMF7KzSvhD248KNQME4wDAYDVR0TBAUwAwEB/zAdBgNVHQ4EFgQUHRpvuNkzjtBY213BWgUyWWHm
3VYwHwYDVR0jBBgwFoAUHRpvuNkzjtBY213BWgUyWWHm3VYwCgYIKoZIzj0EAwIDRwAwRAIgZsZb
CNBXRkCKLS+LG/41VWj1cTszt9QCdJQNuy7aT94CIDPgn7v5b1ykBVUTuLgRSofxAzHg9R4dg1oA
7tTFAuDg
-----END CERTIFICATE-----
تتضمّن عملية التحقّق قراءة نقطة التحقّق والمربّعات التي تحتوي على إدخالات السجلّ من السجلّ.
عملية التحقّق من الأهلية
يتم تنفيذ سجلّ الشفافية باستخدام شجرة Merkle تتألف من قيم تجزئة. يحتوي جزء الورقة على بيانات، ويحتوي الجزء الأصلي على تجزئة الأجزاء الفرعية.
يتم إجراء عمليتَي حساب على شجرة Merkle للتحقّق من خاصية مقاومة التلاعب في سجلات الشفافية، وهما إثبات التضمين وإثبات الاتساق. يثبت الأول أنّ السجلّ يتضمّن إدخالاً مطابقًا لإصدار صورة، أي أنّ إدخال السجلّ يتضمّن ملخّص VBMeta، وهو قيمة تجزئة تمثّل صور نظام التشغيل التي يمكن إرجاعها من الجهاز. ويثبت الأخير أنّه عند إضافة إدخالات جديدة إلى الشجرة، تكون نقطة التحقّق الجديدة متوافقة مع الإصدار السابق من الشجرة.
لإثبات صحة صورة Pixel، عليك إجراء عملية إثبات التضمين. إنّ إجراء عملية حسابية لإثبات الاتساق هو أمر اختياري، لأنّ الجهات الخارجية تجريها باستمرار.
إذا أردت التعرّف على مفاهيم التحقّق في ميزة "شفافية الرمز الثنائي" على Pixel، يمكنك اتّباع التعليمات أدناه لاستخدام الصورة التي يتم تشغيلها على جهاز Pixel. إذا أردت تشغيل برامج Pixel الثابتة بأعلى مستوى من الثقة، يمكنك الاطّلاع على عملية التحقّق في التحقّق الكامل من شفافية ثنائيات Pixel.
متطلبات الشهادة الأساسية
قبل المتابعة للتحقّق من أنّ العنصر (البرامج الثابتة أو حِزمة APK) يتوافق مع المطالبة، تأكَّد من توفّر الأدوات التالية على جهاز كمبيوتر متصل بشبكة. بناءً على هدف التحقّق، قد لا تحتاج إلى كل هذه المعلومات.
Golang
أداة التحقّق مكتوبة بلغة Go. لتثبيتها، يجب تثبيت الإصدار 1.24 من Go أو إصدار أحدث من موقع Go الإلكتروني.
Android Debug Bridge (ADB)
ADB هي أداة تتواصل مع جهاز Android لفحص الصورة أو استخراج حِزم APK، وهي متاحة على الموقع الإلكتروني لأدوات منصة Android SDK.
أداة التحقّق من صحة مستند إثبات التضمين
أداة التحقّق من صحة دليل التضمين هي وحدة Go تطلب بيانات من سجلّ الشفافية وتحدّد ما إذا كان أحد العناصر مضمّنًا في السجلّ.
تم نشرها في android-binary-transparency مستودع GitHub على
https://github.com/android/android-binary-transparency/tree/main
لإنشاء نسخة طبق الأصل من مستودع AOSP avb، اتّبِع الخطوات التالية:
computer:~$ git clone https://android.googlesource.com/platform/external/avb
لاستنساخ مستودع android-binary-transparency GitHub، اتّبِع الخطوات التالية:
computer:~$ git clone https://github.com/android/android-binary-transparency
أداة تجميع الموارد في Android (AAPT2)
AAPT2 (أداة تجميع الموارد في Android) هي أداة إنشاء تُستخدَم لتجميع موارد تطبيق Android وتعبئتها. يمكن العثور عليها كأداة مستقلة في الإصدار 26.0.2 والإصدارات الأحدث من أدوات إنشاء حزمة تطوير البرامج (SDK) لنظام التشغيل Android.
bundletool
bundletool هي أداة تُستخدَم لإنشاء "مجموعة حزمات تطبيق Android" (AAB). ويمكن أيضًا استخدامها للتحقّق من توقيعات رموز APK.
ويمكن تنزيله من GitHub.
wget أو curl
wget وcurl هما أداتان يمكن استخدامهما لاسترداد الملفات أو تنزيلها من الإنترنت. احرص على تثبيت إحدى هاتين الأداتين، لأنّ نصوص التحقّق البرمجية قد تعتمد عليهما.
Avbtool
يُستخدَم avbtool لحساب الملخّص الخاص ببيانات VBMeta لصور البرامج الثابتة الأصلية والتحقّق من الثنائيات.
بعد استنساخ مستودع avb (كما هو موضّح في قسم أداة التحقّق من صحة دليل التضمين)، يمكن العثور على avbtool.py في دليل avb المستنسخ.
عليك إضافة هذا الدليل إلى متغيّر بيئة $PATH.
computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL
Fbpacktool
fbpacktool
هو نص برمجي بلغة Python يُستخدم لتفريغ المكوّنات الفردية في bootloader.img على هواتف Pixel.
لا تحتاج إلى ذلك إذا كنت بصدد إثبات ملكية حِزم APK.
هذه الأداة مهمة لأنّها تتيح لـ avbtool.py العثور على الصور المطلوبة لإثبات الملكية.
للاستفادة من هذه الأداة، عليك تنزيل نصوص Python البرمجية الثلاثة التالية
في الدليل الذي يتضمّن ملف 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
تساعد openssl في تنفيذ عمليات تشفير متنوعة باستخدام الوحدة الطرفية في سير عمل تأكيد الملكية. تأكَّد من تثبيته على نظامك. يمكنك التحقّق من ذلك في الوحدة الطرفية من خلال تنفيذ الأمر التالي والتأكّد من أنّ النتيجة المعروضة ليست فارغة:
computer:~$ which openssl
/usr/bin/openssl
مستند إثبات الإدراج
يمكن لمالك هاتف Pixel التأكّد من أنّ صورته مضمّنة في السجلّ من خلال استخراج البيانات الوصفية ذات الصلة أولاً، ثم مقارنة قيمة التجزئة الجذرية التي تمّت إعادة حسابها بقيمة التجزئة الجذرية الواردة في نقطة التحقّق المنشورة. وفي حال تطابُقها، يمكن لمالك هاتف Pixel الاطمئنان إلى توفّر بعض أدوات الحماية الموضّحة في نموذج التهديدات.
للتحقّق من أنّ الصورة على جهاز Pixel مضمّنة في سجلّ الشفافية، وصِّل الجهاز باستخدام 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
يسترد المقطع الأول البيانات الوصفية من جهاز Pixel بتنسيق إدخال سجلّ، ويحفظها في /tmp/log_payload.txt.
تنفِّذ المقطع الثاني أداة التحقّق من صحة دليل التضمين المنشورة في مستودع "التشغيل المتحقّق منه في Android". تحسب هذه الأداة التجزئة الخاصة بإدخال السجلّ المرشّح، وتسترد التجزئات الأخرى اللازمة لإعادة احتساب نقطة التحقّق من السجلّ، وتقارنها بنقطة التحقّق التي نشرها السجلّ.
تتم كتابة مخرجات الأمر إلى الإخراج القياسي:
OKإذا كانت الصورة مضمّنة في السجلّ،FAILUREإذا لم يكن كذلك.
مستند إثبات الانتظام (اختياري)
بما أنّ Google تطرح بشكل دوري إصدارات جديدة من صورة المصنع لجهاز Pixel، يتزايد سجلّ الشفافية باستمرار. يتحقّق الشاهد من أنّ الشجرة تنمو بطريقة تتوافق مع أوراقها السابقة. يحتفظ الشاهد بقيمة التجزئة الجذرية للشجرة، ويحسب قيمة التجزئة الجذرية المرشّحة التالية من خلال طلب قيم التجزئة الجديدة للعُقد الطرفية من الشجرة. لكي يكون سجلّ الشفافية مقاومًا للتلاعب، يجب التحقّق منه باستمرار للتأكّد من اتّساقه.
يتم التحقّق من سلوك الإضافة فقط لسجلّ الشفافية بشكل نشط من قِبل جهات خارجية، وبالتالي لا يحتاج معظم المستخدمين إلى إجراء ذلك بأنفسهم، ولكن يمكن لأي شخص مراقبة اتساق السجلّ. نشرت Google تنفيذًا مفتوح المصدر لبرنامج شاهد في مستودع Github هذا. من الضروري استخدام الإعدادات الخاصة بسجلّ Pixel Binary Transparency (PixelBT).