Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kqS92-0001DE-5R for pgsql-hackers@arkaria.postgresql.org; Sat, 19 Dec 2020 02:38:56 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kqS90-0004X6-NG for pgsql-hackers@arkaria.postgresql.org; Sat, 19 Dec 2020 02:38:54 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kqS90-0004Wz-Cq for pgsql-hackers@lists.postgresql.org; Sat, 19 Dec 2020 02:38:54 +0000 Received: from momjian.us ([72.94.173.45]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kqS8w-0000Xv-T2 for pgsql-hackers@postgresql.org; Sat, 19 Dec 2020 02:38:53 +0000 Received: from bruce by momjian.us with local (Exim 4.92) (envelope-from ) id 1kqS8q-00047I-Ky; Fri, 18 Dec 2020 21:38:44 -0500 Date: Fri, 18 Dec 2020 21:38:44 -0500 From: Bruce Momjian To: Stephen Frost Cc: Alastair Turner , Michael Paquier , PostgreSQL-development , Masahiko Sawada Subject: Re: Proposed patch for key managment Message-ID: <20201219023844.GG28841@momjian.us> References: <20201215031902.GB14596@momjian.us> <20201215190909.GK16415@tamriel.snowman.net> <20201216001228.GC14807@momjian.us> <20201216213200.GS16415@tamriel.snowman.net> <20201216224331.GV16415@tamriel.snowman.net> <20201218213624.GG16415@tamriel.snowman.net> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="0ntfKIWw70PvrIHh" Content-Disposition: inline In-Reply-To: <20201218213624.GG16415@tamriel.snowman.net> User-Agent: Mutt/1.10.1 (2018-07-13) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --0ntfKIWw70PvrIHh Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Fri, Dec 18, 2020 at 04:36:24PM -0500, Stephen Frost wrote: > > Starting with the passphrase key wrapper, since it's what's in place now. > > > > - cluster_key_challenge_command = 'password_key_wrapper %q' > > I do tend to like this idea of having what > cluster_key_challenge_command, or whatever we call it, expects is an > actual key and have the command that is run be a separate command that > takes the passphrase and runs the KDF (key derivation function) on it, > when a passphrase is what the user wishes to use. > > That generally makes more sense to me than having the key derivation > effort built into the backend which I have a hard time seeing any > particular reason for, as long we're already calling out to some > external utility of some kind to get the key. I have modified the patch to do as you suggested, and as you explained to me on the phone. :-) Instead of having the server hash the pass phrase provided by the cluster_passphrase_command, have the cluster_passphrase_command generate a sha256 hash if the user-provided input is not already 64 hex bytes. If it is already 64 hex bytes, e.g, via openssl rand -hex 32, no need to have the server hash that again. Double-hashing is less secure. I have modified the attached patch to do that, and the scripts --- all my tests pass. FYI, I moved hex_decode to src/common so that front-end could use it, and removed it from ecpg since ecpg can use the common one now too. > > Sorry, I wasn't trying to hand wave it away. For automated > > interactions, like big iron HSMs or cloud KSMs, the difference between > > 2 operations and 10 operations to start a DB server won't matter. For > > an admin/operator having to type 10 passwords or get 10 clean > > thumbprint scans, it would be horrible. My underlying question was, is > > that toil the only problem to be solved, or is there another reason to > > get into key combination, key splitting and the related issues which > > are less documented and less well understood than key wrapping. > > I appreciate that you're not trying to hand wave it away but this also > didn't really answer the actual question- what's the advantage to having > all of the keys provided by something external rather than having that > external thing provide just one 'main' key, which we then use to decrypt > our enveloped keys that we actually use? I can think of some possible > advantages but I'd really like to know what advantages you're seeing in > doing that. I am not going be as kind. Our workflow is: Desirability -> Design -> Implement -> Test -> Review -> Commit https://wiki.postgresql.org/wiki/Todo#Development_Process I have already asked about the first item, and received a reply talking about the design --- that is not helpful. I only have so much patience for the "I want my secret decoder ring to glow in the dark" type of feature additions to this already complex feature. Unless we stay on Desirability, I will not be replying. If you can't answer the Desirability question, well, talking about items farther right on the list is not very helpful. Now, I will say that your question about how a KMS will use this got me thinking about how to test this, and that got me to implement the AWS Secret Manager script, so that we definitely helpful. My point is that I don't think it is helpful to get into long discussions unless the Desirability is clearly answered. This is not just related to this thread --- this kind of jump-over-Desirability has happened a lot in relation to this feature, so I thought it would be good to clearly state it now. > > > This seems like a crux of at least one concern- that the current patch > > > is deriving the actual KEK from the passphrase and not just taking the > > > provided value (at least, that's what it looks like from a *very* quick > > > look into it), and that's the part that I was suggesting that we might > > > add an option for- to indicate if the cluster passphrase command is > > > actually returning a passphrase which should be used to derive a key, or > > > if it's returning a key directly to be used. That does seem to be a > > > material difference to me and one which we should care about. > > > > Yes. Caring about that is the reason I've been making a nuisance of myself. > > Right, I think we can agree on this aspect and I've chatted with Bruce > about it some also. When a direct key can be provided, we should use > that, and not run it through a KDF. This seems like a particularly > important case that we should care about even at this early stage. Agreed, and done in the attached patch. :-) I am thankful for all the ideas that has helped move this feature forward. -- Bruce Momjian https://momjian.us EnterpriseDB https://enterprisedb.com The usefulness of a cup is in its emptiness, Bruce Lee --0ntfKIWw70PvrIHh Content-Type: application/gzip Content-Disposition: attachment; filename="key.diff.gz" Content-Transfer-Encoding: base64 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 --0ntfKIWw70PvrIHh Content-Type: application/gzip Content-Disposition: attachment; filename="key-alter.diff.gz" Content-Transfer-Encoding: base64 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 --0ntfKIWw70PvrIHh Content-Type: application/x-sh Content-Disposition: attachment; filename="pass_aws.sh" Content-Transfer-Encoding: quoted-printable #!/bin/sh=0A=0A# This uses the AWS Secrets Manager using the AWS CLI and Op= enSSL.=0A=0A[ "$#" -ne 1 ] && echo "cluster_passphrase_command usage: $0 \"= %d\"" 1>&2 && exit 1=0A# No need for %R or -R since we are not prompting=0A= =0ADIR=3D"$1"=0A[ ! -e "$DIR" ] && echo "$DIR does not exist" 1>&2 && exit = 1=0A[ ! -d "$DIR" ] && echo "$DIR is not a directory" 1>&2 && exit 1=0A=0A#= File containing the passphrased encrypted with the PIV_SLOT's public key= =0AAWS_ID_FILE=3D"$DIR/aws-secret.id"=0A=0A=0A# ---------------------------= -------------------------------------------=0A=0A=0A# Create an AWS Secrets= Manager secret?=0Aif [ ! -e "$AWS_ID_FILE" ]=0Athen # The 'postgres' opera= ting system user must have permission to=0A # access the AWS CLI=0A=0A # Th= e epoch-time/directory/hostname combination is unique=0A HASH=3D$(echo -n "= $(date '+%s')$DIR$(hostname)" | sha1sum | cut -d' ' -f1)=0A AWS_SECRET_ID= =3D"Postgres-passphrase-$HASH"=0A=0A # Use stdin to avoid passing the secre= t on the command line=0A openssl rand -hex 32 |=0A aws secretsmanager creat= e-secret \=0A --name "$AWS_SECRET_ID" \=0A --description 'Used for Postgr= es cluster file encryption' \=0A --secret-string 'file:///dev/stdin' \=0A = --output text > /dev/null=0A [ "$?" -ne 0 ] && exit 1=0A=0A echo "$AWS_SEC= RET_ID" > "$AWS_ID_FILE"=0Afi=0A=0Aif ! aws secretsmanager get-secret-value= \=0A --secret-id "$(cat "$AWS_ID_FILE")" \=0A --output text=0Athen exit 1= =0Afi | awk -F'\t' 'NR =3D=3D 1 {print $4}'=0A=0Aexit 0=0A --0ntfKIWw70PvrIHh Content-Type: application/x-sh Content-Disposition: attachment; filename="pass_fd.sh" Content-Transfer-Encoding: quoted-printable #!/bin/sh=0A=0A# This uses a passphrase supplied by the user=0A=0A[ "$#" -n= e 2 ] && echo "cluster_passphrase_command usage: $0 %R \"%P\"" 1>&2 && exit= 1=0A=0AFD=3D"$1"=0A[ ! -t "$FD" ] && echo "file descriptor $FD does not re= fer to a terminal" 1>&2 && exit 1=0A=0AMSG=3D"$2"=0A=0A=0A# ---------------= -------------------------------------------------------=0A=0A=0Astty -echo = <&"$FD"=0A=0Aecho 1>&"$FD"=0Aecho -n "$MSG" 1>&"$FD"=0Aread PASS <&"$FD"=0A= =0Astty echo <&"$FD"=0A=0Aecho -n "$PASS" |=0A sha256sum |=0A cut -d' ' -f1= =0A=0Aexit 0=0A --0ntfKIWw70PvrIHh Content-Type: application/x-sh Content-Disposition: attachment; filename="pass_piv_nopin.sh" Content-Transfer-Encoding: quoted-printable #!/bin/sh=0A=0A# This uses the public/private keys on a PIV device, like a = CAC or Yubikey.=0A# It uses a PIN stored in a file.=0A# It uses OpenSSL wi= th PKCS11 enabled via OpenSC.=0A=0A[ "$#" -ne 1 ] && echo "cluster_passphra= se_command usage: $0 \"%d\"" 1>&2 && exit 1=0A# No need for %R or -R since = we are not prompting for a PIN=0A=0ADIR=3D"$1"=0A[ ! -e "$DIR" ] && echo "$= DIR does not exist" 1>&2 && exit 1=0A[ ! -d "$DIR" ] && echo "$DIR is not a= directory" 1>&2 && exit 1=0A=0A# File that stores the PIN to unlock the PI= V=0A# Set it here or pass in as an environment variable.=0A#PIV_PIN_FILE=3D= ''=0A[ ! "$PIV_PIN_FILE" ] && echo 'PIV_PIN_FILE undefined' 1>&2 && exit 1= =0A[ ! -e "$PIV_PIN_FILE" ] && echo "$PIV_PIN_FILE does not exist" 1>&2 && = exit 1=0A[ -d "$PIV_PIN_FILE" ] && echo "$PIV_PIN_FILE is a directory" 1>&2= && exit 1=0A=0A# PIV slot 3 is the "Key Management" slot=0APIV_SLOT=3D'0:3= '=0A=0A# File containing the passphrased encrypted with the PIV_SLOT's publ= ic key=0AKEY_FILE=3D"$DIR/pivpass.key"=0A=0A=0A# --------------------------= --------------------------------------------=0A=0A=0A# Create a passphrased= encrypted with the PIV_SLOT's public key?=0Aif [ ! -e "$KEY_FILE" ]=0Athen= # The 'postgres' operating system user must have permission to=0A # access= the PIV device.=0A=0A openssl rand -hex 32 |=0A if ! openssl rsautl -engin= e pkcs11 -keyform engine -encrypt \=0A -inkey "$PIV_SLOT" -passin file:"$P= IV_PIN_FILE" -out "$KEY_FILE"=0A then exit 1=0A fi=0A=0A # Warn the user to= save the passphrase in a safe place=0A cat 1>&2 <&2 && exit 1=0A=0ADIR=3D"$1"=0A[ ! -e "$DIR= " ] && echo "$DIR does not exist" 1>&2 && exit 1=0A[ ! -d "$DIR" ] && echo = "$DIR is not a directory" 1>&2 && exit 1=0A=0AFD=3D"$2"=0A[ ! -t "$FD" ] &&= echo "file descriptor $FD does not refer to a terminal" 1>&2 && exit 1=0A= =0A# PIV slot 3 is the "Key Management" slot=0APIV_SLOT=3D'0:3'=0A=0A# File= containing the passphrased encrypted with the PIV_SLOT's public key=0AKEY_= FILE=3D"$DIR/pivpass.key"=0A=0AMSG=3D'Enter PIV PIN:'=0A=0A=0A# -----------= -----------------------------------------------------------=0A=0A=0Astty -e= cho <&"$FD"=0A=0A# Create a passphrased encrypted with the PIV_SLOT's publi= c key?=0Aif [ ! -e "$KEY_FILE" ]=0Athen echo 1>&"$FD"=0A echo -n "$MSG" 1>&= "$FD"=0A=0A # The 'postgres' operating system user must have permission to= =0A # access the PIV device.=0A=0A openssl rand -hex 32 |=0A # 'engine "pkc= s11" set.' message confuses prompting=0A if ! openssl rsautl -engine pkcs11= -keyform engine -encrypt \=0A -inkey "$PIV_SLOT" -passin fd:"$FD" -out "$= KEY_FILE" 2>&1=0A then stty echo <&"$FD"=0A exit 1=0A fi | grep -v 'engine= "pkcs11" set\.'=0A=0A echo 1>&"$FD"=0A=0A # Warn the user to save the pass= phrase in a safe place=0A cat 1>&"$FD" <&"$FD"=0Aecho -n "$MS= G" 1>&"$FD"=0A=0A# Decrypt the passphrased encrypted with the PIV_SLOT's pu= blic key=0Aif ! openssl rsautl -engine pkcs11 -keyform engine -decrypt \=0A= -inkey "$PIV_SLOT" -passin fd:"$FD" -in "$KEY_FILE" 2>&1=0Athen stty echo = <&"$FD"=0A exit 1=0Afi | grep -v 'engine "pkcs11" set\.'=0A=0Aecho 1>&"$FD"= =0A=0Astty echo <&"$FD"=0A=0Aexit 0=0A --0ntfKIWw70PvrIHh--