ianG wrote:
On 26/09/11 16:49 PM, Adam Back wrote:
What about introducing the concept of server signed client certs. A
server
could recognize its own server key pair signature on the client cert,
even
though the server cert is not a proper CA cert.
Hmmm... interesting idea!
The term I used for this concept is "first party certification".
Typically, the server application will store the entire cert in its db
as account info. So analysing the signature as own-CA would save that
database lookup. This might make sense if we are relying on say Apache
to do all the processing, because it is automatable, and Apache doesn't
have much in the way of database processing capabilities.
Apache allows a PHP application to retrieve the whole X.509 certificate
used by the client. In the proof-of-concept validation I made, I
extracted the client public RSA modulus and that was (almost) it about
client authentication (SSL done by the apache module). By "almost", I
mean the database management workload amounts to the mapping
RSA_modulus<==>account.
Thus the client need not even a certificate signed by a "own-CA", any
certificate would do (certificate used only because mainstream SSL does
not support bare public keys).
To fully appreciate the potential of these ideas require to go back to
the essential properties of digital signatures, and get rid of PKI trust
model almost completely.
("Details available on request" ... but no spare time to provide them on
the foreseeable future.)
Although typically, I would suggest that Apache should be put in
pass-thru mode and let the application do *all* the login processing.
By this I mean, analyse the crypto results from the certs, and put it
all in the PHP variables. Never ever drop the connections on its own
decisions, in my experience, letting Apache make security decisions like
that always results in lousy user performance, which reduces overall
security (user does it another way).
(It's an interesting idea ... )
Yes, but ...
you need to switch clients to using (a more or less degenerate form of)
client certificates, which historically has failed,
and maybe more subtly, you start giving end-users something for their
own security which is not branded by the service operator: ultimately it
is the client private key protection that counts, and once the user
mental model is well understood, there is no barrier for the client to
move to another service operator without any loss in security.
Don't get me wrong, I would like to see this usage of client key pairs.
The above are my understanding of the objections when trying to put
forward this concept.
Then the password request
on the client goes to the browser/os key store. So long as you had CA
pinning that would help the phishing situation.
Yes.
Yes.
Of course there is still the UI problem to somehow have the user
detect the
difference between the key store password dialog and a fake dialog put
up by
a hostile web page. There are some things that can help like user
cutomized
dialogs where the hostile site cant know the customization.
Right.
Hey, don't forget that the enemy needs the
encrypted-client-private-key-file. The hostile web page needs a Trojan
to get it. This raises the bar.
--
- Thierry Moreau
CONNOTECH Experts-conseils inc.
9130 Place de Montgolfier
Montreal, QC, Canada H2M 2A1
Tel. +1-514-385-5691
iang
Adam
On Mon, Sep 26, 2011 at 07:52:20AM +1000, ianG wrote:
On 25/09/11 10:09 AM, James A. Donald wrote:
On 2011-09-25 4:30 AM, Ben Laurie wrote:
I'm just saying I think its hard to detect when a password is being
asked for as part of the risk assessment.
http and https do not know there are such things as logons. Logons
need to be built into the protocol, rather than added on top. Your
browser should know you are logged on.
When using client certs, it works: the browser, the server and https
do know if you're logged on [0].
The problem with HTTPS login is that it was sacrificed at the alter
of some unworkable commercial dream, thus forcing developers to rely
on passwords. Any client cert is better than the current best saved
password situation, because the technical security of a public key
pair always exceeds a password [1]. But while vendors will slave to
make saving passwords easier (so as to cope with the explosion of
sites & contexts) ... they won't work to make client certs better.
All of this (again) aligns well with key continuity / pinning / and
various other buzzwords. But, really, you have to try it. There's no
point in talking about it.
iang
[0] Where, logged in means, is using an appropriate client cert.
This involves an amount of code in the application to figure out, but
it seems about the same amount of code as doing the login the other
way, via passwords and so forth. There are some additional
complications such as new certs, but this is just coding and matching
on the names.
[1] this deliberately ignores 1980s advice to remember your password...
_______________________________________________
cryptography mailing list
[email protected]
http://lists.randombit.net/mailman/listinfo/cryptography