Страница технических сведений о двоичной прозрачности пикселей

В журнале прозрачности пиксельного двоичного представления используется технология регистрации прозрачности.

Полезность журналов прозрачности была доказана на примере протокола Certificate Transparency (CTS), который обязывает центры сертификации публиковать выданные ими сертификаты в общедоступных журналах Certificate Transparency. Этот процесс значительно сократил количество случаев ошибочной выдачи сертификатов, тем самым повысив безопасность Интернета. Многие операторы журналов Certificate Transparency используют реализацию журналов прозрачности, доступную по адресу 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 , хеш, представляющий образы ОС, которые могут быть возвращены с устройства. Второе доказывает, что при добавлении новых записей в дерево новая контрольная точка согласуется с предыдущей версией дерева.

Для проверки изображения Pixel выполните проверку на соответствие. Выполнение проверки на соответствие является необязательным, поскольку сторонние организации постоянно это делают.

Если вы хотите ознакомиться с концепциями проверки прозрачности бинарного кода Pixel, вы можете следовать приведенным ниже инструкциям, чтобы использовать образ, работающий на вашем устройстве Pixel. Если вы хотите запускать прошивку Pixel с максимальной уверенностью, ознакомьтесь с процессом проверки в разделе «Полная проверка прозрачности бинарного кода Pixel» .

Предварительные условия проверки

Прежде чем приступать к проверке соответствия артефакта (прошивки или APK-файла) заявленным характеристикам, убедитесь, что на компьютере, подключенном к сети, доступны следующие инструменты. В зависимости от цели проверки, вам могут не понадобиться все из них.

Golang

Инструмент проверки написан на языке Go. Для его сборки установите Go версии 1.24 или более поздней с сайта Go .

Отладочный мост Android (ADB)

ADB — это инструмент, который взаимодействует с устройством Android для проверки образа или извлечения APK-файлов; его можно найти на веб-сайте Android SDK Platform Tools.

Верификатор подтверждения включения

Модуль проверки наличия артефакта в логе — это модуль 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 Asset Packaging Tool) — это инструмент сборки, используемый для компиляции и упаковки ресурсов Android-приложения. Он доступен как отдельный инструмент в Android SDK Build Tools версии 26.0.2 и выше.

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 Verified Boot . Этот инструмент вычисляет хеш потенциальной записи в журнале, извлекает другие хеши, необходимые для пересчета контрольной точки из журнала, и сравнивает его с контрольной точкой, опубликованной в журнале.

Вывод команды записывается в стандартный поток вывода (stdout):

  • OK если изображение включено в лог.
  • Если это не так, то FAILURE .

Доказательство согласованности (необязательно)

Поскольку Google периодически выпускает новые версии заводского образа Pixel, журнал прозрачности постоянно пополняется. Свидетель проверяет, что дерево растет в соответствии с предыдущими листьями. Свидетель отслеживает хеш корня дерева и вычисляет следующий потенциальный хеш корня, запрашивая у дерева хеши новых листьев. Для того чтобы журнал прозрачности был защищен от подделки, его необходимо постоянно проверять на согласованность.

Поведение журнала прозрачности, допускающее только добавление данных, активно проверяется сторонними разработчиками, поэтому большинству пользователей не нужно делать это самостоятельно, но любой желающий может отслеживать согласованность журнала. Google опубликовал реализацию средства проверки с открытым исходным кодом в этом репозитории Github . Необходимо использовать конфигурацию, специфичную для журнала Pixel Binary Transparency (PixelBT).