Pixel बाइनरी ट्रांसपेरंसी की तकनीकी जानकारी वाला पेज

Pixel बाइनरी ट्रांसपेरंसी लॉग, ट्रांसपेरंसी लॉग टेक्नोलॉजी का इस्तेमाल करता है.

सर्टिफ़िकेट ट्रांसपेरंसी (सीटी) से, ट्रांसपेरंसी लॉग की उपयोगिता साबित हुई है. यह एक इंटरनेट प्रोटोकॉल है. इसके तहत, सर्टिफ़िकेट अथॉरिटी को अपने जारी किए गए सर्टिफ़िकेट, सार्वजनिक सर्टिफ़िकेट ट्रांसपेरंसी लॉग में पब्लिश करने होते हैं. इस प्रोसेस से, गलत तरीके से सर्टिफ़िकेट जारी करने की घटनाएं काफ़ी कम हुई हैं. इससे इंटरनेट की सुरक्षा बढ़ी है. transparency.dev

ट्रांसपेरंसी लॉग, मर्कल ट्री की मदद से लागू किए जाते हैं. इस पेज पर, यह मान लिया गया है कि आपको मर्कल ट्री और बाइनरी ट्रांसपेरंसी के बारे में सामान्य जानकारी है. मर्कल ट्री की खास जानकारी के लिए, पुष्टि किए जा सकने वाले डेटा स्ट्रक्चर देखें. साथ ही, बाइनरी ट्रांसपेरंसी की खास जानकारी के लिए, लैंडिंग पेज देखें.

लॉग लागू करना

Pixel बाइनरी ट्रांसपेरंसी लॉग को टाइल-आधारित मर्कल ट्री के तौर पर लागू किया जाता है. टाइलों के कॉन्टेंट का रूट, https://developers.google.com/android/binary_transparency/tile पर उपलब्ध होता है. ध्यान दें: यह कोई सामान्य वेब पेज नहीं है. इसकी सबडायरेक्ट्री में मौजूद लॉग एंट्री को, Golang SumDB TLog लाइब्रेरी की मदद से प्रोग्राम के ज़रिए पढ़ा जाना चाहिए. इसे ब्राउज़र से नहीं पढ़ा जाना चाहिए.

एंट्री में क्या-क्या शामिल होता है, यह जानने के लिए लॉग का कॉन्टेंट देखें.

किसी लॉग का मर्कल ट्री रूट हैश, चेकपॉइंट में शामिल होता है. यह https://developers.google.com/android/binary_transparency/checkpoint.txt पर उपलब्ध होता है. यह चेकपॉइंट फ़ॉर्मैट में दिखता है. इस मर्कल ट्री के लीफ़, 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-----

पुष्टि की प्रोसेस में, लॉग से चेकपॉइंट और लॉग एंट्री वाली टाइलें पढ़ी जाती हैं.

पुष्टि की प्रोसेस

ट्रांसपेरंसी लॉग को, हैश वाले मर्कल ट्री की मदद से लागू किया जाता है. लीफ़ नोड में डेटा होता है. वहीं, पैरंट नोड में अपने चाइल्ड नोड का हैश होता है.

ट्रांसपेरंसी लॉग की छेड़छाड़ से सुरक्षित होने की प्रॉपर्टी की पुष्टि करने के लिए, मर्कल ट्री पर दो तरह की गणनाएं की जाती हैं: शामिल किए जाने की पुष्टि और एक जैसा होने की पुष्टि. पहली पुष्टि से यह साबित होता है कि लॉग में, इमेज के वर्शन से जुड़ी कोई एंट्री शामिल है, इसका मतलब है कि लॉग एंट्री में VBMeta डाइजेस्टशामिल है. यह एक हैश है, जो ओएस इमेज को दिखाता है. इसे किसी डिवाइस से वापस लाया जा सकता है. दूसरी पुष्टि से यह साबित होता है कि ट्री में नई एंट्री जोड़ने पर, नया चेकपॉइंट, ट्री के पिछले वर्शन के मुताबिक होता है.

अपने Pixel की इमेज की पुष्टि करने के लिए, शामिल किए जाने की पुष्टि करें. एक जैसा होने की पुष्टि की गणना करना ज़रूरी नहीं है, क्योंकि तीसरे पक्ष लगातार ऐसा कर रहे हैं.

अगर आपको Pixel बाइनरी ट्रांसपेरंसी में पुष्टि के कॉन्सेप्ट के बारे में जानना है, तो अपने Pixel डिवाइस पर चल रही इमेज का इस्तेमाल करने के लिए, यहां दिया गया तरीका अपनाएं. अगर आपको Pixel फ़र्मवेयर को पूरी तरह से भरोसे के साथ चलाना है, तो Pixel बाइनरी ट्रांसपेरंसी की पूरी पुष्टि की प्रोसेस देखें .

पुष्टि के आवेदन से जुड़ी शर्तें

यह पुष्टि करने से पहले कि आर्टफ़ैक्ट (फ़र्मवेयर या APK) दावे के मुताबिक है या नहीं, पक्का करें कि नेटवर्क से कनेक्ट किए गए कंप्यूटर पर ये टूल उपलब्ध हों. पुष्टि के टारगेट के आधार पर, हो सकता है कि आपको इन सभी टूल की ज़रूरत न पड़े.

Golang

पुष्टि करने वाला टूल, Go में लिखा गया है. इसे बनाने के लिए, Go की साइट से Go 1.24 या इसके बाद का वर्शन इंस्टॉल करें.

