পিক্সেল বাইনারি ট্রান্সপারেন্সি লগ, ট্রান্সপারেন্সি লগ প্রযুক্তি ব্যবহার করে।
সার্টিফিকেট ট্রান্সপারেন্সি- এর মাধ্যমে ট্রান্সপারেন্সি লগ-এর উপযোগিতা প্রমাণিত হয়েছে। এটি এমন একটি ইন্টারনেট প্রোটোকল যা সার্টিফিকেট অথরিটিগুলোকে তাদের ইস্যু করা সার্টিফিকেটগুলো পাবলিক সার্টিফিকেট ট্রান্সপারেন্সি লগ-এ প্রকাশ করতে বাধ্য করে। এই প্রক্রিয়াটি ভুলভাবে সার্টিফিকেট ইস্যু করার ঘটনা ব্যাপকভাবে কমিয়ে দিয়েছে, যার ফলে ইন্টারনেটের নিরাপত্তা বৃদ্ধি পেয়েছে। অনেক সার্টিফিকেট ট্রান্সপারেন্সি লগ অপারেটর transparency.dev- এ উপলব্ধ ট্রান্সপারেন্সি লগ-এর একটি ইমপ্লিমেন্টেশনের উপর নির্ভর করে।
মার্কেল ট্রি ব্যবহার করে ট্রান্সপারেন্সি লগ বাস্তবায়ন করা হয়। এই পৃষ্ঠাটি মার্কেল ট্রি এবং বাইনারি ট্রান্সপারেন্সি সম্পর্কে সাধারণ জ্ঞান আছে বলে ধরে নেয়। মার্কেল ট্রি সম্পর্কে একটি সংক্ষিপ্ত বিবরণের জন্য ‘ভেরিফায়েবল ডেটা স্ট্রাকচারস’ দেখুন এবং বাইনারি ট্রান্সপারেন্সি সম্পর্কে একটি সংক্ষিপ্ত বিবরণের জন্য ল্যান্ডিং পৃষ্ঠাটি দেখুন।
লগ বাস্তবায়ন
পিক্সেল বাইনারি ট্রান্সপারেন্সি লগ একটি টাইল-ভিত্তিক মার্কল ট্রি হিসেবে বাস্তবায়িত হয়েছে। টাইলের বিষয়বস্তুর রুটটি 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 ডাইজেস্ট অন্তর্ভুক্ত থাকে, যা হলো একটি হ্যাশ এবং এটি OS ইমেজগুলোকে প্রতিনিধিত্ব করে, যা একটি ডিভাইস থেকে ফেরত দেওয়া যেতে পারে। দ্বিতীয়টি প্রমাণ করে যে, যখন ট্রিতে নতুন এন্ট্রি যোগ করা হয়, তখন নতুন চেকপয়েন্টটি ট্রির পূর্ববর্তী ভার্সনের সাথে সামঞ্জস্যপূর্ণ থাকে।
আপনার পিক্সেল ইমেজ যাচাই করার জন্য, ইনক্লুশন প্রুফটি সম্পাদন করুন। কনসিস্টেন্সি প্রুফ কম্পিউটেশনটি সম্পাদন করা ঐচ্ছিক, কারণ তৃতীয় পক্ষগুলো ক্রমাগত এটি করে আসছে।
আপনি যদি পিক্সেল বাইনারি ট্রান্সপারেন্সি-তে ভেরিফিকেশনের ধারণাগুলোর সাথে পরিচিত হতে চান, তাহলে আপনার পিক্সেল ডিভাইসে চলমান ইমেজটি ব্যবহার করার জন্য নিচের নির্দেশাবলী অনুসরণ করতে পারেন। আপনি যদি সর্বোচ্চ আস্থার সাথে পিক্সেল ফার্মওয়্যার চালাতে চান, তাহলে পিক্সেল বাইনারি ট্রান্সপারেন্সি ফুল ভেরিফিকেশন- এ ভেরিফিকেশন প্রক্রিয়াটি দেখুন।
যাচাইকরণের পূর্বশর্ত
আর্টিফ্যাক্টটি (ফার্মওয়্যার বা এপিকে) দাবি অনুযায়ী আছে কিনা তা যাচাই করার আগে, নিশ্চিত করুন যে নেটওয়ার্ক-সংযুক্ত কম্পিউটারে নিম্নলিখিত টুলগুলো উপলব্ধ আছে। যাচাইয়ের লক্ষ্যের উপর নির্ভর করে, আপনার এগুলোর সবগুলোর প্রয়োজন নাও হতে পারে।
গোলাং
যাচাইকরণ টুলটি Go ভাষায় লেখা হয়েছে। এটি বিল্ড করার জন্য Go সাইট থেকে Go 1.24 বা তার পরবর্তী সংস্করণ ইনস্টল করুন।
অ্যান্ড্রয়েড ডিবাগ ব্রিজ (ADB)
ADB হলো এমন একটি টুল যা অ্যান্ড্রয়েড ডিভাইসের সাথে যোগাযোগ করে ইমেজ পরীক্ষা করতে বা APK ফাইল এক্সট্র্যাক্ট করতে ব্যবহৃত হয় এবং এটি অ্যান্ড্রয়েড SDK প্ল্যাটফর্ম টুলস ওয়েবসাইটে পাওয়া যায়।
অন্তর্ভুক্তি প্রমাণ যাচাইকারী
ইনক্লুশন প্রুফ ভেরিফায়ার হলো একটি গো মডিউল, যা ট্রান্সপারেন্সি লগ কোয়েরি করে এবং কোনো আর্টিফ্যাক্ট সেই লগে অন্তর্ভুক্ত আছে কিনা তা আউটপুট হিসেবে জানায়। এটি 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 (অ্যান্ড্রয়েড অ্যাসেট প্যাকেজিং টুল) হলো একটি বিল্ড টুল যা একটি অ্যান্ড্রয়েড অ্যাপের রিসোর্সসমূহ কম্পাইল এবং প্যাকেজ করতে ব্যবহৃত হয়। এটি অ্যান্ড্রয়েড এসডিকে বিল্ড টুলস সংস্করণ ২৬.০.২ এবং তার পরবর্তী সংস্করণগুলোতে একটি স্বতন্ত্র টুল হিসেবে পাওয়া যায়।
বান্ডেলটুল
bundletool হলো একটি টুল যা অ্যান্ড্রয়েড অ্যাপ বান্ডেল (AAB) তৈরি করতে ব্যবহৃত হয়। এটি এপিকে (APK) কোড সিগনেচার যাচাই করতেও ব্যবহার করা যায়। এটি গিটহাব (GitHub) থেকে ডাউনলোড করা যায়।
wget অথবা curl
wget এবং curl হলো এমন টুল যা ইন্টারনেট থেকে ফাইল পুনরুদ্ধার বা ডাউনলোড করতে ব্যবহার করা যায়। এই টুলগুলোর যেকোনো একটি আপনার সিস্টেমে ইনস্টল করা আছে কিনা তা নিশ্চিত করুন, কারণ ভেরিফিকেশন স্ক্রিপ্টগুলো এগুলোর ওপর নির্ভর করতে পারে।
Avbtool
avbtool ফ্যাক্টরি ইমেজের VBMeta ডাইজেস্ট গণনা করতে এবং বাইনারি যাচাই করতে ব্যবহৃত হয়। avb রিপোজিটরি ক্লোন করার পর (যেমনটি ইনক্লুশন প্রুফ ভেরিফায়ার বিভাগে দেখানো হয়েছে), ক্লোন করা avb ডিরেক্টরির মধ্যে avbtool.py পাওয়া যাবে। আপনাকে এই ডিরেক্টরিটি আপনার $PATH এনভায়রনমেন্ট ভেরিয়েবলে যোগ করতে হবে।
computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL
Fbpacktool
fbpacktool হলো একটি পাইথন স্ক্রিপ্ট যা পিক্সেলের bootloader.img এর ভেতরের উপাদানগুলো আনপ্যাক করতে ব্যবহৃত হয়। আপনি যদি APK ভেরিফাই করেন, তবে এটির প্রয়োজন নেই। এই টুলটি গুরুত্বপূর্ণ কারণ এটি avbtool.py ভেরিফিকেশনের জন্য প্রয়োজনীয় ইমেজগুলো খুঁজে পেতে সাহায্য করে।
এই টুলটি ব্যবহার করার জন্য, আপনার 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 সাহায্য করে। নিশ্চিত করুন যে এটি আপনার সিস্টেমে ইনস্টল করা আছে। আপনি আপনার টার্মিনালে নিম্নলিখিত কমান্ডটি চালিয়ে এবং ফেরত আসা ফলাফলটি খালি নয় তা নিশ্চিত করে এটি পরীক্ষা করতে পারেন:
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।
সামঞ্জস্য প্রমাণ (ঐচ্ছিক)
যেহেতু গুগল পর্যায়ক্রমে পিক্সেল ফ্যাক্টরি ইমেজের নতুন সংস্করণ প্রকাশ করে, তাই ট্রান্সপারেন্সি লগ ক্রমাগত বাড়তে থাকে। একটি উইটনেস পরীক্ষা করে দেখে যে ট্রি-টি তার পূর্ববর্তী লিফগুলোর সাথে সামঞ্জস্যপূর্ণভাবে বৃদ্ধি পাচ্ছে কিনা। উইটনেস ট্রি-র রুট হ্যাশের হিসাব রাখে এবং ট্রি থেকে নতুন লিফ হ্যাশগুলো চেয়ে নিয়ে পরবর্তী সম্ভাব্য রুট হ্যাশ গণনা করে। একটি ট্রান্সপারেন্সি লগকে টেম্পার-এভিডেন্ট হতে হলে, সামঞ্জস্যের জন্য এটিকে ক্রমাগত পরীক্ষা করা আবশ্যক।
ট্রান্সপারেন্সি লগের শুধুমাত্র-সংযোজন আচরণটি তৃতীয় পক্ষ দ্বারা সক্রিয়ভাবে পরীক্ষা করা হয়, তাই বেশিরভাগ ব্যবহারকারীর নিজেদের এটি করার প্রয়োজন হয় না, তবে যে কেউ লগটির সামঞ্জস্য পর্যবেক্ষণ করতে পারেন। গুগল এই গিটহাব রিপোজিটরিতে একটি উইটনেসের ওপেন-সোর্স ইমপ্লিমেন্টেশন প্রকাশ করেছে। পিক্সেল বাইনারি ট্রান্সপারেন্সি (PixelBT) লগের জন্য নির্দিষ্ট কনফিগারেশনটি ব্যবহার করা আবশ্যক।