Re: [HACKERS] Changing references of password encryption to hashing

From: Bruce Momjian <bruce(at)momjian(dot)us>
To: Michael Paquier <michael(dot)paquier(at)gmail(dot)com>
Cc: PostgreSQL mailing lists <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: [HACKERS] Changing references of password encryption to hashing
Date: 2023-11-22 03:43:48
Message-ID: ZV149Fd2JG_OF7CM@momjian.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers


Is there any interest in fixing our documentation that says encrypted
when it means hashed? Should I pursue this?

---------------------------------------------------------------------------

On Fri, Mar 10, 2017 at 11:16:02AM +0900, Michael Paquier wrote:
> Hi all,
>
> As discussed here:
> https://www.postgresql.org/message-id/98cafcd0-5557-0bdf-4837-0f2b7782d0b5@joeconway.com
> We are using in documentation and code comments "encryption" to define
> what actually is hashing, which is confusing.
>
> Attached is a patch for HEAD to change the documentation to match hashing.
>
> There are a couple of things I noticed on the way:
> 1) There is the user-visible PQencryptPassword in libpq, which
> actually hashes the password, and not encrypts it :)
> 2) There is as well pg_md5_encrypt() in the code, as well as there is
> pg_md5_hash(). Those may be better if renamed, at least I would think
> that pg_md5_encrypt should be pg_md5_password_hash, because a salt is
> used as well, and the routine is dedicated to work on passwords.
> Thoughts?
> 3) createuser also has --encrypt and --unencrypted, perhaps those
> should be renamed? Honestly I don't really think that this is worth a
> breakage and the option names match with the SQL commands.
>
> I did not bother about those things in the attached, which works only
> documentation and comment changes.
>
> An open item has been added on the wiki.
>
> Thanks,
> --
> Michael

