Привет, я пытаюсь зашифровать вторичный диск данных. Я хочу, чтобы этот диск был расшифрован во время загрузки моей машины. В настоящее время у меня установлена RAID-массив с томом LVM наверху, который уже зашифрован с помощью LUKS.
Я выполнил такую команду: sudo clevis luks bind -d /dev/RaidVG/LVMVol tpm2 '{"pcr_ids":"15", "pcr_bank":"sha256"}'
Теперь, как я понимаю, я привязываю добавление keyslot к моему заголовку LUKS, который привязан к моему модулю TPM2.0 на банке PCR 15. Теперь это, кажется, работает, но я не понимаю, что происходит, когда я выполняю 'tpm2_pcrread'. Он говорит, что мое pcr 'value' по-прежнему равно 0:
$ sudo tpm2_pcrread
sha1:
sha256:
0 : 0xREDACTED
1 : 0xREDACTED
2 : 0xREDACTED
3 : 0xREDACTED
4 : 0xREDACTED
5 : 0xREDACTED
6 : 0xREDACTED
7 : 0xREDACTED
8 : 0x0000000000000000000000000000000000000000000000000000000000000000
9 : 0x0000000000000000000000000000000000000000000000000000000000000000
10: 0x0000000000000000000000000000000000000000000000000000000000000000
11: 0x0000000000000000000000000000000000000000000000000000000000000000
12: 0x0000000000000000000000000000000000000000000000000000000000000000
13: 0x0000000000000000000000000000000000000000000000000000000000000000
14: 0x0000000000000000000000000000000000000000000000000000000000000000
15: 0x0000000000000000000000000000000000000000000000000000000000000000
16: 0x0000000000000000000000000000000000000000000000000000000000000000
17: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
18: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
19: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
20: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
21: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
22: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
23: 0x0000000000000000000000000000000000000000000000000000000000000000
sha384:
sha512:
Что именно означают эти значения ПЦР? Я не могу найти ответ на этот вопрос в сети. Разве эти значения не должны меняться после того, как я что-то делаю с моим банком ПЦР?
Еще одна странность заключается в том, что когда я шифрую простой файл Hello World, следуя этому руководству (https://www.fit-pc.com/wiki/index.php?title=Linux:_Полное_шифрование_диска), я получаю точно такой же зашифрованный вывод "eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI". Теперь они не отображают весь вывод, который получают, только первую строку. Это потому, что у меня настроены некоторые ключи по умолчанию? Или это какой-то общий заголовок? Мой модуль TPM виртуализирован, так что это также может быть проблемой.
Надеюсь, кто-нибудь сможет объяснить подробнее, как это на самом деле работает и как безопасно настроить мою схему шифрования.
решение1
Теперь, как я понимаю, я привязываю добавление keyslot к моему заголовку LUKS, который привязан к моему модулю TPM2.0 на банке PCR 15. Теперь это, кажется, работает, но я не понимаю, что происходит, когда я выполняю 'tpm2_pcrread'. Он говорит, что мое pcr 'value' по-прежнему равно 0:
Привязка данных к PCR не должна изменять PCR — она использует TPM для шифрования данных таким образом, который используеттекущийЗначение PCR. Как правило, это означает, что вам следует выбрать PCR, значение которого имеет полезное значение (например, Windows BitLocker использует PCR 7, который сохраняет текущее состояние безопасной загрузки). Использование PCR, состоящего из одних нулей, по-прежнему связывает зашифрованные данные (т. е. слот ключей LUKS) с самим TPM, но не мешает кому-либо загрузить Live CD и просто попросить TPM распечатать данные для них.
Что именно означают эти значения ПЦР? Я не могу найти ответ на этот вопрос в сети.
Каждая ПЦР соответствуетхэш-цепочкапроизводится событиями в журнале событий TPM. Каждый раз, когда регистрируется событие, соответствующий PCR обновляется (или «расширяется», поскольку процесс обновления pcr = hash(pcr + new_event)
очень похож на то, как работают коммиты Git).
Базовые события документируются в спецификациях TCG; tpm2_eventlog
могут показывать, что регистрируется во время текущей загрузки. Например, PCR 4 будет содержать точные хэши каждого исполняемого файла .efi, запущенного во время процесса загрузки. (Практически все PCR по умолчанию так или иначе связаны с процессом загрузки.) Большинство событий регистрируются прошивкой, но некоторые — загрузчиком; ОС могла бы это сделать, но обычно этого не делает.
Другими словами, проверка того, содержит ли PCR ожидаемое значение, — это всего лишь быстрый способ проверить, содержит ли журнал событий ожидаемые события в ожидаемом порядке.
Например, BitLocker запечатывает слот для ключа (или «протектор») с помощью PCR7 или PCR4, чтобы гарантировать, что автоматическая разблокировка возможна только при загрузке фактической установки Windows (т. е. системы, которая будет соблюдать безопасность учетной записи пользователя, а не Live CD).
Разве эти значения не должны измениться после того, как я что-либо сделаю с моим банком ПЦР?
Нет, значения не меняются просто от чтения.
Операция «seal» просит TPM зашифровать предоставленные данные и прикрепить политику «расшифровывать только если PCR 15 соответствует этому значению». Она не изменяет сам PCR. Запечатанные данные возвращаются обратно в ОС (для сохранения в файле или в токене LUKS и т. д.).
Еще одна странность заключается в том, что когда я шифрую простой файл Hello World, следуя этому руководству (https://www.fit-pc.com/wiki/index.php?title=Linux:_Полное_шифрование_диска), я получаю точно такой же зашифрованный вывод «eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI».
Это некоторые данные, закодированные в Base64. Расшифруйте их, и вы увидите, что они содержат фиксированный заголовок:
$ echo eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI | base64 -d
{"alg":"dir","clevis":{"pin":"tpm2","tpm2":{"hash":"sha2