LUKS usando horquilla TPM2.0

LUKS usando horquilla TPM2.0

Hola, estoy intentando cifrar un disco de datos secundario. Quiero que este disco se descifre durante el inicio de mi máquina. Actualmente tengo una configuración RAID, con un volumen LVM encima que ya está cifrado con LUKS.

He ejecutado un comando como este: sudo clevis luks bind -d /dev/RaidVG/LVMVol tpm2 '{"pcr_ids":"15", "pcr_bank":"sha256"}'

Ahora, según tengo entendido, estoy vinculando la adición de una ranura de clave a mi encabezado LUKS que está vinculado a mi módulo TPM2.0 en el banco PCR 15. Eso parece funcionar, pero lo que no entiendo es qué sucede cuando ejecuto 'tpm2_pcrread'. Dice que mi 'valor' de pcr sigue siendo 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:

¿Qué significan exactamente estos valores de PCR? No puedo encontrar una respuesta a esto en línea. ¿No deberían cambiar estos valores después de hacer algo con mi banco de PCR?

Otra cosa curiosa es que cuando cifro un archivo simple de hola mundo siguiendo este tutorial (https://www.fit-pc.com/wiki/index.php?title=Linux:_Full_Disk_Encryption), obtengo exactamente el mismo resultado cifrado "eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI". Ahora, no muestran el resultado completo que obtienen, solo la primera línea. ¿Esto se debe a que tengo algunas claves predeterminadas configuradas? ¿O es algún tipo de encabezado común? Mi módulo TPM está virtualizado, por lo que eso también puede ser un problema.

Espero que alguien pueda explicar un poco más sobre cómo funciona esto realmente y cómo configurar de forma segura mi esquema de cifrado.

Respuesta1

Ahora, según tengo entendido, estoy vinculando la adición de una ranura de clave a mi encabezado LUKS que está vinculado a mi módulo TPM2.0 en el banco PCR 15. Eso parece funcionar, pero lo que no entiendo es qué sucede cuando ejecuto 'tpm2_pcrread'. Dice que mi 'valor' de pcr sigue siendo 0:

Se supone que vincular datos a una PCR no cambia la PCR: utiliza el TPM para cifrar datos de una manera que utiliza elactualValor de PCR. Generalmente, esto significa que debe elegir una PCR cuyo valor tenga un significado útil (por ejemplo, Windows BitLocker usa PCR 7 que mantiene el estado actual de arranque seguro). El uso de una PCR que sea todo ceros aún vincula los datos cifrados (es decir, la ranura de claves LUKS) al propio TPM, pero no impide que nadie inicie un CD en vivo y simplemente le pida al TPM que abra los datos.

¿Qué significan exactamente estos valores de PCR? No puedo encontrar una respuesta a esto en línea.

Cada PCR corresponde a uncadena de hashproducido por eventos en el registro de eventos de TPM. Cada vez que se registra un evento, se actualiza un PCR correspondiente (o se "extiende", ya que el proceso de actualización es pcr = hash(pcr + new_event)muy similar a cómo funcionan las confirmaciones de Git).

Los eventos base están documentados en las especificaciones TCG; tpm2_eventlogpuede mostrar lo que se registra durante el inicio actual. Por ejemplo, PCR 4 contendrá los hashes exactos de cada ejecutable .efi que se lanzó durante el proceso de arranque. (Prácticamente todos los PCR predeterminados están relacionados de alguna manera con el proceso de arranque). La mayoría de los eventos son registrados por el firmware, pero algunos por el gestor de arranque; el sistema operativo podría hacerlo, pero normalmente no lo hace.

En otras palabras, verificar si un PCR contiene un valor esperado es solo un atajo para verificar que el registro de eventos contiene los eventos esperados en el orden esperado.

Por ejemplo, BitLocker sella una ranura de clave (o un "protector") usando PCR7 o PCR4 para garantizar que el desbloqueo automático solo sea posible cuando se inicia la instalación real de Windows (es decir, un sistema que respetará la seguridad de la cuenta del usuario y no un CD en vivo). .

¿No deberían cambiar estos valores después de hacer algo con mi banco de PCR?

No; los valores no cambian simplemente al ser leídos.

La operación "sello" solicita al TPM que cifre los datos proporcionados y que adjunte la política "solo descifre si PCR 15 coincide con este valor". No altera el PCR en sí. Los datos sellados se devuelven al sistema operativo (para almacenarlos en un archivo o en un token LUKS, etc.).

Otra cosa curiosa es que cuando cifro un archivo simple de hola mundo siguiendo este tutorial (https://www.fit-pc.com/wiki/index.php?title=Linux:_Full_Disk_Encryption), obtengo exactamente el mismo resultado cifrado "eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI".

Son algunos datos codificados en Base64. Decodificalo y verás que contiene un encabezado fijo:

$ echo eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI | base64 -d
{"alg":"dir","clevis":{"pin":"tpm2","tpm2":{"hash":"sha2

información relacionada