> diff --git a/contrib/pgcrypto/crypt-des.c b/contrib/pgcrypto/crypt-des.c
> index a4aa4966bf..1f65f286ea 100644
> --- a/contrib/pgcrypto/crypt-des.c
> +++ b/contrib/pgcrypto/crypt-des.c
> @@ -753,7 +753,7 @@ px_crypt_des(const char *key, const char *setting)
> output[0] = setting[0];
>
> /*
> - * If the encrypted password that the salt was extracted from is only
> + * If the hashed password that the salt was extracted from is only
> * 1 character long, the salt will be corrupted. We need to ensure
> * that the output string doesn't have an extra NUL in it!
> */
> diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml
> index 28cdabe6fe..abbd5dd19e 100644
> --- a/doc/src/sgml/catalogs.sgml
> +++ b/doc/src/sgml/catalogs.sgml
> @@ -1334,8 +1334,8 @@
> <entry><structfield>rolpassword</structfield></entry>
> <entry><type>text</type></entry>
> <entry>
> - Password (possibly encrypted); null if none. The format depends
> - on the form of encryption used.
> + Password (possibly hashed); null if none. The format depends
> + on the form of hashing used.
> </entry>
> </row>
>
> @@ -1350,19 +1350,20 @@
> </table>
>
> <para>
> - For an MD5 encrypted password, <structfield>rolpassword</structfield>
> + For an MD5-hashed password, <structfield>rolpassword</structfield>
> column will begin with the string <literal>md5</> followed by a
> 32-character hexadecimal MD5 hash. The MD5 hash will be of the user's
> password concatenated to their user name. For example, if user
> <literal>joe</> has password <literal>xyzzy</>, <productname>PostgreSQL</>
> will store the md5 hash of <literal>xyzzyjoe</>. If the password is
> - encrypted with SCRAM-SHA-256, it consists of 5 fields separated by colons.
> + hashed with SCRAM-SHA-256, it consists of 5 fields separated by colons.
> The first field is the constant <literal>scram-sha-256</literal>, to
> identify the password as a SCRAM-SHA-256 verifier. The second field is a
> salt, Base64-encoded, and the third field is the number of iterations used
> to generate the password. The fourth field and fifth field are the stored
> key and server key, respectively, in hexadecimal format. A password that
> - does not follow either of those formats is assumed to be unencrypted.
> + does not follow either of those formats is assumed to be in plain format,
> + non-hashed.
> </para>
> </sect1>
>
> @@ -10269,9 +10270,9 @@ SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx
> <entry><structfield>passwd</structfield></entry>
> <entry><type>text</type></entry>
> <entry></entry>
> - <entry>Password (possibly encrypted); null if none. See
> + <entry>Password (possibly hashed); null if none. See
> <link linkend="catalog-pg-authid"><structname>pg_authid</structname></link>
> - for details of how encrypted passwords are stored.</entry>
> + for details of how hashed passwords are stored.</entry>
> </row>
>
> <row>
> diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
> index 69844e5b29..994ed6c1bd 100644
> --- a/doc/src/sgml/config.sgml
> +++ b/doc/src/sgml/config.sgml
> @@ -1190,11 +1190,11 @@ include_dir 'conf.d'
> When a password is specified in <xref linkend="sql-createuser"> or
> <xref linkend="sql-alterrole"> without writing either <literal>ENCRYPTED</>
> or <literal>UNENCRYPTED</>, this parameter determines whether the
> - password is to be encrypted. The default value is <literal>md5</>, which
> + password is to be hashed. The default value is <literal>md5</>, which
> stores the password as an MD5 hash. Setting this to <literal>plain</> stores
> it in plaintext. <literal>on</> and <literal>off</> are also accepted, as
> aliases for <literal>md5</> and <literal>plain</>, respectively. Setting
> - this parameter to <literal>scram</> will encrypt the password with
> + this parameter to <literal>scram</> will hash the password with
> SCRAM-SHA-256.
> </para>
> </listitem>
> diff --git a/doc/src/sgml/passwordcheck.sgml b/doc/src/sgml/passwordcheck.sgml
> index 6e6e4ef435..8cf59946eb 100644
> --- a/doc/src/sgml/passwordcheck.sgml
> +++ b/doc/src/sgml/passwordcheck.sgml
> @@ -37,11 +37,11 @@
>
> <caution>
> <para>
> - To prevent unencrypted passwords from being sent across the network,
> + To prevent non-hashed passwords from being sent across the network,
> written to the server log or otherwise stolen by a database administrator,
> <productname>PostgreSQL</productname> allows the user to supply
> - pre-encrypted passwords. Many client programs make use of this
> - functionality and encrypt the password before sending it to the server.
> + pre-hashed passwords. Many client programs make use of this
> + functionality and hash the password before sending it to the server.
> </para>
> <para>
> This limits the usefulness of the <filename>passwordcheck</filename>
> @@ -54,7 +54,7 @@
> </para>
> <para>
> Alternatively, you could modify <filename>passwordcheck</filename>
> - to reject pre-encrypted passwords, but forcing users to set their
> + to reject pre-hashed passwords, but forcing users to set their
> passwords in clear text carries its own security risks.
> </para>
> </caution>
> diff --git a/doc/src/sgml/pgcrypto.sgml b/doc/src/sgml/pgcrypto.sgml
> index bf514aacf3..c4ce02c9dd 100644
> --- a/doc/src/sgml/pgcrypto.sgml
> +++ b/doc/src/sgml/pgcrypto.sgml
> @@ -109,7 +109,7 @@ hmac(data bytea, key text, type text) returns bytea
> <listitem>
> <para>
> They use a random value, called the <firstterm>salt</>, so that users
> - having the same password will have different encrypted passwords.
> + having the same password will have different hashed passwords.
> This is also an additional defense against reversing the algorithm.
> </para>
> </listitem>
> diff --git a/doc/src/sgml/protocol.sgml b/doc/src/sgml/protocol.sgml
> index 3d6e8eed43..52afe25090 100644
> --- a/doc/src/sgml/protocol.sgml
> +++ b/doc/src/sgml/protocol.sgml
> @@ -294,7 +294,7 @@
> <listitem>
> <para>
> The frontend must now send a PasswordMessage containing the
> - password (with user name) encrypted via MD5, then encrypted
> + password (with user name) hashed via MD5, then hashed
> again using the 4-byte random salt specified in the
> AuthenticationMD5Password message. If this is the correct
> password, the server responds with an AuthenticationOk,
> @@ -2603,7 +2603,7 @@ AuthenticationMD5Password (B)
> </term>
> <listitem>
> <para>
> - Specifies that an MD5-encrypted password is required.
> + Specifies that an MD5-hashed password is required.
> </para>
> </listitem>
> </varlistentry>
> @@ -2613,7 +2613,7 @@ AuthenticationMD5Password (B)
> </term>
> <listitem>
> <para>
> - The salt to use when encrypting the password.
> + The salt to use when hashing the password.
> </para>
> </listitem>
> </varlistentry>
> @@ -4704,7 +4704,7 @@ PasswordMessage (F)
> </term>
> <listitem>
> <para>
> - The password (encrypted, if requested).
> + The password (hashed, if requested).
> </para>
> </listitem>
> </varlistentry>
> diff --git a/doc/src/sgml/ref/alter_role.sgml b/doc/src/sgml/ref/alter_role.sgml
> index da36ad9696..e242876967 100644
> --- a/doc/src/sgml/ref/alter_role.sgml
> +++ b/doc/src/sgml/ref/alter_role.sgml
> @@ -81,9 +81,9 @@ ALTER ROLE { <replaceable class="PARAMETER">role_specification</replaceable> | A
> roles.
> The current session user cannot be renamed.
> (Connect as a different user if you need to do that.)
> - Because <literal>MD5</>-encrypted passwords use the role name as
> + Because <literal>MD5</>-hashed passwords use the role name as
> cryptographic salt, renaming a role clears its password if the
> - password is <literal>MD5</>-encrypted.
> + password is <literal>MD5</>-hashed.
> </para>
>
> <para>
> @@ -250,7 +250,7 @@ ALTER ROLE { <replaceable class="PARAMETER">role_specification</replaceable> | A
> </para>
>
> <para>
> - Caution must be exercised when specifying an unencrypted password
> + Caution must be exercised when specifying a non-hashed password
> with this command. The password will be transmitted to the server
> in cleartext, and it might also be logged in the client's command
> history or the server log. <xref linkend="app-psql">
> diff --git a/doc/src/sgml/ref/create_role.sgml b/doc/src/sgml/ref/create_role.sgml
> index 99d1c8336c..083fde6722 100644
> --- a/doc/src/sgml/ref/create_role.sgml
> +++ b/doc/src/sgml/ref/create_role.sgml
> @@ -228,14 +228,14 @@ CREATE ROLE <replaceable class="PARAMETER">name</replaceable> [ [ WITH ] <replac
> <listitem>
> <para>
> These key words control whether the password is stored
> - encrypted in the system catalogs. (If neither is specified,
> + hashed in the system catalogs. (If neither is specified,
> the default behavior is determined by the configuration
> parameter <xref linkend="guc-password-encryption">.) If the
> - presented password string is already in MD5-encrypted or
> - SCRAM-encrypted format, then it is stored encrypted as-is,
> + presented password string is already in MD5-hashed or
> + SCRAM-hashed format, then it is stored hased as-is,
> regardless of whether <literal>ENCRYPTED</> or <literal>UNENCRYPTED</>
> - is specified (since the system cannot decrypt the specified encrypted
> - password string). This allows reloading of encrypted passwords
> + is specified (since the system cannot understand the specified hashed
> + password string). This allows reloading of hashed passwords
> during dump/restore.
> </para>
>
> @@ -396,12 +396,12 @@ CREATE ROLE <replaceable class="PARAMETER">name</replaceable> [ [ WITH ] <replac
> </para>
>
> <para>
> - Caution must be exercised when specifying an unencrypted password
> + Caution must be exercised when specifying a non-hashed password
> with this command. The password will be transmitted to the server
> in cleartext, and it might also be logged in the client's command
> history or the server log. The command <xref
> linkend="APP-CREATEUSER">, however, transmits
> - the password encrypted. Also, <xref linkend="app-psql">
> + the password hash. Also, <xref linkend="app-psql">
> contains a command
> <command>\password</command> that can be used to safely change the
> password later.
> diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
> index 2a9c412020..0860b483a7 100644
> --- a/doc/src/sgml/ref/psql-ref.sgml
> +++ b/doc/src/sgml/ref/psql-ref.sgml
> @@ -2207,7 +2207,7 @@ lo_import 152801
> <listitem>
> <para>
> Changes the password of the specified user (by default, the current
> - user). This command prompts for the new password, encrypts it, and
> + user). This command prompts for the new password, hashes it, and
> sends it to the server as an <command>ALTER ROLE</> command. This
> makes sure that the new password does not appear in cleartext in the
> command history, the server log, or elsewhere.
> diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml
> index 5e3d783c6a..5f6b30f8df 100644
> --- a/doc/src/sgml/runtime.sgml
> +++ b/doc/src/sgml/runtime.sgml
> @@ -2024,15 +2024,15 @@ pg_dumpall -p 5432 | psql -d postgres -p 5433
> <variablelist>
>
> <varlistentry>
> - <term>Password Storage Encryption</term>
> + <term>Password Storage Hashing</term>
> <listitem>
>
> <para>
> By default, database user passwords are stored as MD5 hashes, so
> the administrator cannot determine the actual password assigned
> - to the user. If MD5 encryption is used for client authentication,
> - the unencrypted password is never even temporarily present on the
> - server because the client MD5-encrypts it before being sent
> + to the user. If MD5 hashing is used for client authentication,
> + the non-hashed password is never even temporarily present on the
> + server because the client MD5-hashes it before being sent
> across the network.
> </para>
> </listitem>
> @@ -2088,18 +2088,18 @@ pg_dumpall -p 5432 | psql -d postgres -p 5433
> </varlistentry>
>
> <varlistentry>
> - <term>Encrypting Passwords Across A Network</term>
> + <term>Hashing Passwords Across A Network</term>
>
> <listitem>
> <para>
> - The <literal>MD5</> authentication method double-encrypts the
> + The <literal>MD5</> authentication method double-hashes the
> password on the client before sending it to the server. It first
> - MD5-encrypts it based on the user name, and then encrypts it
> + MD5-hashes it based on the user name, and then hashes it
> based on a random salt sent by the server when the database
> - connection was made. It is this double-encrypted value that is
> - sent over the network to the server. Double-encryption not only
> + connection was made. It is this double-hashed value that is
> + sent over the network to the server. Double-hash not only
> prevents the password from being discovered, it also prevents
> - another connection from using the same encrypted password to
> + another connection from using the same hashed password to
> connect to the database server at a later time.
> </para>
> </listitem>
> diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c
> index 14b9779144..e4ad531fa6 100644
> --- a/src/backend/commands/user.c
> +++ b/src/backend/commands/user.c
> @@ -397,7 +397,7 @@ CreateRole(ParseState *pstate, CreateRoleStmt *stmt)
>
> if (password)
> {
> - /* Encrypt the password to the requested format. */
> + /* Hash the password to the requested format. */
> char *shadow_pass;
>
> shadow_pass = encrypt_password(password_type, stmt->role, password);
> @@ -806,7 +806,7 @@ AlterRole(AlterRoleStmt *stmt)
> /* password */
> if (password)
> {
> - /* Encrypt the password to the requested format. */
> + /* Hash the password to the requested format. */
> char *shadow_pass;
>
> shadow_pass = encrypt_password(password_type, rolename, password);
> diff --git a/src/backend/libpq/auth-scram.c b/src/backend/libpq/auth-scram.c
> index 9f78e57aae..8e7344d95a 100644
> --- a/src/backend/libpq/auth-scram.c
> +++ b/src/backend/libpq/auth-scram.c
> @@ -147,7 +147,7 @@ pg_be_scram_init(const char *username, const char *shadow_pass, bool doomed)
> /*
> * Perform sanity checks on the provided password after catalog lookup.
> * The authentication is bound to fail if the lookup itself failed or if
> - * the password stored is MD5-encrypted. Authentication is possible for
> + * the password stored is MD5-hashed. Authentication is possible for
> * users with a valid plain password though.
> */
>
> diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c
> index ebf10bbbae..61217f0fa4 100644
> --- a/src/backend/libpq/auth.c
> +++ b/src/backend/libpq/auth.c
> @@ -2723,7 +2723,7 @@ CheckRADIUSAuth(Port *port)
> if (!pg_md5_binary(cryptvector, strlen(port->hba->radiussecret) + RADIUS_VECTOR_LENGTH, encryptedpassword + i))
> {
> ereport(LOG,
> - (errmsg("could not perform MD5 encryption of password")));
> + (errmsg("could not perform MD5 hash of password")));
> pfree(cryptvector);
> return STATUS_ERROR;
> }
> @@ -2924,7 +2924,7 @@ CheckRADIUSAuth(Port *port)
> encryptedpassword))
> {
> ereport(LOG,
> - (errmsg("could not perform MD5 encryption of received packet")));
> + (errmsg("could not perform MD5 hash of received packet")));
> pfree(cryptvector);
> continue;
> }
> diff --git a/src/backend/libpq/crypt.c b/src/backend/libpq/crypt.c
> index bd3e936d38..2cc3344f6e 100644
> --- a/src/backend/libpq/crypt.c
> +++ b/src/backend/libpq/crypt.c
> @@ -1,7 +1,7 @@
> /*-------------------------------------------------------------------------
> *
> * crypt.c
> - * Functions for dealing with encrypted passwords stored in
> + * Functions for dealing with hashed passwords stored in
> * pg_authid.rolpassword.
> *
> * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
> @@ -150,7 +150,7 @@ encrypt_password(PasswordType target_type, const char *role,
>
> if (!pg_md5_encrypt(password, role, strlen(role),
> encrypted_password))
> - elog(ERROR, "password encryption failed");
> + elog(ERROR, "password hashing failed");
> return encrypted_password;
>
> case PASSWORD_TYPE_SCRAM:
> @@ -184,7 +184,7 @@ encrypt_password(PasswordType target_type, const char *role,
> * This shouldn't happen, because the above switch statements should
> * handle every combination of source and target password types.
> */
> - elog(ERROR, "cannot encrypt password to requested type");
> + elog(ERROR, "cannot hash password to requested type");
> return NULL; /* keep compiler quiet */
> }
>
> @@ -221,7 +221,7 @@ md5_crypt_verify(const char *role, const char *shadow_pass,
> switch (get_password_type(shadow_pass))
> {
> case PASSWORD_TYPE_MD5:
> - /* stored password already encrypted, only do salt */
> + /* stored password already hashed, only do salt */
> if (!pg_md5_encrypt(shadow_pass + strlen("md5"),
> md5_salt, md5_salt_len,
> crypt_pwd))
> @@ -231,7 +231,7 @@ md5_crypt_verify(const char *role, const char *shadow_pass,
> break;
>
> case PASSWORD_TYPE_PLAINTEXT:
> - /* stored password is plain, double-encrypt */
> + /* stored password is plain, double-hash */
> if (!pg_md5_encrypt(shadow_pass,
> role,
> strlen(role),
> diff --git a/src/backend/libpq/pg_hba.conf.sample b/src/backend/libpq/pg_hba.conf.sample
> index 6b1778a721..6b4ab71cb6 100644
> --- a/src/backend/libpq/pg_hba.conf.sample
> +++ b/src/backend/libpq/pg_hba.conf.sample
> @@ -45,7 +45,7 @@
> # METHOD can be "trust", "reject", "md5", "password", "scram", "gss",
> # "sspi", "ident", "peer", "pam", "ldap", "radius" or "cert". Note that
> # "password" sends passwords in clear text; "md5" or "scram" are preferred
> -# since they send encrypted passwords.
> +# since they send hashed passwords.
> #
> # OPTIONS are a set of options for the authentication in the format
> # NAME=VALUE. The available options depend on the different
> diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
> index 07efc27a69..0dbe7017a8 100644
> --- a/src/bin/psql/command.c
> +++ b/src/bin/psql/command.c
> @@ -1138,7 +1138,7 @@ exec_command(const char *cmd,
>
> if (!encrypted_password)
> {
> - psql_error("Password encryption failed.\n");
> + psql_error("Password hashing failed.\n");
> success = false;
> }
> else
> diff --git a/src/bin/scripts/createuser.c b/src/bin/scripts/createuser.c
> index 3d74797a8f..b398f6a1e1 100644
> --- a/src/bin/scripts/createuser.c
> +++ b/src/bin/scripts/createuser.c
> @@ -278,7 +278,7 @@ main(int argc, char *argv[])
> newuser);
> if (!encrypted_password)
> {
> - fprintf(stderr, _("Password encryption failed.\n"));
> + fprintf(stderr, _("Password hashing failed.\n"));
> exit(1);
> }
> appendStringLiteralConn(&sql, encrypted_password, conn);
> @@ -358,14 +358,14 @@ help(const char *progname)
> printf(_(" -d, --createdb role can create new databases\n"));
> printf(_(" -D, --no-createdb role cannot create databases (default)\n"));
> printf(_(" -e, --echo show the commands being sent to the server\n"));
> - printf(_(" -E, --encrypted encrypt stored password\n"));
> + printf(_(" -E, --encrypted hash stored password\n"));
> printf(_(" -g, --role=ROLE new role will be a member of this role\n"));
> printf(_(" -i, --inherit role inherits privileges of roles it is a\n"
> " member of (default)\n"));
> printf(_(" -I, --no-inherit role does not inherit privileges\n"));
> printf(_(" -l, --login role can login (default)\n"));
> printf(_(" -L, --no-login role cannot login\n"));
> - printf(_(" -N, --unencrypted do not encrypt stored password\n"));
> + printf(_(" -N, --unencrypted do not hash stored password\n"));
> printf(_(" -P, --pwprompt assign a password to new role\n"));
> printf(_(" -r, --createrole role can create new roles\n"));
> printf(_(" -R, --no-createrole role cannot create roles (default)\n"));
> diff --git a/src/common/scram-common.c b/src/common/scram-common.c
> index e44f38f652..712d51900d 100644
> --- a/src/common/scram-common.c
> +++ b/src/common/scram-common.c
> @@ -148,7 +148,7 @@ scram_H(const uint8 *input, int len, uint8 *result)
> }
>
> /*
> - * Encrypt password for SCRAM authentication. This basically applies the
> + * Hash password for SCRAM authentication. This basically applies the
> * normalization of the password and a hash calculation using the salt
> * value given by caller.
> */
> diff --git a/src/include/common/md5.h b/src/include/common/md5.h
> index ccaaeddbf4..37e2432021 100644
> --- a/src/include/common/md5.h
> +++ b/src/include/common/md5.h
> @@ -4,7 +4,7 @@
> * Interface to libpq/md5.c
> *
> * These definitions are needed by both frontend and backend code to work
> - * with MD5-encrypted passwords.
> + * with MD5-hashed passwords.
> *
> * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
> * Portions Copyright (c) 1994, Regents of the University of California
> diff --git a/src/interfaces/libpq/fe-auth.c b/src/interfaces/libpq/fe-auth.c
> index 5fe7e565a0..385c0472bf 100644
> --- a/src/interfaces/libpq/fe-auth.c
> +++ b/src/interfaces/libpq/fe-auth.c
> @@ -583,7 +583,7 @@ pg_password_sendauth(PGconn *conn, const char *password, AuthRequest areq)
> char *crypt_pwd = NULL;
> const char *pwd_to_send;
>
> - /* Encrypt the password if needed. */
> + /* Hash the password if needed. */
>
> switch (areq)
> {
> @@ -909,14 +909,14 @@ pg_fe_getauthname(PQExpBuffer errorMessage)
>
>
> /*
> - * PQencryptPassword -- exported routine to encrypt a password
> + * PQencryptPassword -- exported routine to hash a password
> *
> * This is intended to be used by client applications that wish to send
> * commands like ALTER USER joe PASSWORD 'pwd'. The password need not
> - * be sent in cleartext if it is encrypted on the client side. This is
> + * be sent in cleartext if it is hashed on the client side. This is
> * good because it ensures the cleartext password won't end up in logs,
> * pg_stat displays, etc. We export the function so that clients won't
> - * be dependent on low-level details like whether the encryption is MD5
> + * be dependent on low-level details like whether the hashing is MD5
> * or something else.
> *
> * Arguments are the cleartext password, and the SQL name of the user it
> diff --git a/src/test/regress/expected/password.out b/src/test/regress/expected/password.out
> index c503e43abe..7fe09e6f00 100644
> --- a/src/test/regress/expected/password.out
> +++ b/src/test/regress/expected/password.out
> @@ -55,14 +55,14 @@ SELECT rolname, rolpassword
>
> ALTER ROLE regress_passwd3_new RENAME TO regress_passwd3;
> -- ENCRYPTED and UNENCRYPTED passwords
> -ALTER ROLE regress_passwd1 UNENCRYPTED PASSWORD 'foo'; -- unencrypted
> -ALTER ROLE regress_passwd2 UNENCRYPTED PASSWORD 'md5dfa155cadd5f4ad57860162f3fab9cdb'; -- encrypted with MD5
> +ALTER ROLE regress_passwd1 UNENCRYPTED PASSWORD 'foo'; -- non-hashed
> +ALTER ROLE regress_passwd2 UNENCRYPTED PASSWORD 'md5dfa155cadd5f4ad57860162f3fab9cdb'; -- hashed with MD5
> SET password_encryption = 'md5';
> -ALTER ROLE regress_passwd3 ENCRYPTED PASSWORD 'foo'; -- encrypted with MD5
> +ALTER ROLE regress_passwd3 ENCRYPTED PASSWORD 'foo'; -- hashed with MD5
> ALTER ROLE regress_passwd4 ENCRYPTED PASSWORD 'scram-sha-256:VLK4RMaQLCvNtQ==:4096:3ded2376f7aafa93b1bdbd71bcc18b7d6ee50ed018029cc583d152ef3fc7d430:a6dd36dfc94c181956a6ae95f05e01b1864f0a22a2657d1de4ba84d2a24dc438'; -- client-supplied SCRAM verifier, use as it is
> SET password_encryption = 'scram';
> ALTER ROLE regress_passwd5 ENCRYPTED PASSWORD 'foo'; -- create SCRAM verifier
> -CREATE ROLE regress_passwd6 ENCRYPTED PASSWORD 'md53725413363ab045e20521bf36b8d8d7f'; -- encrypted with MD5, use as it is
> +CREATE ROLE regress_passwd6 ENCRYPTED PASSWORD 'md53725413363ab045e20521bf36b8d8d7f'; -- hashed with MD5, use as it is
> SELECT rolname, regexp_replace(rolpassword, '(scram-sha-256):([a-zA-Z0-9+/]+==):(\d+):(\w+):(\w+)', '\1:<salt>:\3:<storedkey>:<serverkey>') as rolpassword_masked
> FROM pg_authid
> WHERE rolname LIKE 'regress_passwd%'
> diff --git a/src/test/regress/sql/password.sql b/src/test/regress/sql/password.sql
> index f4b3a9ac3a..aa88d5ef82 100644
> --- a/src/test/regress/sql/password.sql
> +++ b/src/test/regress/sql/password.sql
> @@ -43,16 +43,16 @@ SELECT rolname, rolpassword
> ALTER ROLE regress_passwd3_new RENAME TO regress_passwd3;
>
> -- ENCRYPTED and UNENCRYPTED passwords
> -ALTER ROLE regress_passwd1 UNENCRYPTED PASSWORD 'foo'; -- unencrypted
> -ALTER ROLE regress_passwd2 UNENCRYPTED PASSWORD 'md5dfa155cadd5f4ad57860162f3fab9cdb'; -- encrypted with MD5
> +ALTER ROLE regress_passwd1 UNENCRYPTED PASSWORD 'foo'; -- non-hashed
> +ALTER ROLE regress_passwd2 UNENCRYPTED PASSWORD 'md5dfa155cadd5f4ad57860162f3fab9cdb'; -- hashed with MD5
> SET password_encryption = 'md5';
> -ALTER ROLE regress_passwd3 ENCRYPTED PASSWORD 'foo'; -- encrypted with MD5
> +ALTER ROLE regress_passwd3 ENCRYPTED PASSWORD 'foo'; -- hashed with MD5
>
> ALTER ROLE regress_passwd4 ENCRYPTED PASSWORD 'scram-sha-256:VLK4RMaQLCvNtQ==:4096:3ded2376f7aafa93b1bdbd71bcc18b7d6ee50ed018029cc583d152ef3fc7d430:a6dd36dfc94c181956a6ae95f05e01b1864f0a22a2657d1de4ba84d2a24dc438'; -- client-supplied SCRAM verifier, use as it is
>
> SET password_encryption = 'scram';
> ALTER ROLE regress_passwd5 ENCRYPTED PASSWORD 'foo'; -- create SCRAM verifier
> -CREATE ROLE regress_passwd6 ENCRYPTED PASSWORD 'md53725413363ab045e20521bf36b8d8d7f'; -- encrypted with MD5, use as it is
> +CREATE ROLE regress_passwd6 ENCRYPTED PASSWORD 'md53725413363ab045e20521bf36b8d8d7f'; -- hashed with MD5, use as it is
>
> SELECT rolname, regexp_replace(rolpassword, '(scram-sha-256):([a-zA-Z0-9+/]+==):(\d+):(\w+):(\w+)', '\1:<salt>:\3:<storedkey>:<serverkey>') as rolpassword_masked
> FROM pg_authid

>
> --
> Sent via pgsql-hackers mailing list (pgsql-hackers(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers

--
Bruce Momjian <bruce(at)momjian(dot)us> https://momjian.us
EDB https://enterprisedb.com

Only you can decide what is important to you.

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Erik Rijkers 2023-11-22 04:27:14 Re: proposal: possibility to read dumped table's name from file
Previous Message Thomas Munro 2023-11-22 01:58:15 Re: [PATCH] fix race condition in libpq (related to ssl connections)