Re: [HACKERS] Changing references of password encryption to hashing - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: [HACKERS] Changing references of password encryption to hashing
Date
Msg-id ZV149Fd2JG_OF7CM@momjian.us
Whole thread Raw
In response to [HACKERS] Changing references of password encryption to hashing  (Michael Paquier <michael.paquier@gmail.com>)
Responses Re: [HACKERS] Changing references of password encryption to hashing
Re: [HACKERS] Changing references of password encryption to hashing
List 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
itis
 
> +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
itis
 
> +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@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers


-- 
  Bruce Momjian  <bruce@momjian.us>        https://momjian.us
  EDB                                      https://enterprisedb.com

  Only you can decide what is important to you.



pgsql-hackers by date:

Previous
From: Thomas Munro
Date:
Subject: Re: [PATCH] fix race condition in libpq (related to ssl connections)
Next
From: Erik Rijkers
Date:
Subject: Re: proposal: possibility to read dumped table's name from file