Re: Proposed patch for key management - Mailing list pgsql-hackers
From | Alastair Turner |
---|---|
Subject | Re: Proposed patch for key management |
Date | |
Msg-id | CAC0GmyyNW+ik3LE-TSS6Jc78y2ENMbtR7P4G+kw99C-RXVSiAA@mail.gmail.com Whole thread Raw |
In response to | Re: Proposed patch for key management (Stephen Frost <sfrost@snowman.net>) |
Responses |
Re: Proposed patch for key management
|
List | pgsql-hackers |
Hi Stephen, Bruce, Fabien On Thu, 31 Dec 2020 at 17:05, Stephen Frost <sfrost@snowman.net> wrote: > > Greetings, > > * Bruce Momjian (bruce@momjian.us) wrote: > > On Thu, Dec 31, 2020 at 11:11:11AM +0100, Fabien COELHO wrote: > > > > I am not sure what else I can add to this discussion. Having something > > > > that is completely external might be a nice option, but I don't think it > > > > is the common use-case, and will make the most common use cases more > > > > complex. > > > > > > I'm unsure about what is the "common use case". ISTM that having the > > > postgres process holding the master key looks like a "no" for me in any use > > > case with actual security concern: as the database must be remotely > > > accessible, a reasonable security assumption is that a pg account could be > > > compromised, and the "master key" (if any, that is just one particular > > > cryptographic design) should not be accessible in that case. The first > > > barrier would be pg admin account. > > > > Let's unpack this logic, since I know others, like Alastair Turner (CC > > added), had similar concerns. Frankly, I feel this feature has limited > > security usefulness, so if we don't feel it has sufficient value, let's > > mark it as not wanted and move on. > > Considering the amount of requests for this, I don't feel it's at all > reasonable to suggest that it's 'not wanted'. > FWIW, I think that cluster file encryption has great value, even if we only consider its incremental value on top of disk or volume encryption. Particularly in big IT estates where monitoring tools, backup managers, etc have read access to a lot of mounted volumes. Limiting the impact of these systems (or their credentials) being compromised is definitely useful. > > > I think there are two basic key configurations: > > > > 1. pass data encryption keys in from an external source > > 2. store the data encryption keys wrapped by a key encryption key (KEK) > > passed in from an external source > > I agree those are two basic configurations (though they aren't the only > possible ones). > If we rephrase these two in terms of what the server process does to get a key, we could say 1. Get the keys from another process at startup (and maybe reload) time 2. Get the wrapped keys from a local file... 2.a. directly and unwrap them using the server's own logic and user prompt 2.b. via a library which manages wrapping and user prompting With the general feeling in the mailing list discussions favouring an approach in the #2 family, I have been looking at options around 2b. I was hoping to provide some flexibility for users without adding complexity to the pg code base and use some long standing, standardised, features rather than reinventing or recoding the wheel. It has not been a complete success, or failure. The nearest thing to a standard for wrapped secret store files is PKCS#12. I searched and cannot find it discussed on-list in this context before. It is the format used for Java local keystores in recent versions. The format is supported, up to a point, by OpenSSL, nss and gnuTLS. OpenSSL also has command line support for many operations on the files, including updating the wrapping password. Content in the PKCS12 files is stored in typed "bags". The challenge is that the OpenSSL command line tools currently support only the content types related to TLS operations - certificates, public or private keys, CRLs, ... and not the untyped secret bag which is appropriate for storing AES keys. The c APIs will work with this content but there are not as many helper functions as for other content types. For future information - the nss command line tools understand the secret bags, but don't offer nearly so many options for configuration. For building something now - the OpenSSL pkcs12 functions provide features like tags and friendly names for keys, and configurable key derivation from passwords, but the code to interact with the secretBags is accumulating quickly in my prototype. After the long intro, my question - If using a standard format, managed by a library, for the internal keystore does not result in a smaller or simpler patch, is there enough other value for this to be worth considering? For security features, standards and building on well exercised code bases do really have value, but is it enough... Regards Alastair
pgsql-hackers by date: