[tpm2] System design question

Felix Rubio Dalmau <felix at kngnt.org> Sun, 21 Aug 2022 09:17:56 +0200
Newsgroups dev.linux.lists.tpm2
Message-ID <22755930.6Emhk5qWAg@polaris>
Hi everybody,

I am playing with a QEMU VM that uses swtpm. My goal is to make a stable, easily maintainable setup to have ZFS native full disk encription, and I am facing a problem:

* I was relying on GRUB2 signature-checking capabilities to make sure that, besides the kernel (that is checked by Secure Boot anyway), initramfs had not been tampered with. However, this introduces yet a new (GPG) private key that needs to be stored, initramfs needs to be signed when changed, etc.
* Recently I have learned that from kernel 5.10 on, the measurements of initramfs can be found on PCR9, so I modified my PCR-based policy to make use of registers 0,1,7 and 9 and I am planning to remove the GRUB2 checks. But the problem now is: After generating the policies, which I do by....

```bash
# Recreate the PCR-based policy
tpm2_startauthsession -S session.ctx
tpm2_policypcr -S session.ctx -L regular.policy -l sha256:0,1,7,9
tpm2_policypassword -S session.ctx -L regular.policy
tpm2_flushcontext session.ctx

# session for auth based on rescue password
tpm2_startauthsession -S session.ctx
tpm2_policysecret -S session.ctx -L rescue.policy -c o '<tpm_ownerpass>'
tpm2_flushcontext session.ctx

# compound both policies using OR
tpm2_startauthsession -S session.ctx
tpm2_policyor -S session.ctx -L compound.policy sha256:rescue.policy,regular.policy
tpm2_flushcontext session.ctx

# create the seal object (the FS password is requested to the user)
tpm2_create -C prim.ctx -c key.ctx -u key.pub -r key.priv -L compound.policy -i- -p '<disk_unlock_password>' -a 'fixedtpm|fixedparent'

# persist the object to the TPM
tpm2_evictcontrol -c key.ctx 0x81010001 -P '<tpm_ownerpass>'
```

... then I need to store regular.policy and rescue.policy in initramfs, which will produce a different hash next time.

Therefore, the question is: is there any way I can store the policies in the TPM itself, so that I do not have to rebuild initramfs? Do you guys think this is not the way to go, and there is a better approach?

Thank you very much!
Felix