On Fri, Jun 14, 2019 at 02:27:17PM -0400, Joe Conway wrote: > On 6/13/19 11:07 AM, Bruce Momjian wrote: > > On Thu, Jun 13, 2019 at 04:26:47PM +0900, Masahiko Sawada wrote: > >> Yeah, in principle since data key of 2 tier key architecture should > >> not go outside database I think we should not tell data keys to > >> utility commands. So the rearranging WAL format seems to be a better > >> solution but is there any reason why the main data is placed at end of > >> WAL record? I wonder if we can assemble WAL records as following order > >> and encrypt only 3 and 4. > >> > >> 1. Header data (XLogRecord and other headers) > >> 2. Main data (xl_heap_insert, xl_heap_update etc + related data) > >> 3. Block data (Tuple data, FPI) > >> 4. Sub data (e.g tuple data for logical decoding) > > > > Yes, that does sound like a reasonable idea. It is similar to us not > > encrypting the clog --- there is little value. However, if we only > > encrypt the cluster, we don't need to expose the relfilenode and we can > > just encrypt the entire WAL --- I like that simplicity. We might find > > that the complexity of encrypting only certain tablespaces makes the > > system slower than just encrypting the entire cluster. > > > There are reasons other than performance to want more granular than > entire cluster encryption. Limiting the volume of encrypted data with > any one key for example. And not encrypting #1 & 2 above would help > avoid known-plaintext attacks I would think. > > > >> > > Also, for system catalog encryption, it could be a hard part. System > >> > > catalogs are initially created at initdb time and created by copying > >> > > from template1 when CREATE DATABASE. Therefore we would need to either > >> > > modify initdb so that it's aware of encryption keys and KMS or modify > >> > > database creation so that it copies database file while encrypting > >> > > them. > >> > > >> > I assume initdb will use the same API that you would use to start the > >> > server itself, e.g., type in a password, or contact a key server. > >> > >> I realized that in XTS encryption mode since we craft the tweak using > >> relfilenode we will need to have the different tweaks for system > >> catalogs in new database would change. So we might need to re-encrypt > >> system catalogs when CREATE DATABASE after all. I suspect that even > >> the cluster-wide encryption has the same problem. > > > > Yes, this is why I want to just do cluster-wide encryption at this > > stage. > > > > In addition, while the 8k blocks would use a block cipher, the WAL would > > likely use a stream cipher, and it will be very hard to use multiple > > stream ciphers in a single WAL file. > > > I don't understand why we would not just use AES for both.
Uh, AES is an encryption cipher. You can use it with block mode, CBC, or stream mode, CTR, GCM; see: http://momjian.us/main/writings/crypto.pdf#page=7 -- Bruce Momjian <br...@momjian.us> http://momjian.us EnterpriseDB http://enterprisedb.com + As you are, so once was I. As I am, so you will be. + + Ancient Roman grave inscription +