Android डीबग ब्रिज (ADB)

ADB एक ऐसा टूल है जो Android डिवाइस से कम्यूनिकेट करता है. इसकी मदद से, Android SDK प्लैटफ़ॉर्म टूल की website पर उपलब्ध इमेज की जांच की जा सकती है या APK निकाले जा सकते हैं.

शामिल किए जाने की पुष्टि करने वाला टूल

शामिल किए जाने की पुष्टि करने वाला टूल, 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

AAPT2

AAPT2 (Android ऐसेट पैकेजिंग टूल) एक बिल्ड टूल है. इसका इस्तेमाल, Android ऐप्लिकेशन के संसाधनों को कंपाइल और पैकेज करने के लिए किया जाता है. यह Android SDK बिल्ड टूल के वर्शन 26.0.2 और इसके बाद के वर्शन में, स्टैंडअलोन टूल के तौर पर उपलब्ध है.

बंडलटूल

bundletool एक ऐसा टूल है जिसका इस्तेमाल, Android ऐप्लिकेशन बंडल (एएबी) बनाने के लिए किया जाता है. इसका इस्तेमाल, APK कोड सिग्नेचर की पुष्टि करने के लिए भी किया जा सकता है. इसे GitHub से डाउनलोड किया जा सकता है.

wget या curl

wget और curl ऐसे टूल हैं जिनका इस्तेमाल, इंटरनेट से फ़ाइलें वापस लाने या डाउनलोड करने के लिए किया जा सकता है. पक्का करें कि इनमें से कोई एक टूल इंस्टॉल हो, क्योंकि पुष्टि करने वाले स्क्रिप्ट इन पर निर्भर हो सकते हैं.

Avbtool

avbtool का इस्तेमाल, फ़ैक्ट्री इमेज के VBMeta डाइजेस्ट और बाइनरी की पुष्टि करने के लिए किया जाता है. avb रिपॉज़िटरी को क्लोन करने के बाद (जैसा कि शामिल किए जाने की पुष्टि करने वाले टूल सेक्शन में दिखाया गया है), avbtool.py क्लोन की गई avb डायरेक्ट्री में मिल सकता है. आपको इस डायरेक्ट्री को अपने $PATH एनवायरमेंट वैरिएबल में जोड़ना चाहिए.

computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL

Fbpacktool

fbpacktool एक Python स्क्रिप्ट है. इसका इस्तेमाल, Pixel के कॉम्पोनेंट को अनपैक करने के लिए किया जाता हैbootloader.img. अगर आपको APK की पुष्टि करनी है, तो इसकी ज़रूरत नहीं है. यह टूल ज़रूरी है, क्योंकि इसकी मदद से avbtool.py को पुष्टि के लिए ज़रूरी इमेज का पता चलता है.

इस टूल का इस्तेमाल करने के लिए, आपको इन तीन Python स्क्रिप्ट को उस डायरेक्ट्री में डाउनलोड करना होगा जहां आपका avbtool.py मौजूद है. साथ ही, fbpacktool.py को एक्ज़ीक्यूटेबल बनाना होगा. इसके अलावा, आसानी के लिए fbpacktool.py के लिए fbpacktool नाम का एक सिमलंक बनाना होगा.

अगर आपके पास 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 Verified Boot रिपॉज़िटरी में पब्लिश किए गए, शामिल किए जाने की पुष्टि करने वाले टूल को चलाया जाता है. यह टूल, लॉग एंट्री के उम्मीदवार का हैश कंप्यूट करता है. साथ ही, लॉग से चेकपॉइंट को फिर से कंप्यूट करने के लिए ज़रूरी अन्य हैश वापस लाता है. इसके बाद, इसकी तुलना लॉग से पब्लिश किए गए चेकपॉइंट से करता है.

कमांड का आउटपुट, stdout में लिखा जाता है:

  • अगर इमेज लॉग में शामिल है, तो OK
  • अगर इमेज लॉग में शामिल नहीं है, तो FAILURE

एक जैसा होने की पुष्टि (ज़रूरी नहीं)

Google, Pixel की फ़ैक्ट्री इमेज के नए वर्शन समय-समय पर रिलीज़ करता है. इसलिए, ट्रांसपेरंसी लॉग लगातार बढ़ता रहता है. विटनेस यह जांचता है कि ट्री, अपने पिछले लीफ़ के मुताबिक बढ़ रहा है या नहीं. विटनेस, ट्री रूट हैश का ट्रैक रखता है. साथ ही, ट्री से नए लीफ़ हैश का अनुरोध करके, अगले उम्मीदवार रूट हैश को कंप्यूट करता है. ट्रांसपेरंसी लॉग को छेड़छाड़ से सुरक्षित रखने के लिए, यह लगातार जांचना ज़रूरी है कि यह एक जैसा है या नहीं.

ट्रांसपेरंसी लॉग के सिर्फ़ जोड़ने वाले व्यवहार की जांच, तीसरे पक्ष लगातार करते हैं. इसलिए, ज़्यादातर उपयोगकर्ताओं को यह काम खुद करने की ज़रूरत नहीं होती. हालांकि, कोई भी व्यक्ति लॉग की एक जैसी स्थिति की निगरानी कर सकता है. Google ने इस Github रिपो में, विटनेस का एक ओपन-सोर्स लागू करने का तरीका पब्लिश किया है. Pixel बाइनरी ट्रांसपेरंसी (PixelBT) लॉग के लिए, खास कॉन्फ़िगरेशन का इस्तेमाल करना ज़रूरी है.