Question

Where to store encryption key?

Asked by: codefaze

We will be soon taking on task on implementing encryption to various fields of our Postgre database.   Our question is on where should we store the encryption key?  We will be storing names and credit card numbers for our customers so we can do reocurring billing.  We want to encrypt the credit card numbers but will need to decrypt them to process them each month.  We will have two web servers MS and Apache that will be access the data.  

So what are best practices for storing encryption key?  I've been told not to keep the key on the database server so we are focusing on keeping a copy of the key one each of the web servers.  What are thoughts out there on where to keep the key?   Do we just put the key on a separate volume and lock down permissions or are there other things to consider?   Appreciate all feedback.

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2006-07-27 at 16:32:19ID21934798
Tags

encryption

,

key

,

store

,

where

Topic

PostgreSQL Database

Participating Experts
2
Points
500
Comments
2

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. encrypt/decrypt
    im looking for a function that i can use to incrypt and decrypt a string with a salt that works in php and across in perl. any ideas?
  2. encrypt Decrypt problem
    We are using the encrypt and decrypt function with Coldfusion MX 6.1. We are using it to provide a basic level of security for customers using credit cards. When the customer passes the credit through a form, it gets checked for validity and then excrypted with the use of a k...
  3. Encryption & Decryption with Java.
    Hi I am using this class for Encryption. However I have two questions: 1) How can I store the key so the string can be decrypted at a later date? 2) Any recommendations in storing this key? Cheers Angus import javax.crypto.*; public class DesEncrypter { public DesEnc...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: earthman2Posted on 2006-07-28 at 04:58:42ID: 17200192

In secure systems you want a server that does just passwd authentication eg dedicate another server for kerberos and this password authentication and install NOTHING on it other than kernel and bare minimum ie no X windows.

 

by: grant300Posted on 2006-08-09 at 20:46:36ID: 17284921

First and foremost, storing keys in the clear on a WEB server is the worst thing you can do.  The web servers are the first systems in the chain that will be compromised in an attack.  It is bad enough having keys in memory on a web server.  Never put them on disk in the clear!

I assume you are doing key exchange and encryption in your WEB application to avoid sending credit card information in the clear, right?  I also assume that the database storage issue is distinct from the WEB encryption scheme.

BTW, what encryption algorithm were you considering using?  Obviously, a symmertric key is all that is required but I am hoping you were not planning on a simple substitution or other home-brewed approach.  The guys that commit wholesale hacking and credit card fraud are very sophisticated and you would be suprised how easily anything other than professionaly built and extensively vetted cyphers are to break.  You have two particular disadvantages here as well.  First, the data is short and is of very well know structure.  Second, breaking a cypher when you have both the encrypted and clear message is many times easier.  A hacker who has gained access to your system could seed the data by making a small purchase with a credit card before he steals the whole database in order to make breaking the code eaiser.

As far as your question about best practices for storing encrypted columns and the associated keys in database, I can tell you how at least one of the big guys handles it.

Sybase ASE 15 just came out with this enhanced functionality.  It is a pretty well thought out system that you might want to adopt/adapt for PostgreSQL.

The encryption keys for each column are stored in encrypted form in a system table.  There is a system-wide master encryption key for encrypting/decrypting the column keys.  It can only set and changed (but never read)  by a user with the SSO role.  Users are then granted read/decrypt access to specific columns.  When a user goes to select a column, the database figures out if that user id has access, if so, it goes to the table with the column keys, retrieves the appropriate one, decrypts it using the system master key, then decrypts the column using the decrypted column key.

This might be overkill for what you are trying to do but there are some important ideas here.
1) Never send keys in the clear over the wire to a client process
2) Don't store the keys in clear form anywhere
3) Lock the whole thing up with a non-reversable, non-readable key

Lets take a look at how you might go about implementing a poor-man's version of the Sybase scheme.

Item 2 is simple, store the keys in encrypted form in a table.  That way even if there is a breach and access to the table is compromised, the keys don't do anyone any good.

The next nut to crack here is item 3.  While Sybase use AES (a block cipher with the same key to encrypt and decrypt) I suspect that the system-wide master key (used to encrypt the column keys) is a puplic key scheme.  Somewhere in the bowls of the database engine either hardcoded or, more likely initialized randomly at install time, is a public/private key pair.  The private key is used by the process that stores the system-wide master key and the public (using the term loosely) key is used by the query processor to decrypt that key so that it can then decrypt the column key(s) as required.  If you want to break the database security, you have to find where both keys are hidden and somehow devine exactly what encryption algorithm was used.  Not a simple thing.  Do you need that level of security?  I don't know.  You could hard-code a reversable key in a C language module to store and retrieve the master key, or, even simpler, you can simply store the master key in the clear in a table that only the Security Officer role has access to.  That leaves you vulnerable if a backup tape is lost or stolen though.  (Boy, that hasn't happenned recently ;-)  You have to decide the level of security required based on corporate compliance (e.g. Sarbanes-Oxley) as well as the potential liability of a security breach.

The really big issue and, I suspect the part of your existing plan that blows up, is item 1; never send keys in the clear over the wire.  You have a couple of ways to get around this.  First, you can do what Sybase, Oracle, DB2-UDB, etc., all do and keep all encryption/decryption on the server.  To do this you will have to build functions and/or procedures that deal with encryption, decryption, and user authorization to access a column.  The nice part about this is that you can build a generalized facility which works for any column in the database.  It's a great idea but may be beyond what you are willing to undertake.

The other approach if you cannot see your way clear to keep the encryption on the database server and have to move it out to the client side, is to retrieve the encrypted column key(s) back to the client and decrypt them there.  The issue with that scheme is trying to keep the system-wide master key secure between the server and the client(s).  Again, how far you carry this depends upon the security level you need to enforce.  If you could run the monthly re-bill as a batch job right on the database server, you would have fewer concerns.  I am guessing that that is not practical because you are using a WEB server-based credit card authorization facility forcing you to implemented on the IIS and/or Apache server.  Obviously, you only need to implement the re-bill on one of those.

If your re-bill application is the only thing that needs to decrypt columns, you could publish a one-time public key from the client and have the database server use that to send the system master key over encrypted with it.  The client can then decrypt it and use it to decrypt column key(s) as needed.  All of this gets kind of clumsy and still requires that you develop some encryption capability at the server end.

One final thought is that this work has been done before so there is no need to reinvent the wheel.  I would take a look at RSA's BSAFE developers kit.  I have no idea what the pricing structure is but everything you would need to do this right is in there.  I am sure there are other commercial products out there as well.

Sorry there isn't a simple answer, much less solution, to your question, however; when you can pick up the paper just about any day of the week and read about another high profile data theft, you kind of have to be a bit careful about how you handle financial data.

Best of luck,
Bill

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...