> Кратко для титеретиков. Если ты можешь поставить свой ключ, Вообще-то я обходил подобные по смыслу схемы уже давно, когда для линуксов оно даже на горизонте еще не маячило. Так что это я вас поучу тому как это работает, а не вы меня, увы, гражданин титиретик ;)
> то и вор тоже может поставить свой ключ
Не сможет. Для титиретиков сообщаю: eFuses в самсуневом проце прошиваются ОДИН раз. Их стирание не предусмотрено. Ну разве что проц в девайсе целиком заменять, но это довольно невкусно по цене получается. И вообще, гемор. Ибо перепайка высокоплотного BGA. Не то чтобы оно совсем невозможно, но замок меняется только вместе с дверью и половиной стены. Отлито единым блоком. Такая фигня.
Как это работает? В проце есть накристальный boot ROM, сформированный при производстве. Он неизменяемый и является неотъемлимым свойством проца. Вы никак не можете влиять на его логику. Потому что это не есть перепрограммируемая память. Этот boot ROM умеет грузиться с кучи разных периферийных интерфейсов. В зависимости от - NAND флеш, usb, или еше чего-нибудь. Зависит от того что туда напхал производитель и как сконфигурирует загрузку тот кто паял это в систему.
Кроме того, в проце есть однократно записываемые eFuses - небольшой блок однократно программируемой памяти, чаще всего это нечто наподобие ячеек flash или EEPROM. Но с одним невкусным отличием: не предусмотрено операции стирания. Это как правило однократно программируемая память в таких процах.
Что происходит при включении: проц запускается. Точкой входа является накристальный boot ROM. Оный минимально инициализирует периферию, осознает (по методам оговоренным в даташитах) с какого интерфейса будет загрузка и кроме всего прочего - проверяет состояние фьюзов. Если фьюзы не прописаны - считается что это non-secure boot и на дальнейшие проверки подписей забивается. Чистый проц с фабрики сам по себе не имеет владельца, что логично.
А вот если в фьюзах что-то записано - это считается за SHA-1(pubkey). Тогда производится попытка прочитать из выбранного интерфейса загрузки этот самый pubkey. Далее проверяется его SHA-1. Если совпало - ок, это ключ настоящего owner'а системы - грузимся дальше. Иначе загрузка стопается. После загрузки ключа - грузится первичный загрузчик. Первая часть кода которую уже может менять пользователь. При режиме секурной загрузки boot ROM проверит что этот код валидно подписан ранее упомянутым ключом (SHA-1 которого он уже проверил). Такая схема удостоверяет что тот кто первый вписал eFuses и является фактическим полноценным owner'ом такой системы. Далее его загрузчики могут по цепочке верифицировать следующие загрузчики, ядро ОС, ... .
Owner может в принципе поиграть в контролируемую демократию, сломав цепочку трастов в одном из загрузчиков и позволив оному догружать неподписанный код. Но это целиком на его совести, равно как и алгоритмы всего этого. А самый ранний контроль над железякой получает тот кто прописал в фьюзы sha1 своего публичного ключа. Заменить этот ключ нельзя (кроме случая когда вы коллизии в SHA-1 умеете генерить для произвольных данных). Потому что стирание в ефьюзах не предусмотрено.
Думается вот такаая вот одноразовость и не нравится сабжевому субъекту. Да, гугл где-то там потом ломает цепочку загрузки и дает метод грузануть код без подписи. Проблема в том что невозможно стать полным owner-ом такой железки, сделав так чтобы она слушалась только вас, вписав СВОЙ ключ как единственно доверяемый железкой. Как минимум железка продолжит доверять предыдущему владельцу. Как максимум - вас вообще в железку не пустят (как у эппла например).