<?xml version="1.0" encoding="windows-1252"?>
<node id="74455" title="Encrypting Credit card numbers" created="2001-04-21 18:43:15" updated="2005-08-14 04:24:58">
<type id="120">
perlmeditation</type>
<author id="66568">
petethered</author>
<data>
<field name="doctext">
&lt;hr&gt;&lt;b&gt;&amp;lt;edit&amp;gt;&lt;/b&gt; Just to clarify, I HAVE to store the credit card numbers since the cards will need to be automatically rebilled.  &lt;P&gt;If It was just onetime transactions, there would be no problems.&lt;b&gt;&amp;lt;/edit&amp;gt;&lt;/b&gt;&lt;hr&gt;&lt;P&gt;


Recently an intresting problem has fallen in my lap.&lt;P&gt;

How to securely store creditcards to make them safe
incase of a system penetration.&lt;P&gt;

Now, if the transactions I was expecting were one
time transactions ( a sale for example ), I would store
everything but the last 4 digits, and If the customer
was going to make another one time transaction, just
ask for the last 4 digits.&lt;P&gt;

But my problem is that I'm expecting recurring billing.
A transaction every month , without having the customer
to re-enter any information ( for a service based website.
Not pr0n ;) Those were my younger broker days ;)&lt;P&gt;

So i'm forced to store credit card numbers.  But every
day in the news you read about X site being penitrated
and Y number of CC's stolen.&lt;P&gt;

Well, I have come up with a number of possible solutions, and im hoping the Monestary can think of the best way for me to do it.&lt;P&gt;

&lt;ol&gt;&lt;li&gt;&lt;b&gt;  Not encrypt them at all&lt;/b&gt;, dubed the "Pray" method.  Pray
that the system doesnt get penetrated.  Rely on MySQL's internal
access tables to protect it, and the servers hosts.allow/deny
and patches.&lt;br&gt;&lt;br&gt;&lt;/li&gt;

&lt;li&gt;  &lt;b&gt;Use a simple find and replace encryption&lt;/b&gt;.  Ie, scramble the
numbers up based on a precreated hash.  Could be made stronger
by  randomizing the hash based on a timestamp.  THis is easily
hacked if the source code is read.  Billing can be automatic.&lt;br&gt;&lt;br&gt;&lt;/li&gt;

&lt;li&gt;  &lt;b&gt;Use PGP.&lt;/b&gt;  Encrypt the card number with the public key for
storage into the database, then have an administrator billing
interface where the Private key is cut and pasted into a textbox
and the cards are decrypted for billing.  Pretty secure, but all
a hacker has to do is alter the source code to capture the private
key and/or the cc number after its decrpyted.  Billing is not 
automatic since the admin has to enter his private key everyday&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;/ol&gt;&lt;P&gt;


So, as you can see there is no perfectly secure way of storing the
cards, unless I missed something.  Im leaning twords the PGP
encrpytion but the annoyance of having to manually do the recurring
billing may not make it fly with the boss.&lt;P&gt;

So monks, is there anything I missed?
&lt;P&gt;

&lt;b&gt;Pete&lt;/b&gt;&lt;P&gt;

&lt;font size=1&gt;insert into pete values('red hair','near green eyes','overinflated ego');&lt;/font&gt;
</field>
</data>
</node>
