История изменений
Исправление kmeaw, (текущая версия) :
TPM придумали давно. Это устройство, в которое можно отправлять слепки критически важных загрузочных компонентов (куски прошивки, загрузчик, ядро, важные драйвера), после чего состояние будет необратимым (в рамках текущего запуска платформы) и предсказуемым образом меняться.
То есть пока система загружается, она отчитывается в TPM, что был загружен такой-то кусок, и у него на этот момент был такой-то хеш, а TPM меняет состояние своих регистров. При этом у TPM нет команды «установить регистр X в значение Y». Есть только «установить регистр X в значение hash(old_X || Y)».
Зачем всё это нужно? Дело в том, что ещё у TPM есть хранилище, куда можно складывать секреты и политики, управляющие доступом к ним. Например, можно положить внутрь TPM свой приватный SSH-ключ, и настроить TPM так, чтобы он позволял им пользоваться тогда и только тогда, когда биос+ядро+grub+initramfs были «хорошими». Если злоумышленник поломает систему и что-то в ней изменит, то TPM не даст ему получить доступ к секрету.
Ещё TPM может выполнять функцию криптотокена - то есть не просто хранить секреты и выдавать их наружу, но и хранить неизвлекаемые ключи, и в случае выполнения условий полтики позволять выполнять над ними (внутри TPM) криптографические операции. В этом случае даже если злоумышленник сможет сломать систему, не изменяя ни одного критического компонента (например, через 0-day уязвимость в sshd), то он не сможет скопировать секрет, а лишь получит возможность временно (пока у него сохраняется доступ к сломанной машине) использовать его.
Исходная версия kmeaw, :
TPM придумали давно. Это устройство, в которое можно отправлять слепки критически важных загрузочных компонентов (куски прошивки, загрузчик, ядро, важные драйвера), после чего состояние будет необратимым (в рамках текущего запуска платформы) и предсказуемым образом меняться.
То есть пока система загружается, она отчитывается в TPM, что был загружен такой-то кусок, и у него на этот момент был такой-то хеш, а TPM меняет состояние своих регистров. При этом у TPM нет команды «установить регистр X в значение Y». Есть только «установить регистр X в значение hash(old_X || Y)».
Зачем всё это нужно? Дело в том, что ещё у TPM есть хранилище, куда можно складывать секреты и политики, управляющие доступом к ним. Например, можно положить внутрь TPM свой приватный SSH-ключ, и настроить TPM так, чтобы он позволял им пользоваться тогда и только тогда, когда биос+ядро+grub+initramfs были «хорошими». Если злоумышленник поломает систему и что-то в ней изменит, то TPM не даст ему получить доступ к секрету.
Ещё TPM может выполнять функцию криптотокена - то есть не просто хранить секреты и выдавать их наружу, но и хранить неизвлекаемые ключи, и в случае выполнения условий полтики позволять выполнять над ними (внутри TPM) криптографические операции.