Take the 2-minute tour ×
Information Security Stack Exchange is a question and answer site for Information security professionals. It's 100% free, no registration required.

Web application may encrypt all user data at client side to convince users that it can't decrypt them.

When user enters password, it's used to encrypt data in browser and then it's sent to server in encrypted state. Server doesn't know password, encryption key and thus can't decrypt it.

But most of the users aren't able to review code used for encryption. All they can do is to trust it. Client side encryption may give feeling of control but:

  • Server can send one encryption code to one user and another one to the other
  • Government organization may urge server-side company so that it will disable encryption for certain users

So is there any benefit in client side encryption from user point of view?

share|improve this question

migrated from ux.stackexchange.com Jul 9 '12 at 15:30

This question came from our site for user experience researchers and experts.

    
@AndreyBotalov - the reason to do client side encryption is to secure the data. If you send it in plain text it can be read if the packets are intercepted. –  ChrisF Jul 9 '12 at 12:23
2  
@ChrisF Preventing eavesdroppers from traffic interception is done using Transport Level Security. Client side encryption can't help in it as eavesdropper can modify code that does encryption. –  Andrey Botalov Jul 9 '12 at 12:28
    
@AndreyBotalov eavesdropping doesn't necessarily include local code alterations, that's a much more sophisticated and personal attack vs just sniffing packets –  Ben Brocka Jul 9 '12 at 13:15
1  
@BenBrocka In any case Javascript can't be used instead of TLS for encryption as JS code isn't protected from changing at transport level. I asked whether users think that client side encryption is better than server side. –  Andrey Botalov Jul 9 '12 at 13:21
4  
@Andrey I am pretty sure that your question can be described with this sentence: "web-applications using javascript to perform encryption in web-browsers for added trust", so I added the javascript and web-browsers tags. If by chance I misinterpreted the scope of your question, please remove these tags. –  curiousguy Jul 11 '12 at 3:05

4 Answers 4

up vote 4 down vote accepted

You are correct. Given your goals, client-side encryption probably doesn't make a lot of sense. It is not that it is worthless, just that there are some significant pitfalls and the value is limited, so your time would probably be better spent on other measures. A classic technical reference on this topic is Javascript Cryptography Considered Harmful.

If you're thinking that using client-side cryptography might help perception, even if it doesn't actually improve real security, I don't think that's a very promising angle, either. The average user is going to have no clue what the phrase "client-side cryptography" means and so I don't think they're going to associate it with warm fuzzy feelings.

I think you are better off taking standard steps to build trust with your users and to improve how you protect your users' data. Have you moved to sitewide HTTPS? Do you have a strong, customer-friendly privacy policy? Are you focused on serving your customers well and making them passionate about your site?

share|improve this answer

As other users have mentioned a lot of the discussion around this is going to be more under the umbrella of IT Security. However I think there is a UX perspective on this (or at least the beginnings of a discussion), which I'll try to detail below.


You've mentioned the answer in the question itself:

Client side encryption may give feeling of control

As you've mentioned, neither client-side nor server-side encryption is foolproof in terms of security, so there's nothing to choose between them, right?

Well, there is - it's about perception. If your users perceive that their data is being treated in a secure manner, then they are likely to be more happy regardless of whether or not this is actually the case.

Admittedly it's important not to lie to your users about the risks, but since only a small minority of users in most applications are likely to care, you can discuss the nitty-gritty details of your security solution somewhere where it won't get in the way of disinterested users.

Given this, the solution that I would suggest would be to perform client-side encryption to give your users a feeling of control, and then have some progressive disclosure of your security mechanism, its details and exactly how secure it is, for the users that do care.

EDIT: I'm aware that this position may have ethical implications depending on what you feel your users need to see. From a dispassionate perspective, however, perception is king.

share|improve this answer
2  
Just keep in mind that whatever password hashing you do on the client side results in the hash being the password anyway. i.e. if you do hash("password") = "1a2b3c4d5e6f..." on the client side, the password (as far as an attacker is concerned) is now "1a2b3c4d5e6f...". –  Polynomial Jul 10 '12 at 10:31

You could write an offline-mode client for the browser, like the Google Mail offline client for Google Chrome (it's a thick client running inside a thin client!).

That way the JS code:

  • is running in the browser, with the usual sandboxing (cannot mess with user files, etc.)
  • but it is only downloaded once, and cannot be changed per user/per connexion

To make sure every user gets the same package, its fingerprint needs to be published in a public repository, preferably replicated on many sites, and checked automatically after download, before installation.

Warning: this is merely the suggestion of a hint of an idea. I have not studied the "offline reader" security model.

Note: Firefox extensions have full access to everything in the browser (they are not sandboxed), so they would not be a good fit here, as they imply full user trust which is not a given (instead of the limited "I trust you with these informations, I trust you with follow your privacy policy").

share|improve this answer

Everything that is not encrypted on the client side, is basically open to everyone. If you want to have a minimum of privacy, there is no way around client side encryption.

share|improve this answer
    
There is such thing as TLS –  Andrey Botalov Jun 1 '13 at 11:11
    
This should perhaps explain why. –  Jeff Ferland Jun 1 '13 at 14:30

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.