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

Pixel Binary Transparency Log использует технологию журнала прозрачности.

Полезность журналов прозрачности была доказана с помощью «Прозрачности сертификатов» — интернет-протокола, который требует от центров сертификации публиковать выдаваемые ими сертификаты в общедоступных журналах прозрачности сертификатов. Этот процесс значительно сократил количество ошибок в выдаче сертификатов, тем самым повысив безопасность Интернета. Многие операторы журналов прозрачности сертификатов полагаются на реализацию журналов прозрачности, найденную на сайте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 Binary, вы можете следовать приведенным ниже инструкциям, чтобы использовать изображение, запущенное на вашем устройстве Pixel. Если вы хотите использовать прошивку Pixel с максимальной степенью уверенности, ознакомьтесь с процессом проверки на странице Полная проверка двоичной прозрачности пикселей .

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

Убедитесь, что доступны следующие зависимости:

  • Golang: инструмент проверки должен быть построен на Go 1.17 или более поздней версии, доступной на сайте Go .
  • Android Debug Bridge (adb): связывается с устройством Android для проверки образа, доступного на веб-сайте Android SDK Platform Tools .
  • Верификатор доказательства включения: взаимодействует с журналом, чтобы проверить, находится ли изображение пикселя в журнале двоичной прозрачности.
# Source code for the inclusion proof verifier is found at avb/tools/transparency/verify
git clone https://android.googlesource.com/platform/external/avb

Доказательство включения

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

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

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

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

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

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