On 02/11/2015 02:31 PM, Magnus Hagander wrote:

    In any case, my larger point was that given the pain that we're
    going to
    incur here, and the certainly years-long transition interval involved,
    it would be foolish to think only about replacing the MD5
    algorithm and
    not about reconsidering the context we use it in.  Stuff like
    unreasonably
    short salt values should be dealt with at the same time.



All discussion seems to be about the protocol, which is also the harder problem, isn't it?

ISTM that the more *important* thing to fix is the on-disk storage in pg_authid.

At least, looks like it would be the most urgent (and with no need for clients breaking in the process, AFAICT)

[snip]
Seems the risk of someone either lifting pg_authid from disk or by hacking the system and being postgres, thereby accessing passwords stored somewhere else, is actually the bigger problem. But also one that should be reasonably easy (TM) to fix in a backwards compatible way? (just rewrite with a new hash whenever the password is changed, but keep reading md5 until they are all replaced.

Adding a new system column with a text or enum representing the algorithm that created the "hash" would go a lot towards fixing this situation. When/If the column isn't there, just assume "md5". This would allow for transparent pg_upgrade. Then, based on the "default_hash" (or something to the same effect) GUC, automatically rewrite the hashes (and set the corresponding 'hash_type') upon password change.

Please note that this allows for clients supporting it (be it natively or by relying on an external SASL lib or the like) to request some challenge-response mechanism ---such as SCRAM-SHA256--- when available. In fact, some forms of challenge-response-ready hashes also support "password" (plaintext) with the same authenticator, thereby perfectly replacing the functionality we have today.
    Existing implementation: Dovecot's CRAM-MD5 mechanism


Thanks,

    / J.L.

Reply via email to