Состояние устройства

Состояние устройства указывает, насколько свободно программное обеспечение можно перепрограммировать на устройство и применяется ли проверка. Состояния устройства: LOCKED и UNLOCKED . LOCKED устройства не позволяют вам устанавливать на устройство новое программное обеспечение, тогда как UNLOCKED устройства позволяют вносить изменения.

Когда устройство включается, загрузчик сначала проверяет, LOCKED или UNLOCKED устройство. Если устройство UNLOCKED , загрузчик показывает пользователю предупреждение и затем продолжает загрузку, даже если загруженная ОС не подписана корнем доверия.

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

Изменение состояния устройства

Чтобы изменить состояние устройства , используйте fastboot flashing [unlock | lock] команда. Чтобы защитить пользовательские данные, все переходы между состояниями стирают разделы данных и запрашивают подтверждение пользователя перед удалением данных.

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

Корень доверия

Корень доверия — это криптографический ключ, используемый для подписи копии Android, хранящейся на устройстве. Частная часть корня доверия известна только производителю устройства и используется для подписи каждой версии Android, предназначенной для распространения. Публичная часть корня доверия встроена в устройство и хранится в таком месте, где ее невозможно подделать (обычно это хранилище только для чтения).

При загрузке Android загрузчик использует корень доверия для проверки подлинности. Дополнительные сведения об этом процессе см. в разделе Проверка загрузки . Устройства могут иметь несколько загрузчиков, и поэтому могут использоваться несколько криптографических ключей.

Настраиваемый пользователем корень доверия

Устройства могут дополнительно позволить пользователю настроить корень доверия (например, открытый ключ). Устройства могут использовать этот настраиваемый пользователем корень доверия для проверенной загрузки вместо встроенного корня доверия. Это позволяет пользователю устанавливать и использовать собственные версии Android, не жертвуя улучшениями безопасности Verified Boot.

Если реализован настраиваемый пользователем корень доверия, это должно быть сделано таким образом, чтобы:

  • Для установки/очистки настраиваемого пользователем корня доверия требуется физическое подтверждение.
  • Настраиваемый пользователем корень доверия может быть установлен только конечным пользователем. Его нельзя установить на заводе или в какой-либо промежуточной точке до того, как устройство получит конечный пользователь.
  • Настраиваемый пользователем корень доверия хранится в защищенном от несанкционированного доступа хранилище. Защита от несанкционированного доступа означает, что можно обнаружить, что Android подделал данные, например, были ли они перезаписаны или изменены.
  • Если установлен настраиваемый пользователем корень доверия, устройство должно разрешить загрузку версии Android, подписанной либо встроенным корнем доверия, либо настраиваемым пользователем корнем доверия.
  • Каждый раз, когда устройство загружается с использованием настраиваемого пользователем корня доверия, пользователь должен быть уведомлен о том, что устройство загружает специальную версию Android. Например, экраны предупреждений см. в разделе LOCKED устройства с пользовательским набором ключей .

Одним из способов реализации настраиваемого пользователем корня доверия является создание виртуального раздела, который можно перепрограммировать или очистить только тогда, когда устройство находится в UNLOCKED состоянии. Устройства Google Pixel 2 используют этот подход, а виртуальный раздел называется avb_custom_key . Формат данных в этом разделе — это выходные данные команды avbtool extract_public_key . Вот пример того, как установить настраиваемый пользователем корень доверия:

avbtool extract_public_key --key key.pem --output pkmd.bin
fastboot flash avb_custom_key pkmd.bin

Настраиваемый пользователем корень доверия можно очистить, выполнив:

fastboot erase avb_custom_key