Is it worth encrypting email addresses in the database?
Asked Answered
A

11

59

I'm already using salted hashing to store passwords in my database, which means that I should be immune to rainbow table attacks.

I had a thought, though: what if someone does get hold of my database? It contains the users' email addresses. I can't really hash these, because I'll be using them to send notification emails, etc..

Should I encrypt them?

Applaud answered 16/9, 2008 at 8:47 Comment(0)
B
68

Bruce Schneier has a good response to this kind of problem.

Cryptography is not the solution to your security problems. It might be part of the solution, or it might be part of the problem. In many situations, cryptography starts out by making the problem worse, and it isn't at all clear that using cryptography is an improvement.

Essentially encrypting your emails in the database 'just in case' is not really making the database more secure. Where are the keys stored for the database? What file permissions are used for these keys? Is the database accesable publically? Why? What kind of account restrictions are in place for these accounts? Where is the machine stored, who has physical access to this box? What about remote login/ssh access etc. etc. etc.

So I guess you can encrypt the emails if you want, but if that is the extent of the security of the system then it really isn't doing much, and would actually make the job of maintaining the database harder.

Of course this could be part of an extensive security policy for your system - if so then great!

I'm not saying that it is a bad idea - But why have a lock on the door from Deadlocks'R'us which cost $5000 when they can cut through the plywood around the door? Or come in through the window which you left open? Or even worse they find the key which was left under the doormat. Security of a system is only as good as the weakest link. If they have root access then they can pretty much do what they want.

Steve Morgan makes a good point that even if they cannot understand the email addresses, they can still do a lot of harm (which could be mitigated if they only had SELECT access)

Its also important to know what your reasons are for storing the email address at all. I might have gone a bit overboard with this answer, but my point is do you really need to store an email address for an account? The most secure data is data that doesn't exist.

Benally answered 16/9, 2008 at 9:0 Comment(6)
The problem with this reply is that while it does remind people there are other possible ways data can be compromised it ultimately only discourages the kind of proactive thinking people should be applauded for.Hewart
@Hewart Using encryption just in case isn't proactive thinking in my mind. Proactive thinking would be evaluating the risks and coming up with a solution which mitigates them. Encryption might or might not be part of that solution. I hope that my answer encourages that kind of thinking.Benally
I discovered that some WordPress caching plugins actually cache the database tables as json files within the public wp-content directory. Meaning that the smtp settings (if provided for publishing posts) and all the comments on the site would have the email address exposed. Due to the risk that someone may indeed see the contents of a database due to an oversight but not have access to the system or database itself, I fully support encrypting an email address with a string stored outside of the database. If this was the case with WordPress then the email addresses exposed would be useless.Suggest
In case of DB breach I believe you'll want your user's email addresses encrypted. Sure you can say something like "well then you should make sure your DB is well protected" to which I say, nothing is impenetrable online. I always address the worst case scenario and so far it proved to be a very good practice.Hightoned
In addition, due to recent (2018+) updates in law any personal data able to identify EU citizens must now be hashed or encrypted under GDPR law.Ruling
People want to encrypt emails for the same reason they hash passwords. You don't want someone in your database to begin with, but if they end up there, you want to protect everyone's safety and privacyGarget
T
21

I realize this is a dead topic, but I agree with Arjan's logic behind this. There are a few things I'd like to point out:

