On Tue, May 14, 2024 at 4:43 PM Jarkko Sakkinen <jarkko@xxxxxxxxxx> wrote: > > On Tue May 14, 2024 at 6:30 PM EEST, Ignat Korchagin wrote: > > On Tue, May 14, 2024 at 4:26 PM Jarkko Sakkinen <jarkko@xxxxxxxxxx> wrote: > > > > > > On Tue May 14, 2024 at 6:21 PM EEST, Jarkko Sakkinen wrote: > > > > On Tue May 14, 2024 at 5:30 PM EEST, Jarkko Sakkinen wrote: > > > > > On Tue May 14, 2024 at 5:00 PM EEST, Jarkko Sakkinen wrote: > > > > > > On Tue May 14, 2024 at 4:11 PM EEST, Ignat Korchagin wrote: > > > > > > > For example, a cheap NAS box with no internal storage (disks connected > > > > > > > externally via USB). We want: > > > > > > > * disks to be encrypted and decryptable only by this NAS box > > > > > > > > > > > > So how this differs from LUKS2 style, which also systemd supports where > > > > > > the encryption key is anchored to PCR's? If I took hard drive out of my > > > > > > Linux box, I could not decrypt it in another machine because of this. > > > > > > > > > > Maybe you could replace the real LUKS2 header with a dummy LUKS2 > > > > > header, which would need to be able the describe "do not use this" and > > > > > e.g. SHA256 of the actual header. And then treat the looked up header as > > > > > the header when the drive is mounted. > > > > > > > > > > LUKS2 would also need to be able to have pre-defined (e.g. kernel > > > > > command-line or bootconfig) small internal storage, which would be > > > > > also encrypted with TPM's PRCs containing an array of LUKS2 header > > > > > and then look up that with SHA256 as the key. > > > > > > > > > > Without knowing LUKS2 implementation to me these do not sound reaching > > > > > the impossible engineer problems so maybe this would be worth of > > > > > investigating... > > > > > > > > Or why you could not just encrypt the whole header with another key > > > > that is only in that device? Then it would appear as random full > > > > length. > > > > > > > > I.e. unsealing > > > > > > > > 1. Decrypt LUKS2 header with TPM2 key > > > > 2. Use the new resulting header as it was in the place of encrypted > > > > stored to the external drive. > > > > 3. Decrypt key from the LUK2S header etc. > > > > > > Maybe something like: > > > > > > 1. Asymmetric for LUKS2 (just like it is) > > > 2. Additional symmetric key, which is created as non-migratable and stored > > > to the TPM2 chip. This deciphers the header, i.e. takes the random > > > away. > > > > This could work, but you still have the problem of - if the header > > gets wiped, all the data is lost. > > As for storing things on the TPM chip - that doesn't scale. Today you > > only think about disk encryption, tomorrow there is a new application, > > which wants to do the same thing and so on. One of the features of > > derived keys - you don't store anything, just recreate/derive when > > needed and it scales infinitely. > > OK, so now I know the problem at least and that is probably the > most important thing in this discussion, right? Yes, I think so. > So make a better story, now you also probably have better idea, > also split the patch properly by subsystem, send the patch set, I'm actually not super clear on this part - I have two patches: one for TPM header definitions and another one for the keyring subsystem? Any other subsystems in play here? > and I'll promise to revisit. Thanks. Would probably take some time as I want to think more on the open questions I raised in the description, try to address some comments from James B from other replies (key rotation for example) and rebase on recently merged TPM encrypted sessions. But since this is an RFC I would like to continue the discussion and gather opinions from folks here, if there are any more concerns. > Fair enough? :-) > > BR, Jarkko