Re: You're on SecurityFocus.com for the cleartext passwords. - Mailing list pgsql-hackers
| From | Tom Lane |
|---|---|
| Subject | Re: You're on SecurityFocus.com for the cleartext passwords. |
| Date | |
| Msg-id | 10623.957634141@sss.pgh.pa.us Whole thread Raw |
| In response to | Re: You're on SecurityFocus.com for the cleartext passwords. (Bruce Momjian <pgman@candle.pha.pa.us>) |
| Responses |
Re: You're on SecurityFocus.com for the cleartext passwords.
|
| List | pgsql-hackers |
Bruce Momjian <pgman@candle.pha.pa.us> writes:
>>>> The goal here was to make wire sniffing unproductive, and because the
>>>> server supplied the salt to be used by the client, you can't just
>>>> re-use a sniffed password you saw on the wire.
Good point. Are we trying to make the password challenge proof against
wire sniffing? I think that might be an unreasonable goal. People who
are concerned about sniffing attacks ought to be using something like
SSL to encrypt the *entire* connection (and/or a better auth protocol
than passwords, in the first place...). I repeat my prior comment that
the data in the database is likely to be just as valuable as the
password.
> Right now the client receives a random salt from the server, it uses
> that salt to crypt the password, then send that back for comparison with
> the clear-text password we store in the system.
> What if we:
> store the password in pg_shadow like a unix-style password with salt
> pass the random salt and the salt from pg_shadow to the client
> client crypts the password twice through the routine:
> once using the pg_shadow salt
> another time using the random salt
> and passes that back to the server. The server can use the pg_shadow
> copy of the password, use the random salt make a new version, and
> compare the result.
Use the random salt to make a new version of what, exactly? If the
server doesn't have the cleartext password, it can't make a crypted
password that will correspond to any randomly chosen salt either.
> This has the huge advantage of not requiring any new crypting methods on
> the client. It only requires the crypt to happen twice using two
> different salts.
A serious objection to both this and the MD5 proposal is that it'd
create a cross-version incompatibility between clients and servers.
We were just fending off complaints about 6.5-to-7.0 incompatibilities
that were considerably less serious than being unable to connect at all,
so how well do you think this'd go over?
I think we should try to stick to the current protocol: one salt sent
by the server, one crypted password sent back. The costs of changing
the protocol will probably outweigh any real-world security gain.
We could get some of the benefits of a random salt if we were willing
to enlarge the pg_shadow entry a little bit. Suppose that we allow
N different salt values to be sent by the server (crypt(3) only allows
4096 possible salts anyway, but I'm thinking N in the range of 100).
When a password is set, crypt the password with each of these and store
*all* the results in pg_shadow. Then we have the right crypted password
available to compare to the client response, and an attacker still has
a relatively low probability of having sniffed the right password.
BTW, I hear "MD5" being chanted like a mantra, but someone will have
to explain to me what it does that avoids the sniffed-crypted-password
problem...
regards, tom lane
pgsql-hackers by date: