Re: how to properly secure non-ssl logins (php + ajax)

2009-02-20 Thread Peter Gutmann
Rene Veerman rene7...@gmail.com writes:

Recently, on both the jQuery(.com) and PHP mailinglists, a question has
arisen on how to properly secure a login form for a non-ssl web-application.
But the replies have been get ssl.. :(

I disagree, and think that with a proper layout of authentication
architecture, one can really secure a login system without having the
administrative overhead of installing SSL everywhere, and the monetary cost
for a SSL certificate for each domain.

[...]

I'm halfway (or more?) there, i think. For my own CMS, i have taken the
following approach, which i'd like to hear your improvements on:

Go out and get a copy of Network Security by Kaufman, Perlman and Speciner,
this has an entire chapter that discusses this issue, including the pros and
cons of different approaches and all the ways you can get it wrong (oh, and
it's written for a non-security-geek audience).   I think any discussion here
will end up being mostly a rehash of bits of the chapter, their version goes
into much more detail and has diagrams to boot.

Peter.

-
The Cryptography Mailing List
Unsubscribe by sending unsubscribe cryptography to majord...@metzdowd.com


Re: how to properly secure non-ssl logins (php + ajax)

2009-02-20 Thread Alexander Klimov
On Sun, 15 Feb 2009, Rene Veerman wrote:
 Recently, on both the jQuery(.com) and PHP mailinglists, a question has
 arisen on how to properly secure a login form for a non-ssl web-application.
 But the replies have been get ssl.. :(

Unfortunately, they are right: get SSL.

 If you have a completely alternative way of securing a non-ssl login
 form, i'd like to hear about it too.

I suspect what you have coded is a reinvention of RFC 2617
(implemented, e.g., by mod_auth_digest in Apache).

Depending on your threat model, this can be all you need
(plaintext password is not transmitted, but this does not prevent
local dictionary attacks), but any such scheme fails miserable
against active attacks.

-- 
Regards,
ASK

-
The Cryptography Mailing List
Unsubscribe by sending unsubscribe cryptography to majord...@metzdowd.com


Re: how to properly secure non-ssl logins (php + ajax)

2009-02-20 Thread Erwan Legrand
Hi,

 Recently, on both the jQuery(.com) and PHP mailinglists, a question has
 arisen on how to properly secure a login form for a non-ssl web-application.
 But the replies have been get ssl.. :(

What makes you think these are ill-advised?

 I disagree, and think that with a proper layout of authentication
 architecture, one can really secure a login system without having the
 administrative overhead of installing SSL everywhere, and the monetary cost
 for a SSL certificate for each domain.

Well, it depends on how much security is enough for you. If the
threats you are concerned with encompass the threats mitigated by
SSL/TLS, then you should definitely use TLS. You could arguably use
Kerberos, SSH or IPSEC to achieve the same level of security, but that
would not be handy, since SSL/TLS is what is bundled in web servers
and browsers. Oh, and you don't necessarily have to buy a certificate
to Verisign to use SSL!

The only thing your scheme seems to achieve is protect your password
against eavesdroppers. But then, an eavesdropper could reuse your
cookie to hijack your session. Your protocol does not mitigate such
threats as session hijacking, MITM, phishing, HTTP cache poisoning and
the list goes on. And whatever the shortcomings of TLS might be, it
does mitigate these threats.

Now, if you threat model goes along the lines of :
 * The only asset I want to protect is my password (because I use the
   same password to access critical data hosted on other services!)
 * I don't care whether my session is compromised.
 * I don't care whether my data is captured by an eavesdropper.
Then your scheme might indeed be what you need. I did not give it more
than a quick look though. And I would suggest you reconsider in the
first place the reasons that made you reuse such a precious password.

I hope this last paragraph makes sense and you will forgive my use of sarcasm.
--
Erwan Legrand

Simplicity is prerequisite for reliability.
   -- E. W. Dijkstra

-
The Cryptography Mailing List
Unsubscribe by sending unsubscribe cryptography to majord...@metzdowd.com


Re: how to properly secure non-ssl logins (php + ajax)

2009-02-20 Thread Ivan Krstić

On Feb 15, 2009, at 7:30 AM, Rene Veerman wrote:
Recently, on both the jQuery(.com) and PHP mailinglists, a question  
has arisen on how to properly secure a login form for a non-ssl web- 
application.


What's the threat model?

users[user_id].user_login_hash = onewayHash(user_login_name +  
preferences.pref_system_hash);


That you're hashing the username suggests you're worried about  
eavesdroppers identifying the user at login time. But without SSL,  
it'll almost certainly be trivial for an eavesdropper to identify the  
user _after_ they login. What's the threat model?


//checks since when [browser IP] has last received a new challenge,  
if  threshold : make a new challenge. else return old challenge.


It is incorrect to rely on a bijection between IPs and users.


preferences.pref_system_hash


What you're calling a system hash is usually referred to as salt.


// walk through all the records in users table, for each, calculate:


This is a completely broken approach, and prohibitive for applications  
with more than a handful of users.


I suggest you start by trying to write down a clear, brief and  
coherent threat model. Once that's done, you can solicit feedback  
until you're satisfied with the definition of what you're trying to  
build. Once you can focus on implementation, I suggest looking at  
things like bcrypt, PBKDF2, and SRP as background reading.


Cheers,

--
Ivan Krstić krs...@solarsail.hcs.harvard.edu | http://radian.org

-
The Cryptography Mailing List
Unsubscribe by sending unsubscribe cryptography to majord...@metzdowd.com