Someone can retrieve data from your database without retrieving your source code (i.e. SQL injection, third-party db's). With this in mind, it's reasonable to consider using an encryption with a key. Albeit, this is only an added measure of security, not the security...this is for someone who wants to keep the email more private than plaintext, In the off chance something is overlooked during an update, or an attacker manages to retrieve the emails.

IMO: If you plan on encrypting an email, store a salted hash of it as well. Then you can use the hash for validation, and spare the overhead of constantly using encryption to find a massive string of data. Then have a separate private function to retrieve and decrypt your emails when you need to use one.

Trevar answered 12/8, 2012 at 16:57 Comment(0)
U
13

In common with most security requirements, you need to understand the level of threat.

What damage can be done if the email addresses are compromised?

What's the chance of it happening?

The damage done if email addresses are REPLACED could be much greater than if they're EXPOSED. Especially if you're, for example, using the email address to verify password resets to a secure system.

The chance of the passwords being either replaced or exposed is much reduced if you hash them, but it depends what other controls you have in place.

Unbrace answered 16/9, 2008 at 8:53 Comment(0)
S
9

I would say it depends on the application of your database.

The biggest problem is, where do you store the encryption key? Because if the hacker has excess to anything more than your DB, all your efforts are probably wasted. (Remember, your application will need that encryption key to decrypt and encrypt so eventually the hacker will find the encryption key and used encryption scheme).

Pro:

  • A leak of your DB only will not expose the e-mail addresses.

Cons:

  • Encryption means performance loss.
  • Allot of database actions will be harder if not impossible.
Selfexcited answered 16/9, 2008 at 8:58 Comment(0)
A
4

Don't accidentally conflate encryption with obfuscation. We commonly obfuscate emails to prevent spam. Lots of web sites will have "webmaster _at_ mysite.com" to slow down crawlers from parsing the email address as a potential spam target. That should be done in the HTML templates -- there's no value to doing this in persistent database storage.

We don't encrypt anything unless we need to keep it secret during transmission. When and where will your data being transmitted?

  1. The SQL statements are transmitted from client to server; is that on the same box or over a secure connection?

  2. If your server is compromised, you have an unintentional transmission. If you're worried about this, then you should perhaps be securing your server. You have external threats as well as internal threats. Are ALL users (external and internal) properly authenticated and authorized?

  3. During backups you have an intentional transmission to backup media; is this done using a secure backup strategy that encrypts as it goes?

Aneurysm answered 16/9, 2008 at 10:17 Comment(0)
M
3

Both SQL Server and Oracle (and I believe also others DBs) support encryption of data at the database level. If you want to encrypt something why don't simply abstract the access to the data that could be encrypted on the database server side and left the user choose if use the encrypted data (in this case the SQL command will be different) or not. If the user want to user encrypted data then it can configure the database server and all the maintenance work connected with key management is made using standard DBA tool, made from the DB vendor and not from you.

Mosul answered 16/9, 2008 at 10:13 Comment(1)
The idea is valid, but I am not sure how it would impact performance.Allegiance
C
3

A copy of my answer at What is the best and safest way to store user email addresses in the database?, just for the sake of the search...


In general I agree with others saying it's not worth the effort. However, I disagree that anyone who can access your database can probably also get your keys. That's certainly not true for SQL Injection, and may not be true for backup copies that are somehow lost or forgotten about. And I feel an email address is a personal detail, so I wouldn't care about spam but about the personal consequences when the addresses are revealed.

Of course, when you're afraid of SQL Injection then you should make sure such injection is prohibited. And backup copies should be encrypted themselves.

Still, for some online communities the members might definitely not want others to know that they are a member (like related to mental healthcare, financial help, medical and sexual advice, adult entertainment, politics, ...). In those cases, storing as few personal details as possible and encrypting those that are required (note that database-level encryption does not prevent the details from showing using SQL Injection), might not be such a bad idea. Again: treat an email address as such personal detail.

For many sites the above is probably not the case, and you should focus on prohibiting SELECT * FROM through SQL Injection, and making sure visitors cannot somehow get to someone else's personal profile or order information by changing the URL.

Cystoscope answered 20/4, 2009 at 18:21 Comment(0)
R
2

It's worth to encrypt data in Databases, it's not making it a bit more difficult but way more difficult when its encrypted in the right way so stop philosophy and encrypt the sensitive data ;)

Rummy answered 1/9, 2014 at 19:7 Comment(0)
E
2

I miss one important answer here. When you have European users, you have to comply with the GDPR rules. Email addresses are considered personal data meaning Art.5 does apply on email addresses.

processed in a manner that ensures appropriate security of the personal data, including protection against unauthorised or unlawful processing and against accidental loss, destruction or damage, using appropriate technical or organisational measures (‘integrity and confidentiality’).

Of course this does not say that you must encrypt email addresses. But by encrypting the data you do protect it from snooping employees. And protect yourself as a developer from requests to make a manual change in the database.

Elson answered 19/2, 2021 at 10:3 Comment(0)
M
1

@Roo

I somewhat agree to what you are saying but isn't it worth encrypting the data just to make it a little more difficult for someone to get it?

With your reasoning, it would be useless to have locks or alarms in your house, because they can also easily be compromised.

My reply:

I would say that if you have sensitive data that you don't want to fall in the wrong hands, you should probably do it as hard as you can for a hacker to get it, even if it's not 100% fool proof.

Melanie answered 16/9, 2008 at 9:8 Comment(0)
C
0

You really have to weigh your worst case senario of someone obtaining those email addresses, the likelihood of someone obtaining them, and your extra effort/time needed to impliement the change.

Coeval answered 16/9, 2008 at 8:51 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.