On Fri, Jul 12, 2019 at 7:37 AM Bruce Momjian <br...@momjian.us> wrote: > > On Wed, Jul 10, 2019 at 12:26:24PM -0400, Bruce Momjian wrote: > > On Wed, Jul 10, 2019 at 08:31:17AM -0400, Joe Conway wrote: > > > Please see my other reply (and > > > https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38a.pdf > > > appendix C as pointed out by Ryan downthread). > > > > > > At least in my mind, I trust a published specification from the > > > nation-state level over random blogs or wikipedia. If we can find some > > > equivalent published standards that contradict NIST we should discuss > > > it, but for my money I would prefer to stick with the NIST recommended > > > method to produce the IVs. > > > > So, we have had a flurry of activity on this thread in the past day, so > > let me summarize: > > Seems we have an updated approach: > > First, we need to store the symmetric encryption key in the data > directory, like we do for SSL certificates and private keys. (Crash > recovery needs access to this key, so we can't easily store it in a > database table.) We will pattern it after the GUC > ssl_passphrase_command. We will need to decide on a format for the > symmetric encryption key in the file so we can check that the supplied > passphrase properly unlocks the key. > > Our first implementation will encrypt the entire cluster. We can later > consider encryption per table or tablespace. It is unclear if > encrypting different parts of the system with different keys is useful > or feasible. (This is separate from key rotation.) > > We will use CBC AES128 mode for tables/indexes, and CTR AES128 for WAL. > 8k pages will use the LSN as a nonce, which will be encrypted to > generate the initialization vector (IV). We will not encrypt the first > 16 bytes of each pages so the LSN can be used in this way. The WAL will > use the WAL file segment number as the nonce and the IV will be created > in the same way. > > wal_log_hints will be enabled automatically in encryption mode, like we > do for checksum mode, so we never encrypt different 8k pages with the > same IV.
I guess that different two pages can have the same LSN when a heap update modifies both a page for old tuple and another page for new tuple. heapam.c:3707 recptr = log_heap_update(relation, buffer, newbuf, &oldtup, heaptup, old_key_tuple, all_visible_cleared, all_visible_cleared_new); if (newbuf != buffer) { PageSetLSN(BufferGetPage(newbuf), recptr); } PageSetLSN(BufferGetPage(buffer), recptr); Wouldn't it a problem? Regards, -- Masahiko Sawada NIPPON TELEGRAPH AND TELEPHONE CORPORATION NTT Open Source Software Center