On Tue, Jul 30, 2019 at 5:03 AM Sehrope Sarkuni <sehr...@jackdb.com> wrote:
>
> On Mon, Jul 29, 2019 at 9:44 AM Bruce Momjian <br...@momjian.us> wrote:
>>
>> > Checking that all buffers using a single LSN are from the same
>> > relation would be a good idea but I think it's hard to test it and
>> > regard the test result as okay. Even if we passed 'make checkworld',
>> > it might still be possible to happen. And even assertion failures
>>
>> Yes, the problem is that if you embed the relfilenode or tablespace or
>> database in the encryption IV, you then need to then make sure you
>> re-encrypt any files that move between these.  I am hesitant to do that
>> since it then requires these workarounds for encryption going forward.
>> We know that most people will not be using encryption, so that will not
>> be well tested either.  For pg_upgrade, I used a minimal-impact
>> approach, and it has allowed dramatic changes in our code without
>> requiring changes and retesting of pg_upgrade.
>
>
> Will there be a per-relation salt stored in a separate file? I saw it 
> mentioned in a few places (most recently 
> https://www.postgresql.org/message-id/aa386c3f-fb89-60af-c7a3-9263a633ca1a%40postgresql.org)
>  but there's also discussion of trying to make the TDEK unique without a 
> separate salt so I'm unsure.
>
> With a per-relation salt there is no need to include fixed attributes 
> (database, relfilenode, or tablespace) to ensure the derived key is unique 
> per relation. A long salt (32-bytes from /dev/urandom) alone guarantees that 
> uniqueness. Copying or moving files would then be possible by also copying 
> the salt. It does not need to be a salt per file on disk either, one salt can 
> be used for many files for the same relation by including the fork number, 
> type, or segment in the TDEK derivation (so each file on disk for that 
> relation ends up with a unique TDEK).

If we can derive unique TDEK using (database, tablespace, relfilenode)
as info I think it's better to use it rather than using random salt
per relations since it doesn't require additional information we need
to store. As described in HKDF RFC[1], if the input key is already
present as a cryptographically strong key we can skip the extract part
where use a salt.

[1] https://tools.ietf.org/html/rfc5869

Regards,

--
Masahiko Sawada
NIPPON TELEGRAPH AND TELEPHONE CORPORATION
NTT Open Source Software Center


Reply via email to