Re: [Proposal] Table-level Transparent Data Encryption (TDE) and KeyManagement Service (KMS) - Mailing list pgsql-hackers
From | Alvaro Herrera |
---|---|
Subject | Re: [Proposal] Table-level Transparent Data Encryption (TDE) and KeyManagement Service (KMS) |
Date | |
Msg-id | 20190726025708.GA27493@alvherre.pgsql Whole thread Raw |
In response to | Re: [Proposal] Table-level Transparent Data Encryption (TDE) and KeyManagement Service (KMS) (Bruce Momjian <bruce@momjian.us>) |
Responses |
Re: [Proposal] Table-level Transparent Data Encryption (TDE) and KeyManagement Service (KMS)
Re: [Proposal] Table-level Transparent Data Encryption (TDE) and KeyManagement Service (KMS) |
List | pgsql-hackers |
On 2019-Jul-25, Bruce Momjian wrote: > On Thu, Jul 25, 2019 at 03:43:34PM -0400, Alvaro Herrera wrote: > > Why are we encrypting the page header in the first place? It seems to > > me that the encrypted area should cover only the line pointers and the > > tuple data area; the page header needs to be unencrypted so that it can > > be used at all: firstly because you need to obtain the LSN from it in > > Yes, the plan was to not encrypt the first 16 bytes so the LSN was visible. I don't see the value of encrypting the rest of the page header (which includes the page checksum). > > order to compute the IV, and secondly because the checksum must be > > validated *before* decrypting (per Moxie Marlinspike's "cryptographic > > doom" principle mentioned in a comment in the SE question). > > Uh, I think we are still on the fence about writing the checksum _after_ > encryption, I don't see what's the reason for doing that. The "cryptographic doom principle" page talks about this kind of scenario, and ISTM that the ultimate suggestion is that the page checksum ought to be verifyable prior to doing any decryption. Are you worried about an attacker forging the page checksum by installing another encrypted page that gives the same checksum? I'm not sure how that attack works ... I mean why can the attacker install arbitrary pages? > The only way offline tools can verify the CRC without access to the keys > is via #2, but #2 gives us _no_ detection of tampering. I realize the > CRC tampering detection of #1 and #3 is not great, but it certainly has > some value. It seems to me that you're trying to invent a cryptographic signature scheme on your own. That seems very likely to backfire. > > I am not totally clear on whether the special space and the "page hole" > > need to be encrypted. I tend to think that they should *not* be > > encrypted; in particular, encrypting a large area containing zeroes seem > > a plentiful source of known cleartext, which seems a bad thing. Special > > space also seems to contain known cleartext; maybe not as much as the > > page hole, but still seems better avoided. > > Uh, there are no known attacks on AES with known plain-text, e.g., SSL > uses AES, so I think we are good with encrypting everything after the > first 16 bytes. Well, maybe there aren't any attacks *now*, but I don't know what will happen in the future. I'm not clear what's the intended win by encrypting the all-zeroes page hole anyway. If you leave it unencrypted, the attacker knows the size of the hole, as well as the size of the tuple data area and the size of the LP array. Is that a side-channer that leaks much? > > The checksum we currently have is not cryptographically secure -- it's > > not a crypto-strong signature. If we want that, we need some further > > protection. Maybe for encrypted tables we replace our current checksum > > with an cryptographically secure signature ...? Pretty sure 16 bits are > > insufficient for that, but I suppose we would just use a different page > > header with room for a proper sig. > > Yes, checksum is more for best-effort than fully secure, but replay of > pages makes a fully secure solution hard anyway. What do you mean with "replay of pages"? -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
pgsql-hackers by date: