On Tue, Dec 31, 2019 at 1:05 PM Masahiko Sawada <sawada.m...@gmail.com> wrote:
> On Sun, Dec 1, 2019 at 12:03 PM Michael Paquier <mich...@paquier.xyz> > wrote: > > > > On Fri, Nov 01, 2019 at 09:38:37AM +0900, Moon, Insung wrote: > > > Of course, I may not have written the excellent quality code > > > correctly, so I will make an interim report if possible. > > > > The last patch has rotten, and does not apply anymore. A rebase would > > be nice, so I am switching the patch as waiting on author, and moved > > it to next CF. > > > > We have discussed in off-list and weekly voice meeting for several > months that the purpose of this feature and the target for PG13 and we > concluded to step back and to focus on only internal key management > system for PG13. Transparent data encryption support is now the target > for PG14 or later. Key management system is an important > infrastructure for TDE but it can work independent of TDE. The plan > for PG13 we discussed is to introduce the internal key management > system that has one encryption key for whole database cluster and make > it have some interface to get encryption keys that are managed inside > PostgreSQL database in order to integrate it with other components > such as pgcrypto. > > Idea is to get something encrypted and decrypted without ever knowing > the actual key that was used to encrypt it. The attached patch has two > APIs to wrap and unwrap the secret by the encryption key stored inside > database cluster. user generate a secret key locally and send it to > PostgreSQL server to wrap it using by pg_kmgr_wrap() and save it > somewhere. Then user can use the saved and wrapped secret key to > encrypt and decrypt user data by something like: > > INSERT INTO tbl VALUES (pg_encrypt('user data', pg_kmgr_unwrap('xxxxx')); > > Where 'xxxxx' is the result of pg_kmgr_wrap function. > > I've attached the KMS patch. It requires openssl library. What the > patch does is simple and is not changed much from the previous version > patch that includes KMS and TDE; we generate one encryption key called > master key for whole database cluster at initdb time, which is stored > in pg_control and wrapped by key encryption key(KEK) derived from > user-provided passphrase. When postmaster starts up it verifies the > correctness of passphrase provided by user using hmac key which is > also derived from user-provided passphrase. The server won't start if > the passphrase is incorrect. Once the passphrase is verified the > master key is loaded to the shared buffer and is active. > > I added two options to initdb: --cluster-passphrase-command and -e > that takes a passphrase command and a cipher algorithm (currently only > aes-128 and aes-256) respectively. The internal KMS is enabled by > executing initdb with those options as follows: > > $ initdb -D data --cluster-passphrase-command="echo 'password'" -e aes-256 > > I believe the internal KMS would be useful several use cases but I'd > like to have discussion around the integration with pgcrypto because > pgcrypto would be the first user of the KMS and pgcrypto can be more > powerful with the KMS. I'll register this KMS patch to the next Commit > Fest. > > It is already there "KMS - Internal key management system" ( https://commitfest.postgresql.org/26/2196/). I really appreciate peoples (CC-ing) who participated in off-list > discussion/meeting for many inputs, suggestions and reviewing codes. > > Regards, > > > -- > Masahiko Sawada http://www.2ndQuadrant.com/ > PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services > -- Ibrar Ahmed