Slashdot Mirror


Keeping Private Customer Data...Private?

Suffering Sekret Keys asks: "When I first started working for the company I'm with now, back in 1996, I was charged with finding a way to keep our customer credit card info secure in our database. Now that I'm smart enough to realize the flaws in this system, I am wondering how you avoid the catch-22 of needing to be able to encrypt/decrypt the data on the same machine that houses it, without exposing a secret key that could make that data more vulnerable in the event of an intrusion?" This question has been submitted a few times, recently, but this was the best one out of the lot. It seems many of you are wisely concerned about private data stored on your company's net, and the risks involved if it gets stolen. Well, now is your chance to discuss various solutions. How would you securely store your customer's private information, especially when it comes to critical pieces like credit card numbers?

"I chose 1024-bit PGP encryption with a long passphrase. I use the Cryptix java package to handle the encryption from a Perl script (the reasons for this are legacy related, but I'm in the position where I can start clean if need be -- a Perl-only solution would be great).

The thing that makes me nervous is the secret key being stored on the machine that houses the database. The reason for this is so that our billing staff can handle the recurring billing. (They have a web interface where they must enter the passphrase to gain access to the credit card information.)

I have realized for a long time now that if someone gained full access to this machine, they could fairly easily run a brute-force attack on the encrypted data, if they found our secret key on that machine. But when we recently worked on our privacy policy, this potential problem became more important.

What changes could we make to our setup so that we can encrypt/decrypt the credit card information on the same machine that houses the data, while making it as hard as possible to decrypt the credit card data assuming the entire machine was stolen (or cracked)?

We are a very small company. How do "the big boys" handle these things? What is the best book on this particular subject?
"

While this setup may work well for credit card numbers, what about setups that will protect other personal information like a customer's address and phone number? Would such information be practical to obfuscate in such a manner?

377 comments

  1. Why store cc# at all? by EricBoyd · · Score: 3, Insightful

    I think the first question these people should ask themselves is why they are storing their customers cc # at all? If you can avoid doing that, it's by far the most "secure" solution!

    Websurfing done right! - StumbleUpon

    --
    augment your senses: http://sensebridge.net/
    1. Re:Why store cc# at all? by corebreech · · Score: 2

      So when I ask for my money back you guys can figure out which account to credit.

    2. Re:Why store cc# at all? by Sharkyfour · · Score: 3, Informative

      The reason for this is so that our billing staff can handle the recurring billing.

      It's right there in the article.

    3. Re:Why store cc# at all? by b0bby · · Score: 1

      Since he mentions recurring billing, I would guess that they're providing a service for which one might be charged a monthly fee (such as an ISP) & people let them charge each month automagically. I do that with my home ISP.

    4. Re:Why store cc# at all? by Anonymous Coward · · Score: 5, Insightful

      And even more importantly - if you must store them, shuffle them off to a machine that is not on the Internet.

      At my old company, there was a system which handled new CC number entries. As part of a nightly process, they were moved into a database on a separate machine which was only connected for that window of time. All of this was on top of standard security measures. So the biggest risk was having the "temporary" entries compromised.

    5. Re:Why store cc# at all? by Quixotic · · Score: 1

      How about automatic reoccuring subscriptions. Customer's credit card gets billed $XX every month for some service.

      --
      --
    6. Re:Why store cc# at all? by realdpk · · Score: 4, Interesting

      It's not unusual for a merchant to ask for your credit card to process the refund. So, they ask for that again, and it's compared against a hash generated from the original order. Tada, easy as pie.

    7. Re:Why store cc# at all? by gmack · · Score: 3, Insightful

      There are many reasons that it may be needed such as fraud control, credit backs etc.

      One scenario is if you discover a card was false after you charged it. It's a lot cheaper to credit the card before the real owner generates a charge back since there is a signifigant fee (for the reseller) attatched. You can't do this if you don't have the number stored somewhere.

      2 basic things can help keep the customers secure though.

      1: not storing more info than you have to. On this point there is NO excuse for keeping the CVV2 info yet I see people doing this a LOT.

      If they don't have the CVV2 codes the card will be harder to use as more credit card companies demand it's use. Use the code to verify the card then forget what it was. (yes I've seen buisnesses store it in the db)

      2: properly secured servers with up to date patches/daemons. If the server isn't secure it won't matter how much you use encryption they can simply grab the data as you process it.

    8. Re:Why store cc# at all? by Anonymous Coward · · Score: 0

      Mod parent up.

      Why would you need to store CC#'s on a machine connected to the net when they can be stored offline?

    9. Re:Why store cc# at all? by ncc74656 · · Score: 3
      So when I ask for my money back you guys can figure out which account to credit.

      You store the last four digits and ask for the full number at refund time. It's what the big chain stores do...look at a receipt; it'll typically have on it the last four digits of whatever card you used. You have enough information to know which card to accept for the refund, but not enough that a disgruntled/dishonest employee (or the 1337 h4X0r who just 0wn3d j00) can do something bad with it.

      --
      20 January 2017: the End of an Error.
    10. Re:Why store cc# at all? by Anonymous Coward · · Score: 0

      Anyone who asks why hasnt actually run a business...

    11. Re:Why store cc# at all? by LinuxCumShot · · Score: 0

      Just use Linux. I hear it really good. bling bling!

      --
      -- OMFG = Oh My Floatse Goatse
    12. Re:Why store cc# at all? by fire-eyes · · Score: 1

      It's right there in the article.

      What, slashdot users read an article? Shame on you for having such... .... expectations heh.

      --
      -- Note: If you don't agree with me, don't bother replying. I won't read it.
    13. Re:Why store cc# at all? by Anonymous Coward · · Score: 1, Insightful

      Let's hear it for the highly skilled moderators who modded as "Insightful" a question answered in the posting. Keep up the good work, guys! You rock!

    14. Re:Why store cc# at all? by jackb_guppy · · Score: 2

      Your database server should not be the machine processing the credit cards. That is billing. You encrypt your card number with the billing machine's public key (better yet the banks). When the billing machine access the data it can decode the credit card to readable form.

      If you need to search database by credit card number... just encrypt with public key and use that agianst the database encrypted card number. Same as checking your password in Unix -- a one way transformation. If you do not want to use that -- use 2 16 bit CRC (with different primes) makes a nice one way "finger print" -- very few matches.

    15. Re:Why store cc# at all? by corebreech · · Score: 2

      Or if the merchant doesn't bill your credit card until they ship?

      Or if they bill your credit card in installments?

      Or if they require your credit card on file in order to prove your creditworthiness?

      Refunds are but a single example. There are many reasons for having a CC# on file.

    16. Re:Why store cc# at all? by Anonymous Coward · · Score: 0

      with good credit card gateway software, like verisign's payflow pro and many others, you can do credit backs without storing the credit card information.

  2. big companies by Anonymous Coward · · Score: 4, Interesting

    If work for a big bank in Canada (about 3 million clients), and you would be surprised to know that out databases are NOT encrypted in any way...

    In fact the sole security rests on the passwords and the physical access to the machine.

    But our servers are in a secured building, administered by IBM (you should see what it takes just to be able to enter the computer room, let alone trying to stay 1 minute in front of a console without someone asking you what you are doing there...)

    1. Re:big companies by Anonymous Coward · · Score: 2, Funny

      > If work for a big bank in Canada (about 3 million clients), !
      I don't think that the National Bank of Canada whom have 3 million client can be considered like a Big Bank !
      Anyway who can trust a Bank who need IE to access it's "Secure" Internet banking

    2. Re:big companies by Anonymous Coward · · Score: 0

      Does this mean that your databases systems are not physically connected to the net?

    3. Re:big companies by Anonymous Coward · · Score: 0
      I used to work for a billing company where none of the customer data, including credit cards, was encrypted. My bosses thought it would be too hard to do the recurring billings if we had to decrypt the credit card data, so we were not allowed to encrypt it. One of them would even send customer data to other people in other companies we workded with via e-mail, and didn't understand why it was not a good idea. They also thought that no one would bother trying, or even be able, to get into our MSSQL DB.

      There was also no privacy policy. "That's not our problem," said my bosses.

      And they were operating without even a firewall. I installed the first firewall the company ever had, after they had finally run off the network admins.

      They no longer store that kind of data themselves, so I hope the people to whom they have outsourced it are more knowledgeable about privacy issues.

  3. Re:your first problem by baudbarf · · Score: 3, Funny

    I suggest you change your solution to run on Win2k.

    Ah, yes, if you want to increase your security, run a Microsoft OS. And if you want to increase your protection against STD's, use condoms manufactured by Firestone.

    --
    You can run but you can't hide, except, apparently, along the Afghan-Pakistani border.
  4. I wonder... by kill-hup · · Score: 3, Informative

    I wonder if this question (and the others mentioned) have anything to do with this recent IDG story.

    --
    Sinepaw.org: Grape Winos
  5. Comment removed by account_deleted · · Score: 1, Offtopic

    Comment removed based on user account deletion

  6. A little obfuscation? by Hard_Code · · Score: 3, Interesting

    create a new column called, say, PASSWORD, in the database, and throw some random junk in there, and hope the cracker wastes all their time trying to crack *that* ;)

    --

    It's 10 PM. Do you know if you're un-American?
    1. Re:A little obfuscation? by Anonymous Coward · · Score: 0

      A little obfuscation can go a long way. Say your table has two colums, "HASH" and "PASSWORD". If the password is stored encrypted (ummm...), switch the two. Make a note of it somewhere physically secure, say a special design documentation folder in a safe or something.

      Now when Joe Script Kiddie somehow manages to yank the DB, he's going to spend all of his time trying to reverse engineer PASSWORD (especially if HASH is calculated using the plaintext password), and NEVER, EVER GET ANYWHERE.

      Obscurity is a useful line of defense when it comes to security. When you rely on it as your ONLY means of defense, then you're fucked.

    2. Re:A little obfuscation? by lrichardson · · Score: 2
      One place I worked at had a couple of interesting little tricks, in the same vein. First, numbers (SSN, cc) were simply encrypted (e.g. SSN + 123456789). Next, there were bogus entries. And a good number (i.e. the first 100 odd records) were not just bogus, they are traps ... if someone in the RW tries to use the account, all sorts of alarms go off ... the cc co. phones the company that has the trap account on their file, and then all hell breaks loose.

      I had to laugh at the one incident that occured while I was there ... turned out to be an employee of the cc co. who lifted the file, which caused the headless chicken dance at work.

      But, as others have pointed out, keeping the data on another non-internet connected system is probably the simplest and best method

  7. How about steganography? by mrgrey · · Score: 0

    While it would be a pain in the butt to convert lots of data to seperate encrypted image/sound files it would be very secure, since many people don't use or suspect it.
    Info on steganography can be found here.

    --
    -Tolerate my intolerance
  8. Don't decrypt by Osty · · Score: 2, Interesting

    Why do you need to decrypt the credit card number? Once you've encrypted it and stored it in your database, that should be it. It should never need decrypting (by you, anyway -- your financial partner will have a key for decrypting, and if you can't trust them then you have other problems). No actual person should ever see the unencrypted number, nor have access to that number (too much temptation there).


    Of course, the very best thing to do is simply never store the credit card. Granted, your business model may not allow that, but it's still the safest option (crackers can't get what you don't have).

    1. Re:Don't decrypt by jackb_guppy · · Score: 2

      Agreed.

      I just did a transfer function, GnuPG at 2048.

      Each end knows the other's public key and that is it. One way transmission.

      And just for that warm fuzzy feeling, we compress and use a secondary cypher just to make it a little harder.

    2. Re:Don't decrypt by Anonymous Coward · · Score: 0

      Why do you need to decrypt the credit card number?

      Because, like I said in the post, we do recurring billing on these cards. We have to decrypt the credit card numbers, and send them (via SSL) to our credit card processor to be billed.

      Once you've encrypted it and stored it in your database, that should be it. It should never need decrypting (by you, anyway -- your financial partner will have a key for decrypting, and if you can't trust them then you have other problems)

      I'm not sure who your financial partner is, but we are a small company that has our credit cards processed by authorize.net.

      We also need the ability to process credits on these cards.

      No actual person should ever see the unencrypted number, nor have access to that number (too much temptation there).

      Even if we modified our scripts so that our person in charge of billing could not see the numbers, they still have to be decrypted by us before we can send them to authorize.net for billing.

  9. Why store secret key? by demi · · Score: 5, Informative

    I've done something similar before (though it was passwords, not credit card data) and the trick is to not store the secret key anywhere, especially on the server that stores the data.

    I coded a server component that could decide whether a requester could view an encrypted datum (for example, if the requester authenticated correctly) and decrypt it using a key stored only in memory, that had to be entered by a human being to start the server. The humans who could administer the server memorized the key. A small enough amount of data was stored that changing the key was feasible.

    This server was in perl, but the encryption/decryption code was in C; I used blowfish (libblowfish) and also stored the key in a C buffer pointed to by a perl scalar, and used the mlock() system call to prevent the key from being swapped--an alternative might be to use OpenBSD where it is possible to encrypt the swap area.

    Anyway, I hope that gives you some ideas. Any form of storing or recording the decryption key reduces to storing the credit card numbers in plaintext, so you should avoid that.

    --
    demi
    1. Re:Why store secret key? by Anonymous Coward · · Score: 0

      My linux swap file is encrypted....

    2. Re:Why store secret key? by Hard_Code · · Score: 2

      "Any form of storing or recording the decryption key reduces to storing the credit card numbers in plaintext, so you should avoid that."

      Well, if you want to get technical, if they rooted the box, they could still presumably walk through memory (ok, encrypted swap would add another level here).

      --

      It's 10 PM. Do you know if you're un-American?
    3. Re:Why store secret key? by pogle · · Score: 2

      My usual method of key storage is to have all my keys on a mini-cdr. There exist two copies, one in a safe box of some sore (safe deposit, fire safe, etc) and one under lock and key or on my person at all times. Insert the disk, access the key, remove the disk. I know that one could still parse thru memory, but thats a royal PITA in any case that I don't worry about too much, as my data isnt *that* critical to worry about encrypted swap. When it comes time to change the key, change it, burn the new one to a new pair of mini-cdrs, and destroy the old two (fire works well). Then even if someone downloads your encrypted data and you change the key, they can never recover the old key from a garbage bin or something.

      --
      http://thechubbyferret.net - Ferret pictures and informative links.
    4. Re:Why store secret key? by H310iSe · · Score: 3

      While I'm sure this is a great solution, I'm a poor network adm who was literally thrown into the job (I have other specialties, server admin just isn't one of them), I can barely program javascript no less C, and I have been tasked w/ securing a server w/ CC #s on it (as w/ the poster, they're used for recurring billing).

      When I firewalled the server I found a backdoor was already on it.

      Anyway, are there any far-less-than-perfect-but-even-a-networking-newbie -can-implement-them solutions? I'd like to do SOMETHING but realistically my employer is not going to pay for a 'real' net admin to do the work and I can only learn so much so fast...

      Oh, to make matters more interesting the server is NT 4 running SQL 6.5 w/ a blank SA password (which must be blank due to ... oh, I don't want to get into it...)

      I'll be happy to R any FMs y'all suggest.

      --
      closed minded is as closed minded does
    5. Re:Why store secret key? by dubl-u · · Score: 2

      Or better yet, no swap at all. For all of the real-time (as opposed to batch) server stuff I write, I make sure the hardware should never need to swap. Once you allow swapping, response time goes into the toilet, usually causing queuing and spiralling delays. Yuck.

      Of course, root can still walk through RAM, but there are ways to fix that. I've lately been trying LIDS, which adds a more complex permission model. You can make it so that root is normally pretty limited, requiring a separate maintenance password to do anything dangerous.

    6. Re:Why store secret key? by Oestergaard · · Score: 2

      So when you crack the server and get root, you need to go *all* the long way to a gdb which you attach to the running process, in order to get the key out.

      Wow. Good thing it doesn't get swapped out, then the "print" from gdb might have taken an extra millisecond ;)

    7. Re:Why store secret key? by oni · · Score: 1

      I'm a poor network adm who was literally thrown into the job

      The fact that you have a pulse means that you are already ahead of many companies.

      The fact that you are highly motivated puts you up another knotch.

    8. Re:Why store secret key? by DrPascal · · Score: 1

      And what happens when they compromise the second password? [/obvious] Great idea.

      --
      DrPascal: Not the language, the mathematician.
    9. Re:Why store secret key? by demi · · Score: 1

      It's a good point. I suppose I was thinking more in terms of the persistence of the disk storage. Is your point that it isn't helpful to use encrypted swap or mlock()? Or that requiring the decryption key on server startup is no better than storing it in a file?

      --
      demi
    10. Re:Why store secret key? by ChadN · · Score: 2

      It has been shown that encryption keys can easily be found in dumps of memory, because their entropy patterns do not match surrounding memory. It helps to produce hashed chunks of memory as decoys, and then embed the key in one of these chunks (obviously, the chunks should have a similar entropy profile as the surrounding decoy memory).

      If these are session keys, this obfuscation can help delay the time it would take to discover the key (by following pointers, etc.). But just storing keys in memory, without obfuscation of some sort, is a no-no.

      Credit cards should, ideally, NEVER be stored online. They should be combined with other necessary information (name, address, etc.), then stored as a hash (just like UNIX does with the secret password file). Any intruder who gets the hashed data won't directly be able to use a credit card.

      BTW, it is also the way Slashdot should have been storing user passwords (except that they want to be able to mail your password to you). For that, they need an offline database, and the encrypted passwords could be loaded into memory with a session key, as above.

      --
      "It's overkill, of course. But you can never have too much overkill." - Anonymous Slashdot Coward
    11. Re:Why store secret key? by snubber1 · · Score: 1

      And how do you propose the billing dept. reverse the one-way hash to process the credit card for an order?

      --
      I don't really mind double posts on //..
    12. Re:Why store secret key? by SquadBoy · · Score: 1

      You my friend have been given and impossible task the only way to secure anything is with money and skill. Best of luck.

      --

      Cypherpunks: Civil Liberty Through Complex Mathematics. Those who live by the sword die by the arrow.
    13. Re:Why store secret key? by ChadN · · Score: 1

      They don't. If they want to store your VISA info on their server (to allow for faster processing by repeat customers), they store it hashed, and check it against the infor that you re-enter each time (say just your card number and expiration date).

      They could use an offline system to do the actual billing, which is keyed on hashed info sent by the server that interacts with customers. But no net reachable computer should be storing the raw credit card info, and hashing can help make this separation easy and still secure.

      --
      "It's overkill, of course. But you can never have too much overkill." - Anonymous Slashdot Coward
    14. Re:Why store secret key? by Anonymous Coward · · Score: 0

      The problem with storing the decryption key in memory is that if any application can access a memory location and read the key, then nothing will prevent a cracker from writing code that does exactly what the legitimate application does. He might even just edit your perl or PHP source and make it write the key to a temp file or print it to the browser.

    15. Re:Why store secret key? by Blorgo · · Score: 1

      You can't win given the situation you describe. Was there only one backdoor installed? Do you know how many SQL 6.5 exploits there are? You have a system that CANNOT be secured without major changes, and a reload of the operating system.

      Either you are intentionally being set up to fail, or your management is even more clueless than usual.

      If I were in your position, I would start writing memos, lots of CYA memos. Make them scary, use the L words like liability, lawsuit, lawyers. Explain how much money will be SAVED by not exposing credit card numbers to some hacker.

      At a minimum, get another web server not running NT, if the blank SA password thing can't be changed.

    16. Re:Why store secret key? by dubl-u · · Score: 2
      And what happens when they compromise the second password? [/obvious] Great idea.

      This is one of the things about talking about security that makes me froth. The implication is that perfect security is unachievable, ergo all imperfect security attempts are somehow dumb.

      This yutz probably has a lock on his house. A smart guy could pick it in under a minute. A beefy guy could just kick down the door. A sneaky guy could probably get in through a window. A smooth guy could pose as a postman and get him to open the door. A brutal guy could kidnap his girlfriend and demand to be let in. Does this mean that locks are useless? That we should forget about them, leaving our houses open?

      In this particular case, I said, "here is a way to make it so that somebody who has rooted your box can't do anything harmful." The scoffing answer of "what happens when they compromise the second password" is so clue-deficient that it is probably a troll, but in case somebody has been fooled by it, reasonable answers are:
      • They're unlikely to get the first password; 99% of breakins involve getting root through insecurities, not through password compromise.
      • And how would that happen? The password is only used during OS maintenance, which should happen rarely on a production server. LIDS itself protects the LIDS binaries from being trapdoored. Use it only from the console to remove a number of network risks.
      • Then do something more! This is all open-source software; if you need SecureID cards, thumbprint scanning, and blood sampling, you can put that in, too.


      Nothing is perfectly secure; the interesting question is how much you can get for a given level of money and inconvenience. LIDS adds quite a bit of security for relatively little inconvenience.
    17. Re:Why store secret key? by anguish+feast · · Score: 1

      the server is NT 4 running SQL 6.5 w/ a blank SA password

      what's your IP? ; )
  10. Combinations of security by Fozz · · Score: 1

    IMO, the best thing you can do to protect sensitive data like this is to put it behind firewalls/proxies in addition to using data encryption. Also, do intrusion detection. Don't assume the security policy you implement is going to be "enough" to prevent anything nasty from happening.

    Make sure encryption keys are either readable only by root and the machine is locked down to make it very, very hard to get root.

    1. Re:Combinations of security by Anonymous Coward · · Score: 0

      That's the attitude I like to hear, as someone trying to get at the data - clueless. Firewalls don't do dick and 9 times out of 10 help penetration because of their own holes. Intrusion detection, by definition, only detects previously known vunerabilities. If there are previously known vunerabilities why don't you just close them? These solutions are the crap NSA pushes so they can continue to roam about corporate americas databases with minimal effort. Don't buy into it.
      Here is a solution they don't want you to know about - double encrypt. You still have the key problem, but the data at rest is much more difficult to 'process' without getting the key (more difficult, still not impossible). As far as key storage goes - using a external device (crypto smart card?) to store the key and generate a 'reconstructed' encryption key is probably the best bet. That way the only key that is exposed is only valid for one row (or field) of data.

  11. avoid the problem by dan_bethe · · Score: 3, Funny
    One way for small businesses to deal with the problem would be to avoid it by using Paypal. They're a reputable financial institution which can broker the exchange for you. You would never know the other party's confidential information. Some small businesses distribute their payroll to independant contractors that way.

    On a related tangent, here's another question. Do you guys have any recommendations for a low end credit card purchase system requiring low or zero startup fee, but rather charging a per-transaction fee?

    1. Re:avoid the problem by reschly · · Score: 2, Informative

      I've never used it myself, so I don't actually have an opinion, but here's what some other people think about paypal. Just incase you haven't heard other people's horror stories already.

      --


      I believe that the existence of women is proof that God loves us and wants us to be happy
    2. Re:avoid the problem by kevcol · · Score: 1

      Oh, so tell me what PayPal's methods of keeping my data private is.

    3. Re:avoid the problem by Anonymous Coward · · Score: 0

      I signed up with http://www.merchantwarehouse.com

      I got set up for about 350.00, $10 per month, 0.30 transaction fee

    4. Re:avoid the problem by morcego · · Score: 2, Interesting

      Paypal ? Reputable ?
      Surely, you must be kidding.

      --
      morcego
    5. Re:avoid the problem by tetranz · · Score: 1

      I haven't used any myself but I've heard reasonably good reports about 2checkout.com and revecom.com

    6. Re:avoid the problem by mosch · · Score: 2
      do not use paypal. they're not a "real" bank, they're accountable to nobody but themselves. They declare accounts as being potentially used in fraud with no evidence (this happened to me) and lock all the funds in the account unless I was willing to provide them a full, uncensored copy of a credit card statement, which no real bank would ever ask for.

      They don't have a customer service phone number.

      They don't have a customer service email address.

      They don't have any customer service at all, except a web form which gets answered in about 3 days, with an unhelpful answer.

      Use c2it or some other service where your money is FDIC insured, treated according to standard federal banking regulations, you can talk to people if you have a problem, and they don't randomly freeze accounts. Additionally, c2it doesn't seem to have any fees for most transactions, so you don't even have to pay the 1% paypal tax.

    7. Re:avoid the problem by Anonymous Coward · · Score: 0

      Paypal. They're a reputable
      *snort*
      financial institution
      LOL
      Some small businesses distribute their payroll to independant contractors that way.
      I think I'd prefer to be paid in week-old hamburger meat. It's probably safer.

    8. Re:avoid the problem by gmack · · Score: 2

      Reputable??? PAYPAL?

      I think not.. they just froze our business' account and the money contained in it because my boss' last name is Cuban... Never mind that he lives in Canada with resident status.

      Many of the buisnesses we deal with have similar horror stories of paypal freezing money for months with no explanation. The worst case being $750 000 frozen for 8 months of a large processing company.

    9. Re:avoid the problem by Tadghe · · Score: 2

      > One way for small businesses to deal with the problem would be to avoid it by using Paypal. They're a reputable financial institution

      Tell me, what color is sky in your world?
      Or Let me ask it like This...
      What Color Is The Sky In Your World?

      --
      Bugs Bunny was right.
    10. Re:avoid the problem by Anonymous Coward · · Score: 0

      Considering how many transactions PayPal process, there is bound to be a lot of complaints, but that does not mean that PayPal is useless. The main thing to remember is to dedicate a special bank account for use with them, since they have a 'Freeze Account First' and 'Ask Questions Later' policy regarding fraud and that is not entirely a Bad Thing (TM)...

    11. Re:avoid the problem by ahde · · Score: 2

      I thought the funniest part was "institution."

    12. Re:avoid the problem by Anonymous Coward · · Score: 0
      they just froze our business' account and the money contained in it because my boss' last name is Cuban...
      No way! The guy that owns the Dallas Mavericks?? He's got hella money!
    13. Re:avoid the problem by DreamerFi · · Score: 2

      Do you guys have any recommendations for a low end credit card purchase system requiring low or zero startup fee, but rather charging a per-transaction fee

      I use kagi.com.

      -John

    14. Re:avoid the problem by aardwulf · · Score: 1

      Never ^ 1024 EVER use Paypal to make any transactions. They lie about their security. They claim that they keep their passwords and information on seperate machines that are detached from the Internet, yet my strong password protected account was hacked and almost $2000 was stolen from me. Luckily, I know what I am doing, and tracked down the vendor that they were purchasing from, got their phone #, and called them before they shipped, and THEY refunded my money. If you absolutely have to use Paypal to receive transactions, I would suggest opening a checking account, get no overdraft protection on it, and keep only the minimum amount required in the account. Then as soon as you receive the transaction, move the money from that account to your real account, leaving the minimum amount in. THIS is the only secure way you can protect your money.

      Enjoy

    15. Re:avoid the problem by mOdQuArK! · · Score: 2
      Do you guys have any recommendations for a low end credit card purchase system requiring low or zero startup fee, but rather charging a per-transaction fee?

      Costco provides credit-card processing services on a per-transaction fee basis, but I don't know how cost-effective they are relative to other credit-card processing merchants.

  12. key storage by Anonymous Coward · · Score: 5, Insightful

    Ive ran across this problem myself several times.
    According to VISA rules, the merchant is NOT allowed to store the cardnumber - its the property of VISA.

    To get around this, I dont store the card. I store its SHA1 hash signature. This is great because you're guaranteed to get a match on the card's record - but you dont have to store the cardnumber itself. This also enables great negative database checking without liability to the merchant. You've got the sig - thats all you need.

    The key storage you're referring to is an old problem. The key is never secure as long as it's in software (software can be cracked, reversed,
    analyzed...I dont need to explain this). The only secure way is to store it in hardware somewhere.

    1. Re:key storage by RetroGeek · · Score: 1

      I store its SHA1 hash signature. This is great because you're guaranteed to get a match on the card's record - but you dont have to store the cardnumber itself.

      Except when you get a hash key collision. Hash tables solve this by actually storing the value in a vector off the key entry.

      You cannot do this as you only store the hash value.

      --

      - - - - - - - - - - -
      I am a programmer. I am paid to produce syntax not grammar. Deal with it.
    2. Re:key storage by Hard_Code · · Score: 2

      "I store its SHA1 hash signature."

      So how do you regenerate the card number from the hash for billing?

      --

      It's 10 PM. Do you know if you're un-American?
    3. Re:key storage by Anonymous Coward · · Score: 0

      True. However, when you consider the number of
      transactions stored in an average merchant's database(maybe 500-600 a month, I just work with small merchants) the probability of a hash collision is vanishingly small.

      However, if this particular problem ever rears its ugly head, it would be simple to store the last 3-4 digits of the card for an exact match.

    4. Re:key storage by bcrowell · · Score: 2

      This technique means that the user has to type in the card number for every transaction. Why not just encrypt the card number using the user's password as the key? The user's password doesn't have to be stored anywhere except in the user's brain cells.

    5. Re:key storage by Anonymous Coward · · Score: 0

      You don't. If you need this for rebilling then you'd be better off with key-based encryption like
      DES or IDEA.

    6. Re:key storage by PunchMonkey · · Score: 2, Interesting

      According to VISA rules, the merchant is NOT allowed to store the cardnumber - its the property of VISA.

      Can you point out the source of this? I'm not trying to argue it, I'd just like to know as this strikes me as somewhat odd.

      The convenience/computer stores I've worked at in the past have all had credit card numbers printed right on the receipt, which in turn are stored away in secure filing cabinets, etc.

      --
      I'll have something intelligent to add one of these days...
    7. Re:key storage by RelliK · · Score: 2

      But you need to decrypt the key to bill someone. You need the number 1234-1234-1234-1234 to bill, not abracadabra. One-way hashing works great for password precisely because you never need to decrypt them so you don't need to store the key. However, one-way encryption is not appropriate for stuff that you actually want to decrypt.

      --
      ___
      If you think big enough, you'll never have to do it.
    8. Re:key storage by Anonymous Coward · · Score: 0

      Let me clarify. The merchant cannot store the number long-term. They keep the receipts for 6 months - thats the length of time a cardholder is allowed to dispute a card present transaction with a signature. However, merchants are required to destroy receipts after the six months have passed.

      Internet and card not present transactions are different, and can be charged back anytime you like (even after a year - I know because its happened to me once or twice - the thieving jerk.)
      I can't point out the specific source but its something I've heard from the VISA people every time they show up - try looking up the VISA guidelines for Internet Merchants - http://www.visa.com/

    9. Re:key storage by fscking_coward_2001 · · Score: 1

      According to VISA CISP manual v5.5, "CVV2 and magnetic stripe data may not be stored subsequent to autorization of a transaction." The CISP has other guidlines for storage of cardholder information, but the only prohibition I could find was this one. I realize that the account number is one of the fields in the stripe data, but I don't see any CISP prohibition on storing the account number and expiration date.

    10. Re:key storage by Anonymous Coward · · Score: 0
      According to VISA rules, the merchant is NOT allowed to store the cardnumber - its the property of VISA.

      To get around this, I dont store the card. I store its SHA1 hash signature. This is great because you're guaranteed to get a match on the card's record - but you dont have to store the cardnumber itself.

      Note that you can recover all the card numbers by brute force search. Credit card numbers have somewhere between 36 and 47 bits of entropy. An attacker can compute an offline dictionary of card numbers (requiring at most 2^47 effort and 2^47 bits of storage or some time/space tradeoff).

      You can use salt to defeat a dictionary attack, but this still gives a cost per card number of at most 2^47 which is not really high enough.

      The only way to defeat this is to do a keyed hash using HMAC for example, but then you are right back where you started. This also enables great negative database checking without liability to the merchant. You've got the sig - thats all you need. Make sure you log large numbers of failures and do something about it, otherwise people can use this to brute force validate card numbers.

    11. Re:key storage by Anonymous Coward · · Score: 0

      just store the SHA-1 and MD5 of the CC. I doubt it's possible(or if it is, immensely more rare) to get a collision on both.

    12. Re:key storage by Fastolfe · · Score: 1

      One way around this is to supplement the hash with, say, the last 4 digits of the card number. These can be used as a confidential label and could be made available to service reps looking at the account so they can verify with the customer that the card number is the one they're talking about. Otherwise we have to ask them what their card number is and generate a hash for comparison.

    13. Re:key storage by Anonymous Coward · · Score: 1, Interesting

      Sorry to burst your bubble, but there are few enough possible credit card numbers that there is no pair of CC numbers that have the same SHA-1 hash (theoretically you'd need 2^80 to make SHA-1 collide like that - practically the limit appears to be about an eighth of that, around 2^77 or so, but that's just about where the graph was headed - I wasn't about to let it run all the way to the end to know for sure).

      Collision resistance is a laudable thing in a hash, but there's a drawback; because there are far fewer apparently-valid CC numbers than required to even come close to colliding the hash, this means that there is a perfect reverse mapping of SHA-1 hash back to credit card number.

      Furthermore, it's not only possible, but practical with a big machine and a nice big storage cluster, to actually construct this lookup table. I did it six months ago for experimental proof, curious to see whether any collisions did in fact occur (none did). And once you've got that table, you could convert a table of CC number hashes back to valid CC numbers. Fortunately for you, (1) I'm not a credit card fraudster, and (2) I don't 0wn your servers.

      The hard task of actually constructing the table might help keep the script kiddies away, but are they necessarily the only threat model you have to worry about? That's something only you can decide, based on your profile and the importance of the data you carry.

      Don't try and solve this problem by using a bad hash, as collisions are also a bad thing in this case - you might validate a number as being stolen (you said negative db checking, right?) which, in fact, was genuine - really pissing off a customer. (Said customer would probably get quite frustrated with their credit card if the exact same technique was widespread, but that isn't the point, that's one less real customer...) So deliberately using a bad hash is also a bad idea.

      Oh, and for what it's worth, keys stored in "secure chip" hardware can also be cracked, reversed, analysed, whatever. It just depends on whether you can get access to it, and how little you mind spilling concentrated nitric acid on expensive lab equipment, heh. I've tried a couple of those myself, although in my case I couldn't actually manage it even with the right equipment (I guess I was having a bad day). Others are considerably more skilled than myself in this field. Hardware solutions are not a panacea, believe me, but getting the actual key off one without physical access would be an impressive feat. Worth considering, if you like your cake with icing.

      My advice would definitely, and always, be this: Just don't store credit card numbers. Anywhere.

      The co-host idea mentioned elsewhere in the comments may also be a reasonable compromise for you, if you really HAVE to store the CC numbers, but I strongly advise against doing so! Why do you need to? Is there another way you could do it? Isn't the user needing to reenter details to reauthorise transactions more of a feature than a bug?

      If you store CC numbers anywhere, in any form, for any reason, at all, you might be breaching your contracts with the CC companies; if your contracts allow this, storage should definitely be a point to mention in the privacy policy. The safe bet really is not to store at all.

      That way, really, the worst case scenario is that your server gets cracked in a way you don't notice, and trojanned in a way that grabs and retransmits the numbers as they pass; and if you do your job with any kind of competence, you'll notice that quickly and take the servers offline before any actual numbers pass through it.

      Good luck.

    14. Re:key storage by BlueWonder · · Score: 2

      There are 10^16 = 10000000000000000 possible credit card numbers, and there are 2^160 = 1461501637330902918203684832716283019655932542976 possible SHA1 hash values. Therefore, the probability for a collision is so exceedingly small that it can be totally ignored.

    15. Re:key storage by tzanger · · Score: 2

      Isn't the user needing to reenter details to reauthorise transactions more of a feature than a bug?

      Not with the general public. "XYZ Co. doesn't make me have to reenter all this credit number stuff like you do and I've never had my number stolen with them!" Convenience is the game.

      ISTR that if you have proven that you took reasonable measures (co-host) to protect the credit card data and you were still 0wned and had it stolen that that would be enough to deflect loss of merchant status / lawsuits, although IANAL and I've never been in that position.

    16. Re:key storage by G-funk · · Score: 2

      Why not just encrypt the card number using the user's password as the key? The user's password doesn't have to be stored anywhere except in the user's brain cells

      Because:
      a) users are dumb, making brute-force attacks easy
      b) it's very easy to discard a lot of incorrect cc details

      --
      Send lawyers, guns, and money!
    17. Re:key storage by Jeppe+Salvesen · · Score: 1

      But that would put in violation of rules that you're not allowed to store cardnumbers.

      --

      Stop the brainwash

    18. Re:key storage by Frogg · · Score: 1

      Assymetric encryption (public key) can be ok in these situations, like the previous guy suggests. It all depends on the clearing house in question and the exact implementation details (ie: don't store the 'decrypt' key on the web server, the merchant should keep this offline).

      That aside, there are two other methods sometimes offered, which are less error prone as they do not require the merchant to store the cc details anywhere.

      (a) some cc clearing houses allow a merchant to set up a recurring charge on a card at the time of initial payment.

      (b) some clearing houses allow a merchant to repeat a previous charge/transaction, the merchant simply provides a reference/id of the transaction to repeat.

      hth

    19. Re:key storage by ClickNMix · · Score: 1

      The user's password doesn't have to be stored anywhere except in the user's brain cells.

      Sadly, in the real world of non technical people, thats not true.

      Not having a programming job currently, and having bills to pay I have been force at one time to do a dull as they come cleaning job for a day.

      In about 3 hours I had with no real effort noticed around the place about 8 or more different passwords (Some were vaugly hidden most were stuck to the monitor on postit notes labled: Name: blah, Password: xyzzy)

      And I wasnt really looking, just glancing about trying not to be totally bored out of my mind and happened to notice one, then another. And I have to point out I never -used- any. Nor did I touch or move anything to see them. Each one was in plain sight.

      That said, since no one locked their systems when they got up, it didnt make to much difference anyway.

      But the point is, no matter how many times its said, its never more true users doing stupid things like writing down passwords is a massive problem.

      --
      I saw the light at the end of the tunnel... But it was just someone with a flashlight bringing more work.
    20. Re:key storage by kentborg · · Score: 1

      Good point about the possibility of a complete CC# hash lookup table. (It reminds us that security is hard.)

      Couldn't this problem be solved by the old Unix "salt" trick? That would be:

      For each credit card number to be hashed, pick a high quality random number (the salt), concatenate it with the CC number, hash the whole thing, store the resulting hash and the random number, toss the credit card number.

      To verify, do almost the same thing again: concatenate the purported credit card number with the stored salt, hash it, and compare with the stored hash.

      Now your hash dictionary can't have a complete CC hash lookup for all such hashes, but only for all hashes that use the same salt as the card you are after. Make the salt a big as the resulting hash to assure the cracking is no easier than the security of your hash. Hell, the random number (probably?) doesn't even need to be high quality, just so you use a lot of different ones.

      -kb

    21. Re:key storage by bcrowell · · Score: 1

      I hate racists. So sue me.

    22. Re:key storage by Anonymous Coward · · Score: 0

      And? If you hate me for what I believe then you're the same as I am.

  13. Is there real safety? by colmore · · Score: 3, Interesting

    I find it disturbing how companies seem to be rushing into Passport like systems that keep a large number of credit card #s and other sensitive data in a central repository, when no such system has ever shown to be reliable enough to justify the risk.

    Frankly, I'd prefer to just keep typing in my credit card number, or have the info stored on my computer for my convenience. I don't like the idea of my personal data being permanently stored in a potentially insecure remote location.

    --
    In Capitalist America, bank robs you!
    1. Re:Is there real safety? by Osty · · Score: 1

      find it disturbing how companies seem to be rushing into Passport like systems that keep a large number of credit card #s and other sensitive data in a central repository, ...

      Passport is not such a system. Passport is simply a centralized authorization mechanism (you give passport an e-mail address and a password, passport gives a numerical ID to the member site or app from which you're logging in). Passport Wallet, on the other hand, is such a system, but don't let the "Passport" in its name fool you -- it's a completely separate service. You may feel Passport Wallet is a bad idea, and that's fine, but to dismiss Passport as a good or useful service because you don't like Passport Wallet is wrong.

    2. Re:Is there real safety? by Anonymous Coward · · Score: 0

      Fuck all Microsoft.

      passport (noun) - a formal document issued by an authorized official of a country to one of its citizens that is usually necessary for exit from and reentry into the country, that allows the citizen to travel in a foreign country in accordance with visa requirements, and that requests protection for the citizen while abroad

    3. Re:Is there real safety? by GeckoX · · Score: 1

      You'd be right if you weren't so wrong.
      How do you think you access your Passport Wallet?

      ...3 guesses, first 2 don't count!

      --
      No Comment.
    4. Re:Is there real safety? by Osty · · Score: 1

      And you just missed my point. Here it is again, this time in plain language so that you don't have to read between the lines or do any other form of thinking: Passport Wallet is not Passport. Meaning, you can very well have a Passport account (I have several) without EVER having a Passport Wallet account. Two separate, distinct services with the only related factor being that Passport Wallet uses Passport's authentication services (as do many other services). You villify Passport because of a partner that simply uses Passport's authentication. It doesn't matter that Passport Wallet uses Passport. It matters that Passport does not require the usage of Passport Wallet.

    5. Re:Is there real safety? by ahde · · Score: 2

      Internet Explorer is not Windows

    6. Re:Is there real safety? by Osty · · Score: 1

      Red herring. Until and unless Microsoft makes Passport Wallet an integral part of Passport itself, to the point where you have to actually put your information into a Passport Wallet in order to get a Passport account, the two scenarios are completely different.

    7. Re:Is there real safety? by Anonymous Coward · · Score: 0

      The problem with Passport is one that's potentially far more serious than just CC# theft. If someone cracks your Passport acct, or, more likely, someone cracks a central repository for the Passport service, they have access to every single service you authenticate with Passport. This may or may not include passport wallet.

    8. Re:Is there real safety? by Anonymous Coward · · Score: 0

      My confidential informants tell me that Passport Wallet's days are numbered. Even the mighty MS is powerless when it comes to public opinion.

  14. So, don't store the key by Breakerofthings · · Score: 2, Interesting

    Require the key on startup (of some daemon, probably the Web Server ... add a command line option to apachectl, for example). The key is held in process memory for the processes that need it, not on disk (except maybe in swap). OK, so it's not perfect, but it's better than keeping the key on disk ... you have to admit it would be *hard* to get the key this way. As a bonus, no process started by an intruder would know the key either, even a web server instance ...

    1. Re:So, don't store the key by Yottabyte84 · · Score: 2
      Wanna encrypt you swap in linux? It's really easy....

      dd if=/dev/urandom bs=1 count=64|losetup -e AES128 -p 0 /dev/loop4 /.swap &&
      mkswap /.swap &&
      swapon /.swap


      Stick this in your boot script after creating an empty /.swap of the size you need. It'll create an encrypted swapfile with a random password.

  15. Re:your first problem by Anonymous Coward · · Score: 0

    I don't think this person is trying to be a troll. In this day and age, nobody can really believe that win2k and/or closed source is secure, so this person is actually trying to be funny.
    who owns less than 50% of the web servers and account for about 99% of all broken into web sites and stolen credit cards? windows

  16. Protect the machine by photon317 · · Score: 2


    The bottom line is, if you're in the scenario where the data is stored on a single box and is both encrypted and decrypted on that box, and a key is stored there in some (secure) fashion - no matter what, if the box is rooted, the data will be taken.

    The solution is to adequately protect the machine from being rooted in the first place, rather than jump through hoops trying to keep root from being able to get the data.

    Start by firewalling the machine well. I would recommend OpenBSD if your traffic volume is slow enough for it to handle (no SMP, so it is kinda limited in that respect if you've got big demands).

    Lock down the applications - know every port that's open, what protocol is spoken, what daemon is listening, etc... Do some testing of your own - if you can crash any of the box's services by sending random and/or long string of junk to any of the listening ports, you have a security problem.

    --
    11*43+456^2
    1. Re:Protect the machine by Anonymous Coward · · Score: 0

      Good points all around, but I think that a nice Open box can easily handle the type of traffic destined for a firewall. Quite easily in fact, a modest Linux box running Checkpoint FW-1 can handle a 100Mbit pipe and I am sure Open BSD can hang with Linux in that regard.

    2. Re:Protect the machine by Thurn+und+Taxis · · Score: 1

      no matter what, if the box is rooted, the data will be taken. Well, you could set root's shell to /bin/false, which would make it significantly more difficult (although still not impossible) for a remote user to do anything dangerous after rooting your machine. Of course, you'd have to boot your server from a floppy every time you wanted to do maintenance.... Honestly, though, the right thing to do is to store the sensitive info in write-only memory.

      --
      On stereophonic equipment, the monaural sound obtained through multiple channels will enhance your listening pleasure.
  17. Secure co-host. by vkg · · Score: 5, Insightful

    You answered your own question: you don't put the decryption key on the same box.

    You put it on another box, close all of the ports, and have a simple protocol running over something low-level which you trust like SCP or a PERL socket reader.

    Your "co-host" stores the secret key, and does all decryption: the main host passes it a datum to decrypt, the co-host decrypts it, and passes back the cleartext.

    The key never leaves the box, and the co-host should erase it's copy of the key and shutdown on any unexpected network activity (like an attempt to log-in). If you're really paranoid, have it also look for patterns in the access and die if anything unexpected show up - or return bogus, flagged test data (i.e. a list of bogus credit card numbers in stead of real ones).

    Does that answer your question?

    1. Re:Secure co-host. by vkg · · Score: 3, Insightful

      I forgot to mention: the co-host is *not* internet routable: put a second NIC in the web host, and hide the co-host behind that. Anything touching the co-host other than a decrypt request should trigger a shut-down: John Q. Hacker roots your web server & database, sees requests going to the co-host, pokes it a bit to see what it is and in the process shuts the box down cold.

      Not perfect security, but done right unlikely to be the weakest link: a determined hacker will root your web server and simply copy all of the credit card numbers as they are used, by backdooring your e-commerce application.

      But at least that's a trickle: you lose numbers to him as they are used, rather than your whole database at once. Read Bruce Schnier's stuff about all security being target hardening.....

    2. Re:Secure co-host. by GigsVT · · Score: 3, Funny

      The key never leaves the box, and the co-host should erase it's copy of the key and shutdown on any unexpected network activity (like an attempt to log-in).

      Worker 1: Holy shit Bob, the web site is down again!

      Worker 2: Yeah, every time someone enters a bad card number or tries to log into our security box, we lose thousands of dollars, but at least our customer's data is secure!

      --
      I've had enough abrasive sigs. Kittens are cute and fuzzy.
    3. Re:Secure co-host. by GrenDel+Fuego · · Score: 2, Insightful

      The key never leaves the box, and the co-host should erase it's copy of the key and shutdown on any unexpected network activity (like an attempt to log-in).

      You'll obviously want to keep a copy of the encryption key stored somewhere secure besides the machine. Otherwise an attempted hack will quickly make all of your data useless.

    4. Re:Secure co-host. by dborod · · Score: 1

      You put it on another box, close all of the ports, and have a simple protocol running over something low-level which you trust like SCP or a PERL socket reader.

      Better yet, use a couple of serial ports between the web server and the credit card storage server (in other words the CC server has no network connection).

      Treat the CC server as a black box. CC numbers go in one serial port (with the TX pin snipped on one end of the cable for extra piece of mind). CC numbers come out the other serial port.

      You'll need to code up some custom software, but basically this is a fairly secure system provided there is physcial security on the box itself.

    5. Re:Secure co-host. by Time_Ngler · · Score: 2, Insightful

      But if you can simply ask the "protected box" to decode the data over your "trusted low level protocol", why not just ask it to decode everything?

    6. Re:Secure co-host. by Anonymous Coward · · Score: 1, Interesting

      close but having a NIC in there is a recipe for disaster (you never know what security holes might surface in your OS in the future).

      if you connect the 'secure' box to your front box with a serial cable you are safer, since you *know* that the only data in/out goes on your serial cable to your back-end daemon.

      The daemon itself (trigger-sensitive to exploit attempts as you outlined) uses your own protocol talking over the serial port, and off you go. If your daemon is not exploitable (and making it trigger-sensitive helps as well), you are sure that short of physically accessing the 'hard' box nothing else can really touch it.

      Ideally the cc numbers never leave the hard box and on the serial cable you just pass digests etc., how to do that in your case is left as an exercise for the reader ;)

    7. Re:Secure co-host. by Oestergaard · · Score: 4, Insightful

      So let me get this straight: You set up an "oracle" (a machine which you can ask to decrypt data and which will do so when asked). Your "security" lies in your "low-level" protocol (for which you obviously have communications code on the front-end machine).

      Where's the security in that ?

      Let's say I r00ted your front-end machine. Why don't I just look at your script or your binary and see that it sends the request over SCP. Or over a PERL socket reader.

      You have added a very tiny amount of obscurity, but nothing that resembles security. Your "oracle" has no way of knowing who's asking, if you built the assumption into the system that "anyone who can ask must be in their good right to know".

      Even if it's on a private network on another NIC, this doesn't help one bit. I r00ted your front end machine, remember - if the front end machine can talk to the oracle, so can I, when I'm root on the front end.

      You may be able to add a little security resemblence with your "anomaly detection". However, it is quite likely that I am smart enough to just see how valid requests are built, before I try my own requests at the oracle.

    8. Re:Secure co-host. by bdamike · · Score: 1

      For the super paranoid; Use a USB drive to store the key and utilities you need to decrypt and view the data. Plug the little feller it into the box and you're in business. When finished connect the key drive up to a safe box (i.e. one not on a network) that automatically performs md5 checksums of key drive content to assure no hidden cargo :), then lock it up in a firesafe. This provides a tangable physical key to the data, but might be over the top for most.

    9. Re:Secure co-host. by Anonymous Coward · · Score: 0
      You answered your own question: you don't put the decryption key on the same box.
      Good.
      You put it on another box, close all of the ports, and have a simple protocol running over something low-level which you trust like SCP or a PERL socket reader.

      Bad. This does not solve the problem. Using scp ends up requiring some kind of key anyway, which will be on the current host. Assume the main system is compromised. Now you have replaced a call to an encrypted database locally with a call to an encrypted database remotely. An attacker still has cleartext at the end of the call, though.

      What you should do is assume that the Internet is insecure. Acknowledge that you can only perform due dilligence in protecting data attached to the Internet. If it is important, take it off the Internet. A better method for this "co-host" would be to send the sensitive data to it for processing and not have a return path. That is, a simple socket connection that is write-only and secure all other ports (honeypot them if you want to be fancy).

      With the "co-host" in place your legitimate business people can process the sensitive data however they want without having it overly exposed to the Internet. When they are done, they can delete it (secure deletion of sensitive data in a timely fashion is an important part of security).

      The short-coming of this idea is if you have a need to redisplay the information across the Internet. Such an operation is innately insecure, though, and may warrant a fundamental rethinking of the model. Still HTTPS makes it possible. In this case, you may want to consider a proxy back to the "co-host" machine. This of course opens another vulnerability to attack, but it is still harder to get to. The co-host itself should not be visible on the Internet, but connected to the main server.

      Both should be firewalled by external hardware and internal software (for that extra layer of protection) and niether should be considered completely trusted. Turn on as much auditing as possible and ship that to another internal system. Keep those records. Be prepared to provide them to law enforcement should the need arise.

      Extensive logs are tought to wade through (easily 100k per week under modest load). Maybe some scripts could help look for unusualy activity like prot scans (which are now more dificult to detect as they may take place over several days). At least the audit trail will tell you what was compromised and allow your company to take appropriate steps based upon that.

    10. Re:Secure co-host. by tzanger · · Score: 2

      Where's the security in that ?

      I hope you're trolling, because your question is unbelievably dense. You don't put the security on the live machine, you do it on the protected box. You're not out to eliminate credit card theft, but rather to limit it greatly. Who cares if you can get 1 or 10 or 100 card numbers? It's the "hax0r steals 10k card numbers from insecure site!" headlines you're trying to avoid, and that's exactly what this system will help prevent. It slows down the rate of card numbers you can get and anything excessive is easily alarmed.

      Thieves don't often go for difficult targets, they want the fast big payoff. This system prevents that, although I think they're being excessive with the serial ports with snipped leads. Two NICs in the live host and one in the protected system going through a VLAN-capable switch or a router with the bandwidth on the connection set to 8kbps or something is just as good, IMO.

    11. Re:Secure co-host. by buffy · · Score: 3, Interesting
      The key never leaves the box, and the co-host should erase it's copy of the key and shutdown on any unexpected network activity (like an attempt to log-in). If you're really paranoid, have it also look for patterns in the access and die if anything unexpected show up - or return bogus, flagged test data (i.e. a list of bogus credit card numbers in stead of real ones).

      That's an OK idea in a theoretical sense, but not from a practical commerical view point. Most applications have a requirement to fail gracefully, and just having your data handler die kind-of sucks from an administrative point of view.

      Instead, perhaps a better solution would be to provide a selective lockout mechanism which would block accesses to certain bits of information (those that were trying to be cracked) or access to/from certain clients (a specific web session in the PHP sense of the word.)

      Having your entire app die would be the same as if someone (you, in this case) DOS'ed your site. If I was your client, and that was your solution, I'd be hard pressed not to move my business elsewhere.

      -buffy

  18. Re:The Best Policy by nam37 · · Score: 2, Insightful

    You ARE kidding right??? Data collection is a needed component to all business (e- or otherwise). Welcome to the 19th century. Neil

    --
    The two rules for success are:
    1) Never tell them everything you know.
  19. Re:Testes, testes, 1,2...3? by colmore · · Score: 2

    oooh, nice troll.

    you should put that in tags to preserve the width though.

    --
    In Capitalist America, bank robs you!
  20. Re:your first problem by Anonymous Coward · · Score: 0

    ah yes and crypto algorithm's are always closed source.. Have to love the closed source is secure argument..

  21. I'm not sure I understand the question... by edashofy · · Score: 2
    The poster said:

    The thing that makes me nervous is the secret key being stored on the machine that houses the database. The reason for this is so that our billing staff can handle the recurring billing. (They have a web interface where they must enter the passphrase to gain access to the credit card information.)

    I'm not sure I understand the question. Why is the secret key stored on the machine? Is it stored in cleartext? If it is, that's a problem. The trick here would be to encrypt the secret key on the machine using the billing staff's password (or a hash thereof), and only decrypt the key when the password is entered. If you change the billing folks' password, you can re-encrypt the secret key with the new password. That way, you'd at least have to run a brute-force on the password (which may not be that hard, depending on how you pick passwords). An alternative is to use a more secure mechanism than passwords for authentication--something like a keyring dongle or somesuch, but that makes things more complicated.

  22. Old problem. by AftanGustur · · Score: 5, Informative


    A commonly used solution in high-security environment is to isolate the database machine from the network. I.e no network card. You then connect the database machine to the data processing machine via either a serial cable, parallel cable or similer that doesn't have a network stack on top of the driver.

    You then have to create a client/server/queue manager on both ends.
    Your security problem is now reduced to the functionality of the client/server that talks over the cable and performs requests on the database.
    (Assuming of course that you can control access to the console)

    A bit of effort, but it works.

    --
    echo '[q]sa[ln0=aln80~Psnlbx]16isb572CCB9AE9DB03273snlbxq' |dc
    1. Re:Old problem. by stilwebm · · Score: 2

      The problem with this is speed. A serial or parallel interface (unless USB or FireWire) will be much slower than a 10Mbps and slower still than 100Mbps ethernet connection. But you can easily and securely set up a nonroutable network between your database and application server(s). A simple crossover between a single db and single application server, each with a separate NIC for this network, works well. The hardware is just as secure as a serial link, but fast enough for realtime processing or high speed batch processing. The same applies to kernel level security. Use an isolated switch (or VLANs if budget is a concern) to connect multiple computers on this "off net" backend connection. It is just as easy [hard] to sniff this ethernet connection as a parallel or serial connection - you have to have physical access to the hardware or kernel level access to the system's memory. Still, you can encrypt all connections across this network to add additional security.

    2. Re:Old problem. by RelliK · · Score: 2

      Yeah, let's transfer megabytes of data over a searial cable. Sure, that'll work!

      --
      ___
      If you think big enough, you'll never have to do it.
    3. Re:Old problem. by Oestergaard · · Score: 2

      So you don't use a standard network stack. Instead, you create a communications library and use that in your applications.

      How is that different from just using the network stack ?

      Granted, it adds a tiny amount of obscurity. But your apps on the front-end will still be using your comms. library, and if I r00t your front-end, I will still be able to talk to the "secure" machine (using your neatly written comms library).

      Fundamentally, you change nothing. You add a tiny layer of obscurity, but that's it.

    4. Re:Old problem. by tzanger · · Score: 2

      Yeah, let's transfer megabytes of data over a searial cable. Sure, that'll work!

      Where are you transfering that amount of data? I would see maybe 100 bytes to 500 bytes for a single request or answer.

      So let's use easy numbers: 1k per transaction. at 115200 baud that is 11 transactions per second, assuming 10 bits per character (8 data + 1 start and stop bit). The database shouldn't be a bottleneck there but serial cards these days can do 512kbaud easily (51 transactions/sec). Remember this is at 1k per transaction. A more realistic number would be around 200 bytes per transaction -- including packet framing and checksumming -- at which point 115kbaud gets you 57 transactions/sec and 512kbaud hits ~260 transactions/sec. If you've got requests for numbers exceeding that I think you can probably afford bigger and badder security hardware.

      Hell, sync serial ports can do T1 speeds and faster without breaking a sweat. With a pair of v.35 cards your systems can now handle 1280 1k transactions/sec, or ~6550 transactions/sec for 200 byte transactions. (Remember that v.35 can do 10MBps at 90m cable lengths.)

      Christ the ideas people write off without a shred of thought...

  23. Re:FP for ... by Anonymous Coward · · Score: 0

    get a job homo

  24. Try using PHP/GTK launch app on billing computer by Shishak · · Score: 1

    Store the private keys on a CD, make multiple copies put one in a safety deposit box. Write a PHP/TK or Perl/TK or Python/TK script that can run on a windows machine. Make the web based billing interface download the script which IE on the desktop will run using the local perl/php/python interpreter. That app can access the database and the CD for the keys. Remove the CD when not performing billing.

    --
    Now I hope and pray that I will But today I am still, just a bill
  25. Hmm by IMarvinTPA · · Score: 1

    For each user that needs the pass phrase, use their password (or some password related token) as a key and store that version of the pass phrase with their user. Then, when that user logs in, you can decode the pass phrase with their password and when they change their password, update the encoded pass key.

    That's your best bet (with my limited knowledge of security). And add in some obscurity and call the field something like GUID or something.

    Could you move their job to another server and share the data through the network?

    Good luck,
    IMarvinTPA

  26. I have the answer! by Ribo99 · · Score: 2, Funny

    How would you securely store your customer's private information, especially when it comes to critical pieces like credit card numbers?

    On my Palm Pilot.

    --
    I wear pants.
  27. Learn from the past by L.+VeGas · · Score: 3, Funny

    I would consider storing the numbers in Navajo. It worked in WWII.

  28. Multiple Key segments by Anonymous Coward · · Score: 0

    The big boys use a system that requires multiple key segment holders to type in their part of the key order to get the system running. I.e. there isn't one person that knows that whole key and a number of the people who hold part of the key (pass phase in this case) need to be present in order to restart the crypto services.

    It can be a tall order for smaller companies or companies where security and encryption aren't core competencies (read, it is hard to convince people that they should sign up for system that might require them to get up in the middle of the night just to keep "customer" data secure).

  29. Human interaction by Hygelac · · Score: 1

    The only way I know to do this is to have the application prompt for the passphrase at startup. This stores the passphrase in memory and not on your harddrive. You could even encrypt the in-memory passphrase in case some uber geek cares to hack your memory.

    --
    -- Grow up and use mutt.
  30. What the Big Boys do... by Frobnicator · · Score: 5, Insightful

    Many big groups don't emply the level of security you already have. Most bank 'security' is password protection and physical access protection. When break-ins happen they are not published; banks and credit unions are broken into quite often, and they pay to keep it out of the news. The unfortunate truth is that for big companies, it is cheaper to pay for damage from break-ins than it is to get good security to begin with. With the level of security you already have, look into business insurance. Tell them the precautions you have already taken and ask what would get you a better rate. (You would probably be a good risk for Insurance.) Implement those things, and have the insurer audit you in advance to make sure everything is up to snuff.

    --
    //TODO: Think of witty sig statement
    1. Re:What the Big Boys do... by swb · · Score: 5, Insightful

      The unfortunate truth is that for big companies, it is cheaper to pay for damage from break-ins than it is to get good security to begin with.

      This is the lesson lost on the Slashdot crowd.

      Perfect security is impossible, good enough security is possible. Aim for good enough -- if you aim for perfect you will never achieve it and waste a lot of money trying.

    2. Re:What the Big Boys do... by alouts · · Score: 1
      You're absolutely right. I said basically the same thing in a post above, but it's almost scary how much "the big boys" take a different approach to the problem.

      For them, it's a business risk, with business consequences, and it has a number of business-related solutions. Only one of those solutions is a technological way of securing the data where it resides. The others run the gamut from simply hardening the machine and the network but ignoring the data storage, to just accepting the risk all the way around and acknowledging/paying for the damage when it happens.

      In essence, that's all insurance is - a way of paying to shift the risk to another willing party who will cover you when and if things happen instead of you paying for those things yourself. As much as my inner geek cringes when I see these kinds of things unsecured, I can't usually argue with them from a business point of view.

      When it comes down to money (as all business does), sometimes more security is not the right decision.

      (cringe, I can't believe I just said that)

    3. Re:What the Big Boys do... by ahde · · Score: 2

      That's what insurance companies (like Counterpane) tell you. Maybe you should ask someone else what insurance does, in their opinion.

    4. Re:What the Big Boys do... by alouts · · Score: 1
      That sounds like a comment with some sort of history behind it - care to elaborate on what you think insurance does? Had bad experiences with insurance in the past?

      I was talking only from personal experience, not trying to parrot a marketing line from any insurance agency...

  31. Re:your first problem by Anonymous Coward · · Score: 0

    i totally disagree... open source by far has fewer security risks than m$ crap.. and this has been proven.. as far as security is concerned i would try using something like best crypt to encrypt the entire mount point this will protect the data from being accessed from an un authorized user for the most part... second would would be do u really need the credit card info? or just a way to validate that is is correct (ie online buying and such) or do you need to store the cc# each time a transaction is made if the answer is validate then just use a md5 of the origianal cc# and keep the md5 if you have the later then dont use pgp i would recomend something like blowfish or twofish encryption on the information in which you could use a secondary system to store keys (ie. every record has a unique random encryption key) that would make it alot harder to crack since each record would basicly be unique hope this at least points you in the right directection

    dsteele@systeloa.com

  32. Data Integrity and Security by buffy · · Score: 5, Informative

    As with most security related topics, depth layered solutions are best. Of course, design your network and connectivity with least access in mind--i.e. the database server itself is never directly accessible via the Internet, or even your first layer of permimeter defense. Typically, only http and https are externally acessible, with perhaps a few others like DNS, and FTP.

    Usually your database will either be accessed by your web servers directly, or through an application server. Limit access to your database explicity to these addresses, through both the database configuration, and, if possible, IP-level configuration (like iptables in Linux). For each client connecting to the database (be them web servers or application servers) have then use unique password keys (and users, too, for that matter.)

    Finally down at the application layer (we've done network, and server layers so far) you need to be more careful than ever. First, do the obvious, don't store sensitive material (read: credit cards) in plain text ANYWHERE. At list build in some kind of cipher key (crypt, if nothing else) that will encode the data in the database. If possible, you may want to look at more elaborate schemes for storing data in such a fashion. Beware, this is the piece of the puzzle that many will spend a lot of time focusing on, which is good, but not the whole shebang. Also note, any fields that you store encrypted, you will not be able to use easily as an index field.

    Another oft forgotten place to focus on, is in the tools that you use for manipulating and storing the data. Everything above is worthless, if you have a careless programmer who writes a utilitiy that doesn't sanatize user input prior to executing an SQL query. A tremendous amount of the hacks you see out there are due to tools like these that are very vulnerable to misuse--since they were designed to have the ability to access your data, your security measures are for naught.

    Make sure your programmers understand how the data is being stored both in the database, and the computer (ie. buffers, sanatized user input fields, etc...)

    These are by no way complete, just thoughts of things I've had to deal with in the past while facing similar issues. Hope they help.

    -buffy

  33. Building Secure Software by Anonymous Coward · · Score: 1, Informative
    This is what _Building Secure Software_ by Viega/McGraw is all about. It's a very good book and was reviewed recently on slashdot at http://books.slashdot.org/article.pl?sid=02/03/04/ 0354222

    Here's an amazon link:
    http://www.amazon.com/exec/obidos/ASIN/020172152X/ qid%3D1023135591/ref%3Dsr%5F11%5F0%5F1/103-9142405 -3353431

    1. Re:Building Secure Software by Anonymous Coward · · Score: 0

      with ur referral id and everything? How kind of u!

    2. Re:Building Secure Software by Anonymous Coward · · Score: 0
    3. Re:Building Secure Software by Anonymous Coward · · Score: 0

      For the dumbasses above - amazon always puts a ref on there even when you type in www.amazon.com in your browser and search directly from their site. Try it yourself. And no, I don't have KaZaa or whatever it was that does the referrer hijacking. I verified this on other computers and using mozilla and plain ole lynx.

  34. one-way by jabbo · · Score: 3, Interesting

    PGP-encrypted SMTP relayed on an internal VLAN to a machine with the 'recipient' key, decrypt ONLY on the destination machine, encrypt ONLY on the Internet-facing machine. Perl classes for this exist and implementing it is therefore a question of writing the appropriate 'glue' for your site.

    Internal access and usage is a policy issue. There is no way to engineer a usable solution whereby a user cannot write down a credit card number and expiry date and begin using it to buy stuff short of policy, enforcement, and legal action. You'll come up with some real Rube Goldberg schemes if you try, but fundamentally, if you must have human contact with the billing authorizations, you have a policy issue, not something you can ironclad by technology.

    You will simply have to ensure that only trusted staff (eg. have a vested interest in the company's success) have enough access to do any damage. Technological solutions to social problems are a very poor fit and a very large time sink.

    Sorry. We segregate authorization and billing where I work so that I don't have to jump through these hoops anymore. Small-order authentication is farmed out (and with it, the liability) so that our major customers are charge accounts with whom we deal personally in case of a problem.

    --
    Remember that what's inside of you doesn't matter because nobody can see it.
  35. Store key off machine, request it JIT by Anonymous Coward · · Score: 0

    Problem as understood - The Key lives on the data host because it is needed for bulk transactions.

    Solution - Store the key on a second server, and set up your app to requisition it for the duration of the bulk-process and then forget it when the processing is done. That way the key is less available on the data host.

    You can get silly/secure/paranoid from there. Set up the keyserver so that bulk transactions can only start on the 10-th minute of the hour. Set up the server software so that your bulk jobs start then, and you know that any other access can be rejected.

    Or set it up so that someone has to "unsecure" the key on the key server (Authenticate on the other machine) to make the key available for the data server.

    Just thinking...

  36. Re:The Best Policy by Enrico+Pulatzo · · Score: 1

    No Good? Haven't you ever heard of laziness? Sometimes it goes by the name of convenience. Either way, customers typically like it, and will pay more for it. Making them click a link in an email and logging in is just too much for the consumer to deal with, and must be simplified if you hope to sell whatever crap you're hoping to push on the public. (well, maybe that's a little overboard) Either way, you trade security for simplicity.

  37. multi-tier architecture by joeflies · · Score: 1

    One way to add protection is to make only the application that uses the data the only thing that has the ability to encrypt/decrypt data to the database, and keep the two separate. Sort of like a mail store - namely you don't encrypt the mail store, but rather the end-user retains the responsibility for encrypting/dencrypting the mail.

    Of course, this isn't true security, because if you crack the app, you still get the data. But at least you don't put the keys in the front door of the safe this way.

  38. Data protection? What does that mean? by alouts · · Score: 1
    I can tell you from personal experience working with three major US financial firms that if you're doing anything to encrypt your data on the actual source machine where it's stored, you're doing more than most.

    Scary as it may be, the IT infrastructures of many major corporations rely on keeping people out of the house more than securing things inside. They'll encrypt it on its way out so nobody can sniff it, they'll scramble it in reports if needed, but in it's main storage location, it's just there, waiting to be had.

    If you were to gain access to their infrastructure, and then subsequently got access to their databases, you'd find that the sensitive info like CC#s are probably plain-text. At most, those may be encrypted, but if you think any major corporation encrypts names and addresses, phone numbers, SSNs, etc., you're dreaming. For most companies, contact info is in no way considered sensitive, and as a main asset of the company, is shared as widely as possible to make sure that the "one customer, one view" kind of thing works. They care far more about having only one copy of that data in order to keep it up to date than they do about securing it from intruders.

    Strive for the best, sure, but you should rest somewhat secure in the knowledge that you're already a good number of steps ahead of many of the big boys.

  39. Use user-provided password by thoth_amon · · Score: 1

    For many if not most applications, a cleartext key on the hard disk is not necessary (although a cleartext key in RAM for at least some period of time is probably unavoidable). If you have a situation where you need to decrypt a credit card when a user buys something, or you need to run a billing cycle periodically, you can do this: Generate a user key randomly; this is used to encrypt the password. This information in turn is encrypted by each system user that needs to access the data. Only the encrypted user key is stored on disk, one encrypted copy for each user who might need to access it. When the user wanted to make a purchase, they'd type in their password, which would be used to decrypt the user key, which in turn would decrypt the credit card number. If a customer service person or billing clerk needed access to the credit card number, they would enter their own password which would decrypt the user key. If you need the machine to decrypt the password without any human intervention, that's a tougher nut to crack. My guess is that there's no way to do it without having a cleartext key on the machine, or accessible by the machine.

  40. Don't store it on the same machine by spotter · · Score: 2

    Don't store the data on a machine that can get cracked.

    store it on a totally seperate machine.

    Basically, you'd write to the seperate machine over a defined interface such as update_customer(customer id, credit card number) pairs), and read from the machine over a defined interface such as verify_credit(customer id, amount).

    this way, "important" information is never leaked, operations and data that you want to be secure are placed on a box that doesn't have to run any extra services that can possibly be cracked.

  41. seperate the worlds. by Zapman · · Score: 3, Insightful

    Anything put out on the internet should have no important data on it. Period. No connections from the internet (aka untrusted aka hostle) should be allowed to the box with the real data, other than those which are PROVEN to be needed, and secure. So:

    internet -> firewall(1) -> web server -> firewall(2) -> database

    So, you have 2 firewalls. One internet facing, and one (idealy a different vendor) from the DMZ to the internal world.

    Also, you can set up 2 houses for the data. One (the one that the internet can get access too by proxy) should only cache the recent data. Hourly, or nightly, it should then be put into another server, from which the accounting department can run bills. Then this box (for accounting) should have no allowed connection to the rest of the world, save from the accounting department.

    Oh, and the important data should be then purged from the internet proxy accessable database.

    --
    Zapman
    1. Re:seperate the worlds. by Anonymous Coward · · Score: 0

      Even better:

      internet -> firewall(1) -> web server -> firewall(2) app server -> firewall(3) -> database

      Very common on bigger systems ...

      You are not getting access to the data (from the outside) very easily at all.

  42. Why the requirement to decrypt on the web server? by ryanr · · Score: 2

    Why does the web server need to decrypt? It should be storing the sensitive info in the DB encrypted with the public key. If your personnel need to decrypt it for something, do that on a seperate machine.

  43. Your own response states the problem ... by TheViffer · · Score: 2

    administered by IBM

    In otherwords, people outside of the bank have access to that information.

    And all it takes is 30 seconds to dump an SQL output of 10,000 CC#/account info records to a flat file on a 1.4M "service patch disk" and out the door they go.

    --
    -- Knowing too much can get you killed, but knowing who knows too much can make you rich.
    1. Re:Your own response states the problem ... by Hard_Code · · Score: 2

      "And all it takes is 30 seconds to dump an SQL output of 10,000 CC#/account info records to a flat file on a 1.4M "service patch disk" and out the door they go."

      With a BIG FAT log of who logged into the console and database and performed the dump, not to mention paper logs of entry if they do that. To tell the truth, there are many things which we could just "walk away" from...but there would be sufficient trail that would lead right back to us, so it would be suicidal (nothing is really physically preventing me from mugging old ladies on the street, but it's still not the perfect crime).

      --

      It's 10 PM. Do you know if you're un-American?
    2. Re:Your own response states the problem ... by Anonymous Coward · · Score: 0

      From a hacked EDU site comming from several other jump points now what are you going to do with your logs. I guess those logs may be good for tranning a puppy

    3. Re:Your own response states the problem ... by Anonymous Coward · · Score: 0

      mmmmm.... old ladies

    4. Re:Your own response states the problem ... by Anonymous Coward · · Score: 0

      You didn't read his post, did you? Requires PHYSICAL access to the machine. A hacked .edu site ain't gonna do you jack-shit.

    5. Re:Your own response states the problem ... by Anonymous Coward · · Score: 0

      You don't seem to have any concept of how hard it is to even walk up to the machine.

      To start with, I'm sure that IBM has a list of people authorized to access the machine. If you're not on that list, forget it.

      Then, You need to provide ID and get logged with security with the reason for your visit, etc.

      If you're dealing with hardware, serial numbers and stuff need to be logged... And then you're allowed in for a set period of time.

    6. Re:Your own response states the problem ... by Anonymous Coward · · Score: 0

      So join the bank's cleaning or maintenance staff. Keep emptying the wastebaskets in the computer room for a month or two until you have a chance to do what you need to do.

  44. Re:The best solution by Anonymous Coward · · Score: 0

    So many people smoke.. Quite a few people shoot up Heroin, I can think of a few people that purchased Enron stock, oh and not to mention there are even a lot of people that are entertained by Jap Scat.. I guess by your reasoning all of that is "good also".. What am I doing still sitting here.....

  45. Hardware Crypto by Halo- · · Score: 1

    A good solution (if expensive and cumbersome) is a highly tamper resistant hardware device like IBM 4758 Coprocessors (been talked about on slashdot before, too lazy to look up the links)

    Basically, it is a seperate computer which sits in a PCI slot. You have the program which needs the data log into the card when it is started, and whenever the program needs secret data, it passes the encrypted data into the coprocessor, which decrypts it and passes back the plaintext. The idea is that only the running program has a valid session on the card. If anyone tries to pry the secrets out of the card, it nukes itself. (Obviously you'll want at least TWO cards, with one backing up the first...) This thing is seriously paranoid. Tempature, pressure, X-Ray, vibration, time, physical shock, intrusion, and other detectors. And they seem to work. (I've put one in an X-Ray machine: it died)

    Obviously there are some "gotchas" with this scheme. For one, it assumes the program is a long running one. Additionally, it assumes that access to the program itself is secured properly. Also, if you're truly paranoid you'll be using signed biniares with the checksums stored in the secured memory as well...

    The cheap answer is to make a long running authorization daemon ala ssh-agent. But, the same problems of access to the machine apply.

  46. Re:and when they mess up by Anonymous Coward · · Score: 0

    Hmm why wasn't this marked funny?

  47. Airwall by Anonymous Coward · · Score: 0

    This may seem (may be) very naive, but what is wrong with an airwall.

    In the situation that you described, billing isn't required to be real time, so just dump the batch records for today onto a tape, and load your billing database that resides on an inhouse network that isn't part of the ordering system. This or some variation.

    So little of what we do today really needs to be real time, and there is so little attention paid to batch processing now days, but it hasn't really lost its utility.

    If the isolated web interface ins't feasible, then maybe putting the key on a removable media (USB key?). Again, I really doubt your billing department mails out bills/submits to credit card company one account at a time, whenever the mood strikes them.

  48. simple by Anonymous Coward · · Score: 0

    Use asymetric encryption. Put the public key on the web server.. encrypt the CC numbers with it. Everywhere in your system use the encrypted CC chunk..

    Then sneaker net it to a backend system which actually processes the billing. The private portion of the key should exist only on this system...

  49. Re:The Best Policy by Vecna! · · Score: 5, Insightful

    If you bill a customer's credit card, you are required to keep that credit card information on file so that you can reverse the charges and/or provide information on charge traces that may be requested by the customer.

    There's an implict social contract between the parties when a credit card is used - the contract is that in exchange for providing a good or service to you with nothing in the way of security other than reliance on a banking infrastructure, I will be allowed/required to keep certain private information about you so that I can validate my accounting records of our transaction on demand.

    Keeping this kind of info is not being "up to No Good", it's fulfiling my obligations under the social contract.

  50. Security needs to be in place in all levels by puppetman · · Score: 5, Interesting

    Our credit card info is stored encrypted in our Oracle database.

    No one accesses the credit card info directly - we generate reports for billing staff. When credit card info is sent across the net (to process charges), we use secure sockets (as does everyone I'm sure).

    The only machine that knows how to decrypt is a weblogic app server with the key, running on Solaris.

    The database is on one virtual LAN, the webservers on another, and the app servers on a third.

    We have PIX firewalls to keep out intruders, and our boxes are physically locked down in a cage.

    In addition, our hardware topology is based on Windows 2000, Linux and Solaris. You would need to take advantage of security flaws in all three OSs in order to be able to traverse our site.

    We make sure the passwords are not words or phrases. Numbers, funny characters, and letters.

    The holes in our system are:

    1) On weblogic, the connection info to the database is out in the open in the connection pools.

    2) Billing staff need to be careful with how they handle paper reports. Perhaps we should only show the last 4 digits of the CC number when generating.

    3) We refresh our QA environment once in a while. I have to be sure that I wipe credit card info, passwords, and email addresses from the QA database. While it's fairly secure as well, no point in leaving it around.

    No system is perfect. So long as they are encrypted, on a machine that has the latest security patches, the machine is in a secure environment, and the passwords are "strong", you can sleep at night. Most of the large credit card thefts have been against systems that violated one or more of those rules.

    1. Re:Security needs to be in place in all levels by Anonymous Coward · · Score: 0

      4) the person with a laser microphone
      ouside your call center(s) listening to
      those customers who phone in their
      numbers because they don't trust
      "the Internet"

      as a cs rep, one of the most interesting
      questions I received from a customer
      was about cc security - I was able to
      comfortably tell them that card numbers
      were not stored in an online box, and
      that cs reps did not have access to either
      the card numbers or the box - only billing
      specialists whose use was monitored,
      when submitting the CC through the website,
      the legal amount of SSL encryption was
      used so it couldn't be read in transit. Then,
      the smart puppy started getting into an area
      that I didn't know the answer to - credit card
      authentication and charging process. when I
      followed up with the rep I forwarded the
      question to, I was told that the answer was
      probably DEC or triple-DEC encryption that
      was used as a financial standard. However,
      that was around 1998 (early by ecommerce
      standards) and probably the financial
      industry changed with the ecom explosion
      to use more secure standards.

      in case no one's mentioned it - our
      department was told that card numbers did
      have to be removed (legally) if the customer
      demanded it. i'm going back to drinking my
      unemployed self to death now.......:)

  51. Don't decypt it on the machine storing the cc# by hackwrench · · Score: 0, Redundant

    decrypt it on the machines the billing staff accesses the accounts with.

  52. Re:The Best Policy by Anonymous Coward · · Score: 1, Insightful
    Sorry, you're dreaming.

    Accepting a transaction without data you can cross
    reference is an open invitation to get raped by
    thieves. Merchants ask for addresses because cardnumbers can be generated or stolen. I ask for data because the more data I can cross-reference,
    the harder it is for people to rip me off. Phones
    can be cross referenced to state, state to zip,
    zip to address. The whole purpose is to make it harder and harder for people to rip me off and
    get my merchant account suspended.

    You cannot try to buy something anonymously
    with a credit card and expect people to take your word for it. Thats
    unreasonable because it puts the merchant in
    danger from VISA. Too much fraud and he cant
    sell anymore. You have no right to spit out
    personal privacy laws when trying to buy something over the internet with a credit card, because the MERCHANT is the one taking the risk, not you.

    If you want anonymity, pay with cash.

  53. The above is the best solution by jabbo · · Score: 3, Offtopic

    and I've implemented reasonably correct versions of almost all the others, so I am not just 'guessing' but offering observations from someone who's built several systems like yours.

    You want accounts and you want them managed separately from billing. Physical security is what should realistically protect the private payment and identification information that relates to those accounts (eg. the substance to their metadata) so that day-to-day manipulations of orders are separate from month-to-month billing updates.

    You simply must keep private info private and enforce it via legal and policy measures. No amount of technology will easily prevent misuse of your data. You could, however, experiment with CryptFS or StegFS to make it much more difficult for a physical security breach (eg. stealing the machine) to result in information leakage.

    When I went back and reviewed the submitter's question I decided that I had focused on the wrong aspect of his question. One-way encryption (outside-to-inside) is important, and it can be keyed to the same database as customer account identifiers, without divulging useful information on a public interface. However, the primary measures for his company to take are still going to be policy (dissociating private customer data from public/unimportant customer identification data) and legal (physical security, pressing charges when anyone tries to circumvent).

    Again, every measure I'm discussing above is something I've had to deal with in my job, and I am merely offering opinions as to what has worked best for us. I design my systems (at least at this point in my career) so that, for the most part, someone could steal them outright without greatly affecting our day-to-day operations.

    --
    Remember that what's inside of you doesn't matter because nobody can see it.
  54. Fixed API, Make the Server be the Client by Anonymous Coward · · Score: 0

    I've been considering this issue for a little while and there's an approach I've been thinking that should work well to keep data secure.

    What you do is use message queueing and set up a credit card "server" to instead act as a sort of client. You have a less secure server that hosts a message queue. Then you have your credit card server connect to the queue to look for credit card transactions to process. This eliminates the problem of having a service of any kind running on the credit card storage system.

    The next thing you do is create a simple API of commands that can be sent to the credit card system. Add Card, Remove Card, Charge Card, etc. Thus, you can control the ways that the card processor can actually be communicated with to a rather small number of possibilities.

    To get the cards onto the server you use a public key/private key system. So the less secure server encrypts incoming data, removes any transient trace of the unencrypted data, then passes along the encrypted data to the secure server using the API.

    The only drawback to this approach that I'm aware of is that credit card processing is asynchronous. So you submit a transaction into the queue, then have to wait for the transaction to be processed and to return the result to the outgoing queue. So depending on how it was done, you may have some delays in your processing, but they should be minimal, and it's well worth it for the extra security.

    The only ways I can think to compromise such a system are to get console on the system or somehow exploit the API (which you make intentionally very limited to only the functionality you need).

  55. A few ways, none perfect by Anonymous Coward · · Score: 0

    Here are a few options, none of which are perfect. You can use more than one of these -- mix-n'-match as you see fit.

    1. Separate the web/app server and the DB server. This is something I think you should always do anyway, but to address this specific issue, this way the decryption key doesn't reside on the DB server, and the encrypted data don't reside on the web/app server. For more security, put the DB server on a subnet with a nonroutable IP address so that your web/app server can see it but the outside world can't.

    2. "Store" the key in obfuscated form. Derive a key by grabbing the dates or file sizes of a handful of things that you believe will never change, and hashing them all together. Never store this directly, just recreate it at app startup time. This is ugly and fragile and also useless if the bad guys get their hands on your source code, but I'll argue that it's a little bit better than nothing.

    3. Don't store the key on disk. Ask an operator for it each and every time your app restarts, and store it in RAM (slightly encrypted, even).

  56. Scramble the number before encrypting it. by Ruger · · Score: 1

    I used to work for a large charge card company...a card "you should never leave home [without]"...and all the card numbers were stored in a scrambled (or encrypted if you will) form. An algorithm was used to compress the card number into a shorter form than its orginal length. Our system could recompile them on the fly so personel could see the actual account numbers on screens and such. I'm not certain how this was done (not my area), but when data was pulled from our database using simple file extracts, the card numbers were unique, but didn't look anything like the real ones.

    Ruger

  57. Security by obscurity does work by delphi125 · · Score: 1
    (well, not really.)

    First, balance the risks. It is a well known fact that most fraud comes from insiders. Close that avenue down first (you are probably the biggest risk yourself!)

    Secondly, there are two different ways you might be targeted externally: by someone after YOUR data, or by an opportunist. In the first case, if they really want to get in, they will steal both computers physically, use social engineering, whatever, anyway - whatever you do. In the latter case however, if you are a small company, just make sure there is 'enough protection', and they will move on to an easier target.

    Just make sure you don't make the target extra juicy; for example don't post on Slashdot that your system may have vulnerabilities! (p.s. glad no real email address in the front page at least :)

  58. nCipher and alike by friday2k · · Score: 2

    You might want to consider hardware based crypto like nCipher. This way you do the key storage and en/decrypt functionality in (supposedly) tamper resistant hardware. HOWEVER, if someone hacks your system and is able to access/copy your code and get the right privileges to talk to the nCipher box you are screwed anyway. But it would certainly raise the bar ...

  59. Microsoft is going to be pissed ... by TheViffer · · Score: 4, Funny

    you have reveiled thier new security strategy after the month long security audit they did.

    --
    -- Knowing too much can get you killed, but knowing who knows too much can make you rich.
    1. Re:Microsoft is going to be pissed ... by Anonymous Coward · · Score: 0

      Was that supposed to be revealed or reviled?

      Hmmmm ... works either way I suppose.

  60. Re:Securing the co-host. by Ashurbanipal · · Score: 3, Funny

    Make sure the co-host is not networked at all; have the connection be a pair of RS-232 serial lines instead. On the line that sends the data to be validated, clip the wire that would allow signal to be transmitted back - (break RD, leave TD intact) to create a one-way signalling method.

    Go/no-go decisions are signalled on the other link, either with simple sense carrier signalling (wire CD to DTR or whatever) or a very restriced set of allowed responses.

    Programming the system is a pain in the ass since you have to use the console, but once set up it should be so simple it'll need no other maintenance than backup tape loading.

    Any cracker who can figure out how to break your system when you have no net link is so much smarter than you, you're probably doomed anyway!

  61. Safeguard the Fact that Data is Not Private by Anonymous Coward · · Score: 1, Interesting
    I used to work for a company that collects private customer data for over a dozen major US banks and brokerages. I assumed we had a solution to the problem you describe because
    • these multi-billion-dollar companies were trusting us with the data
    • our privacy policy specified that the no employee of our company could see the unencrypted data
    Then one day I saw a bunch of sensitive personal data on an engineer's screen. I averted my eyes and told him he shouldn't leave his account info on his screen like that. He said it wasn't his; it was "some end user's." I told him that was impossible, so he showed me another person's data, and another, and another. The engineer said they use the data for "quality control" purposes only, but the official line the company gives is this: what I saw is not possible. I didn't see it.

    So I guess if you [can't|don't want to] find a way to safeguard the data, the answer is to announce that it is safe. Who's going to know? It's not like it's going to get posted on slashdot.

  62. Summerizing by SirSlud · · Score: 3, Informative

    Just a summy post to collect most of the points above that are good ideas:

    - Use 'per record' encryption, where the records are encrypted each with a per-record unique key that is hidden from the outside (user-supplied is good, like a password, or if you need to decrypt without customer interaction, on a seperate box inaccessible from 'outside')

    - You should have a method of 're-encrypting' records should a key(s) be compromised, to get the data safe as soon as possible after detecting comprimisation of your key(s).

    - Dont ever decrypt - if you can get away with it, dont ever decrypt .. if you need the # for display on pages (like receipts), you only need to display the frist/last 4 digits for confirmation purposes, so only store those (encrypted). This is along the lines of minimizing the 'pot of gold' in a worst case scenario.

    - Isolation .. depending on the data's sensitivity (and CC#s are supermega sensitive), you can opt for various levels of hardware isolation of the box that stores the key, via a serial cable or something.

    - DONT ENCRYPT USING A KEY ON THE BOX ON WHICH THE DATA WILL BE STORED, or you might as well call your box a honeypot.

    - make sure you use 'proofs' to verify the data, post encryption. Store the proofs on a box other than the data hosting box, so you can detect data comprimisation as soon as possible! (You could run a local data intergrity job nightly to detect mofified or currupted records.)

    Everyone knows the worst can happen with computers - but if you did your best (and kept interested parties informed as to your efforts), then you wont/shouldn't be blamed if the worst happens. This is analagous to drunk driving ... everyone knows car crashes can happen, but being drunk during one is going to void any possible blame that could have been placed on people other than you.

    --
    "Old man yells at systemd"
  63. Re:your first problem by Anonymous Coward · · Score: 0

    I would like to take this oppertunity to personally thank you for responding to my troll.

  64. Use a SALT by NixterAg · · Score: 1
    Take a look at this article (PDF) and see if it gives you any ideas: Symmetric Key Management


    You can keep your symmetruc key on that same machine but you'll have a number of different options as to how to keep that symmetric key safe. One way I've found useful is to use a SALT, as described in the article. A SALT is a very large number which, once blended with a keyphrase produces a Key Encryption Key (KEK) that you can use to encrypt and decrypt your session key. Your keyphrase can be any of a number of things, from a dynamically entered password to another piece of information from the database (say a table name or DOB of a dummy record).


    A new SALT is generated every time you want to re-encrypt your session key, helping you prevent precomputations (and therefore brute force attacks/dictionary attacks). The SALT can be stored locally or even on another machine in the clear. It is merely there to add entropy to your KEK. If it is stored on another machine, it could be on a machine segmented away from your network and could be retrieved via a VPN from your database server.


    The key of this scheme is that you have dispersed your keys and you can then use machine security, network security, whatever to aid you in helping keep individuals' credit card data secret.

  65. I can help! by teamhasnoi · · Score: 2

    I'll need a copy of the database and the passwords, then I'll get back to you. Oh, It'll cost you $19.95, too.

  66. Let someone else worry about it by stuce · · Score: 3, Informative

    TrustCommerce has a great system called BillingID's where you can submit all your credit card info for storage on our secure Linux servers. You are given a handle that you can use bill the customer at any time through our cool GPL'ed client API. Retrieval of the CC info is impossible so even if your server is compromised the hacker can't get your credit card information. This lets you bill customers at your leisure but lets you offload all the extra security responsibility onto us. Security is, after all, what we do. </shameless plug>

    1. Re:Let someone else worry about it by Anonymous Coward · · Score: 0

      This is quite possibly the worse business idea I've heard of for storing credit card data. Listen, your db WILL get comprimised. Your claimes of 'impossible' are over-rated, and just wrong. Why would I keep my credit cards in such an attractive target? Why would I want to go down with all of your other "customers" (if you have any :). Futhermore, after you go out of business, how do I get the credit information for all of my customers? Bad idea, bad plug, bad idea to say you are secure on ./

  67. From my archives, a pretty good solution by jukal · · Score: 4, Informative

    You can find this also here:
    Following Text authored by Albert Langer not me, posted to ZCommerce mailing list on Fri 09, Jun 2000 . Still very valid:

    <clip>
    Warning: Following ideas are "off the top of my head". Not verified.

    Q. "Where do I store the decryption key so that the cracker who snarfs the database file can't get it (just in memory somewhere?), and yet have the system be able to boot itself, including having the key, without human intervention?"

    A. "Using a 'one time' fast key in a client cookie".

    Details:

    1. Generate single Public/Private key pair off site. (Slow but only done once).
    2. Store only the Public key on web server.
    3A. Store Private key very securely on internal site with controlled and audited access etc.
    3B. Or better still, immediately destroy it. Losing only the functionality marked * below.
    (Above are common to several previous responses. Following are new.)
    4. Compress each CC card as received to shorter equivalent bit string (eg convert the parts that are card type to enum, remove checksum, convert remaining ascii digits to large binary integer and concatenate with the enum. This makes the cookie below smaller, also removes some redundancy.
    5. Use public key to generate and store encrypted copy of compressed CC number on web server. (Fast). Do NOT store or transmit to internal site, except on specific secure request with audit records maintained at web server as well as internal site. Use same precautions as would be used for storing plaintext CC numbers or private keys.
    6. Generate XOR of encrypted copy and plaintext on server. (Very Fast).
    7. Store the XOR in long term client cookie (expiry no later than CC expiry date, or add expiry).
    8. Destroy plaintext of CC AND the XOR on webserver.
    9. Steps 4, 5 and 6 MUST be carefully designed to leave no trace of plaintext or XOR on web server, eg in virtual memory paged to disk etc etc.
    10. Step 7 MUST be designed so web server cannot store cookie in client unless transmission protected by secure transport (https).
    11. Step 7 SHOULD be designed so client cannot transmit cookie to anybody other than the same server and with the same secure transport (possibly impossible and a key flaw).
    <clip>

    See the link provided above for benefits of this approach, this post is already too long :)

    1. Re:From my archives, a pretty good solution by Anonymous Coward · · Score: 0

      this is a silly solution. if you destroy the private key, then you can no longer accept new customers, because you can't generate their cookie. if you keep the private key, then all your security is wrapped up in that, and there's no need for the runaround then.

    2. Re:From my archives, a pretty good solution by Anonymous Coward · · Score: 0

      no, you use the public key to encrypt the numbers. the private key is only needed to decrypt them -- without the private key it will be equivalent to a secure one-way hash function. It should work fine.

    3. Re:From my archives, a pretty good solution by Frogg · · Score: 1

      10. What difference does it make to serve the cookie using https when cookies are then subsequently transmitted with every http request anyway?

  68. Think outside the box by Anonymous Coward · · Score: 0

    At the company I used to work for, what we did was a little unusual but it was pretty close to 100% secure. Essentially we seperated the data collection system, which had to be on the Internet in a form that meant it could take incoming connections, and the data storage system, which only needed to receive data.

    What we did was a little complicated. The web server was only connected to the Internet. When a customer connected to make an order (or change an existing order), a CGI would put all of the information into a packet, gzip it, pgp encrypt it, and post the encrypted message to the Usenet newsgroup misc.test. A second machine, connected to our internal network, would periodically dial in to a UUNET hub, and receive the newsgroup using UUCP. This meant that machine never had a live Internet connection. The machine would then post the articles to an internal NNTP server, and a script would read the newsgroup, identify our articles, decrypt them, and process the transactions.

    That way our internal network never had to be connected to the Internet, ensuring the entire system was completely secure. A hacker would have either had to compromise the web server - and access only transient records available for a few seconds, or crack a 1024-bit PGP encryption key. Not easy.

  69. Re:First Jon by Anonymous Coward · · Score: 0

    It's another picture of Jon!

  70. Virtual Machines by kevinank · · Score: 2

    One option used by many companies is to compartmentalize the data that needs to be secured. HP sells VirtualVault, or you could brew your own by running a chroot jail, or more completely by running a seperate virtual machine like User Mode Linux.

    --
    LibBT: BitTorrent for C - small - fast - clean (Now Versio
  71. Don't decrypt on the public server by Anonymous Coward · · Score: 0

    The best way to keep someone from decrypting it from the production server, is to not have the private/secret key anywhere near that server.

    Use public/private key encryption on the credit card number, possibly keeping a copy of the last 4 digits in cleartext, so the customer can figure out what card it is.

    Give your billing staff access to a private webserver which contains a copy of the public server's database. This machine should not be accessible to the public, and should be the only one decrypting the information.

  72. eCitadel by twenex · · Score: 1

    Check out this whitepaper from CyberSource that describes a good solution for your problem. I'd add to this approach that you should use a keyed hash, and a hardware encryption device for both hashes and encryption/decryption so the keys are not readily available to someone with a login on the machine. I'd recommend Ncipher. Finally, use Tripwire or some such thing to monitor the machines for unauthorized programs that might gain access to both the database and the crypto HW.

  73. Simple solution ... by bigjocker · · Score: 2, Interesting

    The best solution is to use a second machine to host the secret key. This one machine must be phisically disconected from the world, just a connection with the database machine.

    The database machine receives the CC# and sends it to the black-box. How to do it? When you connect to the black box it automatically sends a public key for communication, the DB machine generates another pair of keys and sends the CC# using the black box public key. The DB machine will receive the encrypted key using the secret key, encrypted with it's own public key (double encryption). Store the key in the DB.

    When you need to decrypt a CC# the DB machine sends the encrypted CC# to the black box (again, using public/private keys for secure communications) and receives the plain CC# encrypted in it's public key. The session public/private keys should be generated at runtime.

    Setup the black box so it deletes the key on ligin and on ethernet communications with the wrong MAC Address (it should only receive connections from the DB machine).

    The black box should be in a safe place, under a different security staff than the DB machine, so you will not loose both, and if someone plugs itself between both of them, they are communicating in a secure way.

    --
    Life isn't like a box of chocolates. It's more like a jar of jalapenos. What you do today, might burn your ass tomorrow.
  74. Why is your database server same as the site serve by Anonymous Coward · · Score: 1, Interesting

    You never want your database server to be the same machine as your web server. Separate the two and put the database server on a private switch, using private IPs (better yet named pipes or something) The chances of someone being able to hack the web server and traverse OLE DB ODBC DBI whatever you are using is slim.

  75. Required to keep records for 7 years by Codex+The+Sloth · · Score: 2

    Merchants are required to keep accounting records of this sort of thing for 7 years.

    However, does this information need to be stored online? No!

    Whenever people talk about credit card security I always snort derisively ... check out the "secure storage" of credit card information at the local gas station or the restaurant. It's secured with a shoebox for the most part.

    --
    I am not a number! I am a man! And don't you ... oh wait, I'm #93427. Ha ha! In your face #93428!
    1. Re:Required to keep records for 7 years by lamp77 · · Score: 2, Insightful

      Sure, but when was the last time a Gas Station had 30,000 credit card receipts in that shoe box.

      It's economies of scale here, the threat is higher because the exposure is higher.

      lamp.

  76. Here's a good article on keeping info Private by Anonymous Coward · · Score: 0

    Click Here The article will open in a new window...

  77. better idea by RelliK · · Score: 2

    Well, just to expand on that thought: you could store the key on a floppy (or CD, or that funky USB keychain, or whatever...) and require the disk to be inserted and mounted while starting the server. Then take the disk out, carry it with you, and guard it with your life :-)

    --
    ___
    If you think big enough, you'll never have to do it.
    1. Re:better idea by Anonymous Coward · · Score: 0

      This is not a half bad idea really. I mean, it works for physical security (and national security, the football anyone?), why not computer security.

      Give people who need the password a smartcard with the password on it, and hook a reader up to their computer at work. Every time they need to decrypt something, swip the card.

      This gives you some cool advantages:

      1. People don't have to remember a password, so it can be 1000's of alphnumeric, random characters. Even the fastest supercomputers could take years to brute force it.

      2. Since a person would need the card AND the reader, it would be that much harder for an employee to defraud the company. Remeber that most business theft, even e-business, is caused by dishonest employees.

      3. Could do other purly 'mechanical' things to increase security that would be transparent to the user. Stuff like tracking each transaction by the person who processes it (each person could have a unique key-code), to randomly changing the passcodes on the keys.

      Physical security like this is a pain to set up, but it is usually fairly effective BECAUSE it's a pain to do.

    2. Re:better idea by thelaw · · Score: 2

      one problem with this approach is reboot convenience. for example, if you need your webserver to be able to do automated reboots or unattended startup cycles, then this won't work (unless you're willing to plug in the token every time the machine crashes or reboots). if you have older or failing hardware this is more of an issue than you'd think.

      jon

      --
      -- http://www.cerastes.org
    3. Re:better idea by RelliK · · Score: 2

      And what kind of a fuced up server you are running that needs to be rebooted all the time?

      --
      ___
      If you think big enough, you'll never have to do it.
    4. Re:better idea by iCEBaLM · · Score: 2

      And what kind of a fuced up server you are running that needs to be rebooted all the time?

      My guess is Win2k...

      -- iCEBaLM

    5. Re:better idea by thelaw · · Score: 2

      solaris. if you need high-availability, but have close-to-failing hardware, the machine will crash with increasing frequency until you fix the hardware. unfortunately, not all of us can run apache on an old 486 with debian, have a load average of 0.01 and still pay the bills. so if the hardware is failing, you have to schedule a proper time to replace it, but you can't do this during business hours. or the business hours of anyone else in your company, if it's a worldwide joint.

      jon

      --
      -- http://www.cerastes.org
  78. Make it so you can't read it by MrChuck · · Score: 1
    1) study a little kerberos. Then ad public/private key tech.

    Once upon a, I worked on an early e-commerce project. This MIGHT have been S.E.T., or maybe just a variation. Anyhow:

    • You select an item or items to buy, lets say $70.00 worth
    • You go to "check out" and offer your address, CC number, name, etc
    • I (or my program) takes that info, format it "right" and digitally sign it using MY key.
    • I encrypt that chunk with VISA's cert and pass it to VISA for validation. Getting validation, I ack (to charge) and then ship the goods.
    • I keep no CC info that I can read (or crackers, presumably).
    In detail:
    I now have a (signed) chunk of data with MY company info, how much you spent, your CC number and personal info (and NOT what you actually bought). I've encrypted that with VISAs (whoever) public key and wipe the unencrypted info. I send that encrypted data to VISA for approval.
    VISA will decrypt it and check the signature. They will validate that yes, your address matches your CC number and that you can take the $70 charge. They send back a "YES" and I return an ACK that causes the charge to actually occur.

    At this point, I have a record of what you bought, your address, how much. That's for my records for shipping. I have an encrypted blob that VISA has accepted and the ACK code that they returned. I DO NOT have your credit card number stored in anyway that even I can read. If there are questions, I can resend the encryption blob to VISA and they can validate it, but I need never have that info.

    Note also that Visa needs not know what you bought.

    We had this running in 1995 or so, on a test system. It seemed obviously "right." Is this really hard to get?

    Bad guy gets my computer, they get a lot of encrypted info that even I cannot decrypt.

    Best answer is a "smart CC" with challenge response. "here is your valid CC number for this transaction, never to be repeated" but we don't have that yet.

  79. credit card number goes in, doesn't come out by The+Pim · · Score: 2
    The obvious part, which others have said, is don't store credit card numbers. But that can't be the whole answer, because you at least need the credit card number for as long as the order is "active". (I haven't run a store, so tell me if I'm missing something.)

    Assuming you need to store a credit card number for at least some period of time, the best way to keep it safe is to store it on a machine that will never give it out--except to local users on a separate network. The web server can send the number to this machine, but cannot ask for it back. Your employees and your order-processing code can access the number via the local network.

    If you must store the numbers long-term (to enable that "novel and non-obvious" wonder called "one-click shopping"), they still cannot be accessed from the web server. When the user enters his credit card number, the web server tells the credit card database, "Bob's VISA card is 12345". When the user places an order, he selects "VISA card" from a drop-down, and the web server records in the order that Bob wants to pay with his VISA card. But the web server still doesn't have access to the number itself.

    You can take this further by placing additional limitations on what someone who cracks the web server can do. For example, the web server doesn't need access to Bob's password, or even a hash of Bob's password. It just needs to verify it. So store the password on another system that will only verify passwords (and has some rate-limit to guard against guessing). Nor is there any reason to blindly trust the web server when it says "Bob wants to pay with his VISA". Have the password verifier return a random token when the password is correct, and only allow the order if the web server supplies a valid token.

    You get the idea--put the important data on a system that trusts the web server as little as possible.

    Additionally, I've heard people suggest connecting the web server to the credit card database with something less "featureful" (and thus, hard to secure) than a network connection. A serial cable, for example.

    --

    The evaluation of an action as 'practical' . . . depends on what it is that one wishes to practice.
  80. USB 'Keys' by gouldtj · · Score: 2
    I don't remember where I saw them (I think it was on Slashdot), but there are these little key sized devices that hold flash in them. I would recommend buying one of these. Then on that device store one, really big ass key.

    When the machine boots up it 'mounts' this key. Decrypts your 'usable' keys. Then it unmounts the key. This key is then used to decrypt the keys that you actually use to get to your information. So if the machine is stole it is useless (difficult to crack). Remember not store the 'usable' keys dycrypted on the hard drive :)

    This way you can store the USB key in another location (fire safe sounds like a good idea to me). And it is only needed when you boot up the machine (read: not really inconvienent). I might recommend getting two and storing one off site :)

    As far as hackers - well, there has been alot of good comments about that above...

  81. Simple solution by Oestergaard · · Score: 3

    It's easy; don't store the information. If it's not there, noone can steal it.

    Store the address, name, phone number, visit history, mother's maiden name, shoe size, whatever you want - but don't store the credit card number.

    I'm quite happy with entering my credit card information whenever I purchase something. Knowing that this information will not be leaked to the next script kiddie who drops by - you simply cannot trust security at sites with dropping revenues, budget cuts, etc.

    Clearly, the number one priority for many business sites today is to keep things running. Security is only a problem if it's broken. And that only happens if you're unlucky... Yearh right...

    Am I pessimistic, or are you naiive ? ;)

    1. Re:Simple solution by rtaylor · · Score: 2

      Subscriptions simply don't have much choice in the matter. Some people don't mind paying tens of bills each month, but I'd much rather deal with Amex or Visa when problems occur.

      Generally they only need a record of the bill, and paper showing what the business was allowed to take out -- receipt. I've yet to have any problem not straightened out within a month.

      I do almost everything through the CC for that reason. Don't trust banks, they've already sent the money (and don't care) but Visa hasn't received my payment yet and Amex is cruel to small business. I know this for a fact -- I've been on both ends. They pick on businesses like you wouldn't believe, so I'm an Amex client :)

      --
      Rod Taylor
    2. Re:Simple solution by Anonymous Coward · · Score: 0

      It's easy; don't store the information. If it's not there, noone can steal it.

      As I said in the post, we have to do recurring billing (they purchased a subscription from us).

    3. Re:Simple solution by Oestergaard · · Score: 2

      Then whatever you do, make sure you build your systems on a B1 (or better) certified system, and that it's properly configured.

      Take a look at Trusted Solaris. It is by no means a solution in itself, but it is a prerequisite for a moderately secure system.

      The idea is, that even if your system is rooted, the intruder will not have access to change system parameters (root is not allmighty), he cannot run standard utilities if he entered via. the network (compartments, mandatory security and trusted paths), and his activities can be logged (auditing).

  82. Offline CC# Store by Mr.Sharpy · · Score: 2, Insightful

    If you are worried about storing the credit card numbers, why not just put them in a db on some form of offline storage that is only connected on the day billing occurs. The only way you can really keep something secure for sure is to have it physically inaccessible.

  83. Combinations should include "staff training" by texchanchan · · Score: 2

    No matter how secure the file is, if your staff members take down the credit card number on scratch paper, possibly in a legal pad which they keep in their desk, or yellow stickies which they throw away in the regular wastebasket, you've got a problem. I tried and tried to get us some secure waste disposal at one place I worked, never succeeded. Fortunately we did not have any grifters among us (that I ever found out about).

  84. There are a lot of opinions on here... by tgd · · Score: 2, Interesting

    Very few make much sense, and very few are (hopefully) from people who have done it before. For what its worth, I have.

    People talking about system security, shutting off services, firewalls and the like are just plain wrong. I hope, very strongly, that no place I've ever entered my credit card information online was designed by these hacks. Unfortunately, as those of us who had our info stolen from egghead two years ago learned, morons are the rule not the exception when it comes to security.

    There is only one way to make this secure -- absolutely no network access to that box whatsoever. Not to the database, and not to anything that can talk to the database. Complete electronic and physical isolation. As someone else said, you need a client/server application that communicates over serial, with a very carefully scrutinized protocol that allows credit cards to enter, and not leave.

    Thats the *only* way to be secure. None of the other things people are talking about works. If the data is accessable, no security can totally protect it.

    1. Re:There are a lot of opinions on here... by evac · · Score: 1

      There are no absolutes in security. There is always a security risk, the name of the game is to manage that risk in a cost-effective manner. If anyone can access the data, in any way, then you have a potential security problem. Having a server with no network connectivity only removes a subset of potential risks. e.g. employee fraud for many companies is a larger problem than external threats.

      Clearly network security is worthwhile, but I've always felt there is not enough focus placed on application-level security, along with careful assessment of the policies and procedures relating to data access within an organization.

      All the firewalls and encryption in the world won't help you if a bug in your app allows people to bypass the password screen, or some employee in your company uses their access to steal data.

  85. What I do by Anonymous Coward · · Score: 1, Interesting

    I own a small business, nothing major and not a lot of clients (yet). I do have a merchant account, and if I wanted to I could allow CC orders to transact online in real time. What I do instead is I take the numbers via phone and store only what is needed on a totally isolated box, no net, not even a lan connection. I then use virtual terminal software to perform the transaction via a secure connection. It is a "no-tech" solution for sure, but I do not have to worry about someone rooting my processor box at least and the CCs are not stored online (by me anyways).

  86. Re:The Best Policy by parad0x01 · · Score: 1

    I agree with this to some extent, since most users can't remember 16 numbers at a time, I'd advise storing some of the data, and have them fill in the blanks. Like mentioned above, send an email with a link to login, and store the first 12 digits of the CC#. Then the user only has to remember the last 4 and their password. Security and efficency are an inverse relationship. You're a small company, don't let a 14 year old script kiddie, who got pushed into a locker one to many times that day, come home pissed off and be the downfall of your company. (Ahh, the good ol' days...)

    --

    This .sig has been censored for your protection
  87. example by cr@ckwhore · · Score: 3, Interesting

    For example in dealing with encrypted passwords in a database... lets say I have a user database with encrypted passwords in it. (Could also be credit card info, etc.) For security purposes, I'd like to NOT decrypt any passwords for authentication, because that will place the password in plain text somewhere in memory, which is undesireable. Instead, for authentication, when the user supplies a password, I encrypt it and compare against the encrypted string in the database.

    Same can be applied to credit card info. Once encrypted, you should rarely have to decrypt. Think of dealing with it from the standpoint of encrypting user input for comparison and validation against encrypted info in the database. This will save you from having to decrypt at all.

    The other argument is "its not secure if its attached to the net". Basically, you should have the info stored on a separate database server with a direct cable link to the application server via a private NIC.

    --
    Skiers and Riders -- http://www.snowjournal.com
    1. Re:example by rainmanjag · · Score: 1

      I can't say I follow your analogy. Passwords can be stored entirely encrypted and never decrypted because you just need to prove you and this supposed user share a secret... The one-way hash is great for this...

      I don't see this applying to credit cards... because as with passwords it doesn't matter what the unencrypted (unhashed) data is, it *does* matter with credit cards... The idea of storing credit cards is so that the user won't have to enter them again, so you can maintain billing records, etc... This is very different from the use of the password...

      --
      http://starboard.flowtheory.net/
    2. Re:example by cr@ckwhore · · Score: 2

      I agree.

      There are a number of applications by which the methodology can not be applied entirely, but it serves as a good example to get the mind thinking about secure engineering practices.

      --
      Skiers and Riders -- http://www.snowjournal.com
  88. I Know How... by Servo5678 · · Score: 2
    How would you securely store your customer's private information, especially when it comes to critical pieces like credit card numbers?

    In order to best answer this I'll need to see all your private data. Send it over and I'll look it over and let you know what I think is best.

    [Note: the preceeding is a joke and not to be taken seriously. In this day and age of lawsuits, one can't be too careful about gags such as this.]

  89. Re:The Best Policy by Anonymous Coward · · Score: 0

    I wonder how you'd expect Mastercard or Visa to make this a workable solution.

    How the fuck did this get moderated a 5?

  90. Re:The Best Policy by geirt · · Score: 2

    Vecna! wrote:
    > If you bill a customer's credit card, you are required to keep that credit card information on file so
    > that you can reverse the charges and/or provide information on charge traces that may be requested
    > by the customer.

    In that case, send the credit card information to an old fashion line printer, in a closed room.

    --

    RFC1925
  91. check out Protegrity by new+death+barbie · · Score: 1

    Protegrity (www.protegrity.com) has a drop-in solution that works with most big-name databases. It provides a more mature key management system -- enterprise-wide -- on a separate box; much better than a grow-your-own solution. I haven't implemented it in production, but I've looked into it pretty closely. Works with most applications with a relatively small performance impact. EXCEPT.

    EXCEPT for those databases which require the primary key (i.e. card number) to be encrypted. This means queries like "where CARD_NO = xxxxxxxx" must decode every single CARD_NO in the database looking for a match. Forget performance. Protegrity has a work-around for that particular query -- I believe they can now encrypt the CARD_NO field in the query before executing the SQL -- but it won't help for range lookups, i.e. "where CARD_NO between 1234500000 and 1234699999" (this is a useful kind of query for card issuers; it allows them to separate gold card accounts from the riff-raff, for example).

    The proper approach -- which usually can't be retrofitted -- is to replace CARD_NO with three fields. The first is a hash of CARD_NO -- this is used for all lookups. The second is the encrypted CARD_NO, and the third is the field you show on reports and customer support screens, something like "*****6051"

    --

    It's supposed to be completely automatic, but actually you have to press this button.

  92. Doesn't really answer your question, but... by djtack · · Score: 1

    The authentication schemes used by credit cards are really lousy. We need a system where the number itself doesn't have to be private in order to be secure. What I'd love to see is a smartcard that stores a secret key and uses some sort of challenge-response system.

    The notion that such things as your home address and phone number constitute "authentication" is ridiculous.

    When you want to make a purchase, the merchant asks for your credit card number, and sends you a "challenge", a random message, which you then input into your smartcard (either via a small keypad on the card or a USB port). The card generates a signature (the "response") that the merchant can verify using your public key which is available from the card issuer.
    Assuming that attacking the crypto is sufficiently difficult, nobody can ever use your credit card without being in physical posession of it.

    1. Re:Doesn't really answer your question, but... by gmack · · Score: 2

      We have this it's called CVV2(the number should be on the back of your card) unfortunatly not everyone uses it yet.

    2. Re:Doesn't really answer your question, but... by Anonymous Coward · · Score: 1

      >> The notion that such things as your home address and phone number constitute "authentication" is ridiculous.

      Sorry, thats all we have to go on. Name isn't associated with the card and neither is anything else. Hell, you can process a card not present transaction with nothing more than a cardnumber - visanet has absolutely no security in this regard. You dont even need the expiration date.

      The only way we can prevent fraud is by doing cross-referencing. Addresses and zipcodes can be checked with the AVS system. If you think this is ridiculous, tell it to VISA - its all they gave the merchant to work with.

      VISANET is a financial system accessible to anyone, and it has absolutely no authentication. It's a mainframe to mainframe network created in the 1970's when security wasn't even a consideration. Yes, it is ridiculous, but thats all we have. It's crazy, but there you go.

    3. Re:Doesn't really answer your question, but... by djtack · · Score: 1

      We have this it's called CVV2(the number should be on the back of your card)

      This is a tiny step in the right direction, (i.e. a PIN type number that's distinct from your account number) but it doesn't really prevent a "replay" attack. Someone could obtain your CVV number just by eavesdropping on your communications with a merchant (be it face-to-face, voice, or electronic). Still, the card companies are claiming it is helping to reduce chargebacks when merchants use it, but it's only a matter of time before fraudulant users catch on, and start collecting CCV numbers along with the rest.

      A few banks are issuing single-use card numbers, which is a neat idea, and works better...

    4. Re:Doesn't really answer your question, but... by zeno_2 · · Score: 2
      A few banks are issuing single-use card numbers, which is a neat idea, and works better...

      What banks are these? I had mentioned it on an earlier post that it would be a cool idea, id say its a more secure way of doing things then how they are done now. Id think of it similar to an electronic money order.

      It might even been kinda cool to setup something like this:

      I decide to buy something from website x.

      I go to my bank website, shift some funds from my checking account into a one-time credit card. This generates me a number (im thinking we may have problems with numbers running out, not sure how credit card numbers work).

      I take that number, go to website x, and buy whatever. When the order is finished, the website will spit out some sort of hash'd info.

      I then go back to my bank website and enter that into their system, and when it is billed, if the hash's do not match up then they might know something is up. At this point you could be contacted, or the sale just doesn't go thru or something to that nature.

      After typing all of that it seems that just having one time credit cards would just work fine, just as long as they worked similar to how they do now with normal credit cards to the store owner.

      Well its an interesting problem nonetheless, i know i don't feel 100% safe and secure when I buy stuff online.. And ive only been asked once for that 4 digit code on my credit card.

    5. Re:Doesn't really answer your question, but... by Conare · · Score: 1

      In the paper world this is known as a Money Order. I used to use them all the time before I had a checking account. Hmm... checks hmmmm....Hey are there any Venture Capitalists out there?

      --
      Stop Continental Drift! Reunite Gondwanaland!
    6. Re:Doesn't really answer your question, but... by bobKali · · Score: 1

      What if Visa issues each merchant some sort of certificate, like a PGP public key? That merchant could then encrypt the incoming CC with that key and store the result on their server and send the result into VISA for payment. No one else would be able to use that result because it would be unique to the specific merchant, and even though the merchant would have to store the public key on their server, only VISA would have the private key necessary to get the CC#.

  93. Human intervention == planning to fail by mccrew · · Score: 1
    This seems like a secure solution for a small shop, where the boxes are physically located in the same working place as the administrators.

    But I don't see how this would scale to more than a few boxes. As much as we like to believe in the rock-solidness of our servers, there are many things that will cause them to crash, usually at the 3am or some other highly inopportune time.

    When servers go down and then come back up, you can't have your site inoperable because the console is stuck at some password prompt, waiting for human intervention. I say this from experience: just last night one of our backend Solaris machines had some kind of trouble and rebooted itself.

    Honestly, I don't know the best solution to the original question, but my experience says that it's better to automate and be able to shut down quickly when there is suspicious activity rather than relying on human intervention for routine activities such as starting up services/applications.

    -Steve

    --
    Hey, Windows users, there is no such thing as "forward" slash, there is only slash and backslash.
    1. Re:Human intervention == planning to fail by demi · · Score: 1

      This seems like a secure solution for a small shop, where the boxes are physically located in the same working place as the administrators.

      This is why I would prefer a pass phrase rather than a key stored on removable media. That way the administrators do not have to physically be located near the machines.

      When servers go down and then come back up, you can't have your site inoperable because the console is stuck at some password prompt, waiting for human intervention. I say this from experience: just last night one of our backend Solaris machines had some kind of trouble and rebooted itself.

      Yes, depending on how the application needs to be supported and its uptime requirements, it may not be possible. I suppose it's a balance between uptime requirements, how much you want to pay for support staff, and how important it is to reduce the likelihood of compromising that private data.

      Honestly, I don't know the best solution to the original question, but my experience says that it's better to automate and be able to shut down quickly when there is suspicious activity rather than relying on human intervention for routine activities such as starting up services/applications.

      Well, actually I don't think what I suggest affects the ability to shut down quickly.

      Thanks for your thoughts.

      --
      demi
    2. Re:Human intervention == planning to fail by Fjord · · Score: 1

      The solution to this is redundancy, preferably at different locations.

      --
      -no broken link
  94. Take a more Zen approach... by wrinkledshirt · · Score: 1

    Loosely paraphrased from The 48 Laws of Power.

    There was an ancient Chinese king who was so feared and respected that once, when he was at war and cornered in a city with only a smattering army against a massive foe, he simply told his soldiers to leave him alone. He then left the city gates wide open, and sat in the town square in the lotus position, meditating. When the enemy advanced in on him and the general saw the king sitting there, seemingly completely unprotected, he realized that only a fool would leave himself so obviously at mortal risk, and since the king was no fool, that must have meant that he had a hidden motive so devastating that, conversely, only a fool would advance in on him. The general immediately left the city, and not too long after, signalled his surrender.

    The moral of the story is that one should create a shell around him or her, so easy to crack that it dumfounds potential assailants, convincing them that there is a hidden defense waiting for them. The more harmless the outer appearance, the more sinister that hidden defense will seem in the imagination of the assailant, until they will capitulate and leave well enough alone. Therefore, it is important to choose a platform that on the surface appears to a hacker to be laughably weak, and the weaker the better.

    In other words, any number of Microsoft products should do the trick just fine.

    --

    --------
    Bleah! Heh heh heh... BLEAH BLEAH!!! Ha ha ha ha...

  95. This problem is the size of a HIPPA by SkyLeach · · Score: 2

    I am faced with a similar problem: storing PET scan overreads for peer/specialist review along with patient medical information and allowing access to those overreads by only the referring physician and his peer.

    The approach I am considering most is to use an applet to compress and then encrypt the overread file on the client machine before sending it over SSL to be storred in the database. Of course, I don't have to access the actual overread here, just the authentication information and general contact information for the involved parties. We are using AMA certificates as the key system. This takes it completely out of our hands and prevents us from suffering the headaches. Other personal information which is not encrypted is kept in an Oracle database behind two firewalls, both of which only allow SSL/SSH traffic. Threre are two certificates being used: the site certificate for the public side and an OpenSSL certificate for the private side. I use a streaming program which I wrote to make the SSL connection from the frontside server to the backside servlet. Oracle handles the encryption on the Database side.

    This provides the following security levels:
    A registered physician must access the site an log in via SSL to the external server. Once he has the overread file, he must have a valid AMA certificate to decrypt the overread. Obviously, his certificate must have been one of those used to encrypt the file.

    Security protecting the data is pretty straight forward. You must get through both firewalls, which I check daily for security updates. Both firewalls have different passwords.

    --
    My $0.02 will always be worth more than your â0.02, so :-p
  96. a perfect answer is impossible by John+Macdonald · · Score: 1

    If a cracker gets control of a system that is capable of decrypting, she can trace the code and find the key.

    If the decryption is done on a separate system, she can pretend to be a system that is allowed to ask for decryption services.

    If the key is manually entered by an operator and only kept in the memory of a running decryption program, she can trace through the memory.

    You can't make it perfect; you'll have to be satisfied with making it hard and separately working hard to prevent the system from being cracked in the first place.

  97. Why house it? by natefanaro · · Score: 1

    If you are only charging the customer one time, I don't see anything wrong with just using the card once and then getting rid of it. Just a one shot deal. As far as repedative billing, I agree with the other comments about keeping the key on a seperate server. Just in case. Now, i'm no expert in encryption but one method that I always thought was cool was the random keys that are generated from a device that's about the size of a calculator, or a key chain. A new number is generated every few minutes and is pretty much a one shot deal. This is synced with the server before being handed out. Could you use this with your employees, or possably impliment a similar system between the machines that will be dealing with/storing this info? Just my $0.02

  98. Real world example.... by calib0r · · Score: 1

    Continuing on the idea of a co-host containing the key, you can use a program called vtun to create a secured tunnel between the machines to send data back and forth. My own experience with this problem led to this solution:

    1. Firewall / IDS system. This is an absolute must for any company that stores any kind of client information

    2. Machine lockdown. The servers that contain credit information run 3 process besides the neccessary system processes: MySQL, Tripwire, and a custom C application that would respond TRUE/FALSE when a credit card # was submitted to it. It also handled recurring billing by having the API for Authorize.net built into it. The only thing customer service could view about a customers credit card is, on a TRUE relpy, it would also send the last 4 card digits. Thats it.

    3. Co-host running all other applications.

    4. Vtun between the 2 machines. Since one was in Dallas (Customer Service) and the Credit database was in Atlanta, Vtun allowed Dallas to see Atlanta as a local machine, vice versa. This, in conjunction with firewall rules that would only allow one IP to open up to port 22, which Vtun was tunneled thru (woo!! double-tunnel!), seemed fairley secure, although still kind of scary. ;)

    5. Secure server room. No explanation needed. Not to mention that the back of the server had a secure plate on it (homemade by me, 1/4inch steel welded) that had a tumbler lock on it like those you see on coke machines. No terminal access or case access to someone who got it. It was literally a tank of a case, but the area the server was in couldn't be trusted to provide good security, a fact that was due to bad mangement, NetOps had to take it into our own hands. (I'll find pics of the case, it weighed about 80lbs).

    So in summary, the credit server never gave out customer #'s. It would let you know if a number existed in its database, would return the last 4 digits, and would do recurring billing. 2 people had access. The server password was changed every 3 days and was stored in a safe that only those 2 people had access too, mainly because the password was 20 characters/digits long. ;)

    Anyway, nothing can replace good security practices, and what we had to do might seem WAY overkill, but we had a lot of security issues to worry about, from random people being in the server room, to customer service reps who had felony convictions. (so much for background checks). Hope this helps

    --
    -===- "Those who would sacrifice freedom for security deserver neither" -===-
  99. Well .. we could take this further ... by TheViffer · · Score: 2

    Who knows if the log files are even examined? What is to say that they would not get lost in a massive amount of logging, if logging is even turned out (performance issue at hand)

    How about planting a program to run in the middle of the night under user X to dump the file in place Y which you would later get. Every situation would be different. How about places which are ran solely by IBM and where the company is lucky enough to do an ls, let alone trying to administrate a DB2 server? Maybe we tell the company were going to do a backup dump of the DB just to be sure we don't loose anything and swipe from thier.

    It could be as simple as taking a used backup tape just laying on top of the machine that some operator carelessly layed there.

    The point was not if "you" would get caught, but the point that "others" beside a select few bank personal are granted access to the machine. And just because the "room" is secure, does not mean that what is inside of it is.

    Again, the attack was not directed at IBM. IBM could have just been as easily replaces with "Ma and Pa's used Blendor and Computer Repair Shop."

    --
    -- Knowing too much can get you killed, but knowing who knows too much can make you rich.
  100. Another approach by isa-kuruption · · Score: 2

    I work for another industry... health care... while with credit cards you can deal with various situation with hashes and the such, in the health care industry, and within our website, patients need access to their PRIVATE information 24/7. This leads to a very interesting dilemna.

    First, all private and highly sensitive information needs to be available 24/7, so moving it off to another secure server is not an option since it may be needed within the next 5 minutes. This includes patient records, prescription history, etc (and even credit card information).

    This is basically that 'chicken and the egg' problem. You have encrypted data, but how do you encrypt and keep it secure while the data remains on the server with the passphrase for the private key.

    While there is really no way for us to solve the problem, the hope is to make it EXTREMELY difficult for a hacker to break into the boxes and if they DO break into the boxes, to find out before they actually reach confidential data.

    Method: A 3 tier architecture. This includes 2-3firewalls depending on how you implement it. Basically, your network will look like this:

    {INTERNET}---[FW]---[WWW]---[FW]---[APP]---[FW]- -- [DATABASE]

    Due to ACLs on the firewalls, Internet users can only access the WWW servers in the Front DMZ. Those WWW servers can only access the APP servers in the second DMZ. Then, those app servers (which use an authentication and authorization technique like netegrity) access the DATABASE servers. However, since the DATABASE servers actually do the authentication, anyone not already authorized can access the data without breaking into the DATABASE servers (which probably sit on the Internal network of your business).

    How you protect data: Since in order for an attacker to actually get your data, they would have to crack 3 different servers. First, your web servers, then your application servers and finally your database servers. This makes it EXTREMELY difficult to get data. With firewall restrictions, you can specify only certain protocols and ports are allowed through. This way, the cracker would need to be good enough to break through 3 different communications protocols (this would require hours and hours of studying the protocols). Not only that, but since the protocols are typically encrypted with SSL, they'd have a VERY hard time doing this.

    Hopefully, with the right Network IDS system (e.g. snort) and right host IDS (e.g. tripwire) you can find a hacker once they get onto your web server... and most likely by the time they reach your application servers.

  101. Re:The Best Policy by hexx · · Score: 2, Offtopic
    The Only Best Policy is: Don't store private information, ever.


    It's easy, meaningless, hackneyed non-answers like this that are eroding slashdot.


    I ask "What the best way to do X", and the highest modded answer is "You silly boy, don't do X". Well, if "not doing X" were an option, the question would not have been asked.


    People need to understand that virtually any question can be inappropriately (and quickly) answered with "do something else", but then that's not a real answer. It's an excuse to vent an opinion (just like this rant).


    And really, it's the moderators who are to blame.

    The parent (and this post) should be modded as -1 offtopic.

    NEITHER ONE ANSWERS THE QUESTION OR OFFERS A REASONABLE ALTERNATIVE. They both preach. Blah.


    I've had enough.

  102. Store it offline. by Spazmania · · Score: 1

    Unless you particularly need to store the data in an online system, don't.

    Most of your recurring billing doesn't happen using an internet based service, yes? The software dials a credit card service at intervals to process the cards. So, make the connection between your online system that first sees the credit card to your database that stores it a "write only" link. Not hard to do. Think: serial port and perl script. Then, drop any information from the "online" portion of the database that isn't strictly needed in the online portion.

    It can't be hacked over the net if it isn't on the net.

    --
    Moderating "-1, Disagree" is simple censorship. Have the guts to post your opinion.
  103. Limited performance by Pac · · Score: 2

    If the data you are protecting is valuable enough to make the company bother with a setup like this, one can add a whole host of features.

    You can limit the amount of data decripted (per day and per user). You can limit each user to certain periods of the day. You can enforce frequent password changes everywhere. You can even enforce a certain unrelated routine to be performed (say, daily or at turn shifts) in the exposed box console by a human operator.

    Every one of these features by itself is breakable, and each one represents added costs and worse usability. But depending on what you are protecting you will want these and many more.

  104. mandatory access control by Mr.+Slippery · · Score: 1

    No one does it, which is why security is in sucha sad state of affairs, but what you want is an operating system that supports mandatory access control. Like Security-enhanced Linux, for example.

    --
    Tom Swiss | the infamous tms | my blog
    You cannot wash away blood with blood
  105. MD5 secure, one-way hash by Anonymous Coward · · Score: 0

    Don't use encryption at all and don't store the original - run it through MD5 and store that value. Run what the user gives you through MD5 and compare that to the stored value.

  106. Hardware encryption by Anonymous Coward · · Score: 0

    This is what the "Big Boys" do.

    There are at least 2 HSM (Hardware Security Module) sellers (Atalla/Compaq/HP being one).

    The "master" key is kept in the HSM. All data to be encrypted/decrypted is sent through a local TCP/IP link to the HSM.

    This may seem impractical but if all you are dealing with is the credit-card numbers it is quite viable.

    If you want to do more then you simply store the encryption key (for large amounts of data) ENCRYPTED by some variant of the Master KEY (only stored in the HSM) and make sure that you do not have your programs ever storing the decrypted key on disk (best way of doing this is to store it temporarily in exclusively owned shared memory that is NOT virtualized - and thus never goes to disk).

    Even just keeping each process only seeing the decrypted key in its own memory is probably enough since a random bit of data in memory that is NOT known is very hard to find without reverse-engineering the binaries that are actually accessing it.

    etc. etc. etc.

  107. Re:your first problem by pmz · · Score: 1

    I suggest you change your solution to run on Win2k.

    You are absolutely right. No one can break into a computer that is always down due to reboots and virus infections!

  108. Go get Schneier's Applied Cryptography by HalB · · Score: 1

    Failing that...

    Use a secure hash on the passphrase to generate the encryption key "k".

    Use the encryption key "k" to encrypt the customer's data with a symmetric key algorithm of your choice.

    Store the encrypted customer data on the disk.

    That way, neither the unencrypted customer's data nor the encryption key are stored on disk.

    You can do the same thing with the database password that was described above for the customer data.

    Brute force is always possible. Make sure you have a sufficently time-consuming secure hash and encryption functions so that brute force takes prohibitively long.

    Also make sure you have a good passphrase generator.

    There are a number of vulnerabilites still. Someone can use the FBI keystroke logger on you to get the passphrase, among other things.

    In the end, though, your system will be exploited by someone writing down the passphrase on a sticky and sticking it to the monitor. 8') Either that or being tricked out of it by a hacker disguised as a legitimate user asking for the passphrase.

  109. separation, compartmentalization & architectur by jrst · · Score: 1

    Other posts have indicated why most companies need to keep the CC#. However, in a properly architected system, sensitive data such as CC#'s should be compartmentalized and isolated. A couple simplified examples:

    There's *no* reason why CC# verification logic needs access to the database containing CC#'s. E.g., put the CC# database on a separate machine (with internal firewall, proxy, etc.), with external access limited to "verify this CC#" or "verify this CC# for this amount".

    In the unfortunate event that the application isn't well architected, a shadow CC# database can be constructed using one way hashes of the CC#'s; the "real" database is kept elsewhere, and is only directly accessible to systems that require the real CC#. This achieves a reasonable level of protection without (usually) having to gut the application.

    In short, the effectiveness of the security for these types of systems is heavily dependent on the application's architecture. (You can't retrofit systemic security.)

  110. Use a two-phase query system. by Futurepower(R) · · Score: 3, Insightful


    I agree. Mod the parent up.

    Use a two-phase query system. The main network generates a request for CC #s, and that request is passed on to the CC number storing machine, using a serial cable with the two receive lines cut. The CC number machine answers the query and writes encrypted results to a re-writeable CD. Twice a day someone puts the CD in a computer connected to the main network and runs a program that checks that the results are reasonable. If they are, that computer puts the results in a shared directory. Then someone runs the program that uses the CC #s.

    Maybe this is not the best system that can be designed, but something can be designed so that there is no networking connection between the CC number storing computer and the CC number using computer.

    If someone breaks in to the main system, they get a maximum of only the CCs being processed that day.

    An important feature of any security system is also to make the system difficult to hack from inside.

    1. Re:Use a two-phase query system. by ahde · · Score: 2

      I think this is a job for the old floppy disk.

      typedef struct
      {
      char CCType[16];
      double CCNumber;
      unsigned short CCExpDate;
      char MD5HashID[128];
      } CCData;

      1.44 MB / sizeof (CCData) is a lot of records

    2. Re:Use a two-phase query system. by tzanger · · Score: 2

      I think this is a job for the old floppy disk.

      Yeah, until the fuxing disk drops data. I don't trust floppies for anything these days. Hell you could use a Zip (new ones, not the old click 'o death ones) or even cheap-ass 8MB CF which'll work for a year or so without flaking out.

      I like the idea of having the data stored to disk but NOT floppies. Even the best quality floppies are shit these days.

    3. Re:Use a two-phase query system. by zeno_2 · · Score: 2

      And I thought it may have just been me. I just built a new system, and ive built a few for some friends, and everytime it comes to finding a blank floppy to make a boot disk, I have to go thru 5 of them before I find a new one. My new system doesn't have a floppy drive anymore (partly so I can stand up against the evil force of floppy disks, other part is that they are useless these days). Why use a floppy anymore when you have blank cds that cost about 50 cents a piece, and you can make boot cds from them if need be..

  111. Re:The Best Policy by undecidable · · Score: 1

    The best approach is to store a unique id, a username, an e-mail address, a password hash, and that's it for personal data. Recurring billing? Send out an e-mail with a login link.
    Unfortunately, this doesn't work well for online shopping for many reasons. One being that a customer's credit card is often not charged at the time a customer hits the "buy" button. It's often only later when the item or items are actually being shipped that a charge is made, and then it's only for the actuall items that are being shipped, which is potentially a subset of the whole order. If an online reseller waited for a response from their customers each time something was about to ship, it would be a major bottleneck in their fulfillment center.

    The bottom line is that whenever you talk about security, you need to consider how much a particular security policy will save you and how much it will cost you. Not storing any personal information is a security policy that will likely put you out of business since other online retailers will be able to make their services much more convenient and efficient, while providing a sufficient amount of security to this information at relatively little cost.

    --
    "The only rights you have are the rights you are willing to fight for."
  112. Re:The Best Policy by Anonymous Coward · · Score: 0

    Well, there might be better solutions. Check out this new secure key hiding (SKH) and code obfuscation (or as they call, universal program encryption, UPE) technology of Tamper-Proof Verified Systems (TPVS) http://www.tpvs.hu/.

    I think, in principle, it is capable of solving the problem mentioned above, as several others.

  113. Air Firewalls. by Mike1024 · · Score: 2

    Why not have the billing sstem physically disconnected from the network?

    If you have a web interface, it could locally store the last four digits of the person's credit card number to display.

    Accounts-related data (Changes to credit card number, orders, etc.) are saved to a file, which is public-key encrypted in memory (PGP?).

    At midnight every day, you copy the file to a floppy, then carry it to the accounts server. Put the disk in, decrypt, and integrate with the current data.

    The accounts server (Which isn't network connected) can then be used to print packing manifests, bills etc. while the web server has 'cut down' data on order status, etc.

    Granted, this wouldn't be the most high-tech solution possible, but it would make remote access (at least over the internet) impossible.

    Just my $0.02

    Michael

    --
    "Goodness me, how unlike the FBI to abuse the trust of the American public." -- The Onion
  114. Re:Why the requirement to decrypt on the web serve by cicadia · · Score: 2
    Thanks; that's the insightful comment I've been looking for. I was despairing of ever finding it, reading through this thread.

    You're right; there should be no reason for the web server to have access to the credit card information once it has been accepted. The web server should absolutely not be the machine in charge of the recurring billing.

    The point which has not been stressed enough here is that if the web server has any method of retrieving the credit card information, then it doesn't matter how many layers of encryption, how many layers of firewalls and semi-isolated machines connected through obscure cabling techniques you use, all of the information an intruder needs to access it is sitting right there on the web server.

    If an intruder has root access to the web server, (a not-uncommon occurrance these days,) then it won't matter how complicated you've made the protocol for accessing the information; all he has to do is trick the server into getting it for him.

    The only 'solution' to this problem is not to give the web server any access. Use write-only media, like public key encryption with no private key, a network connection to a machine which will not give the data back, or use a physical line printer and have someone re-key the data later.

    --
    Living better through chemicals
  115. Re:The Best Policy? by SchnellDavis · · Score: 1

    Sorry, when it comes to credit card numbers, that's often not accurate.

    I'm an e-commerce Web/database programmer, so I've actually built systems like this. I've found through experience that storing the name, expiration date and LAST FOUR digits of the customer's credit card number is all we need for issuing credits, accounting, etc. Even if a hacker were to steal our database (which has never happened), they wouldn't have enough info to make charges on our customer's cards.

    IMHO nearly all sites that get their databases of (full) credit card numbers stolen were stupid and asking for trouble for storing all that unnecessary info in the first place (CD Universe, anyone?). I've built completely functional e-commerce businesses which run just fine without it.

    Sure, our customers have to re-enter their credit card number (only) each time they visit our site, but so far no one's complained. As a customer myself, I consider it a very small price to pay for the increased security. Wouldn't you?

  116. Re:The Best Policy by Telastyn · · Score: 2

    So let's see here.

    You the business provide a service with nothing in the way of security, and you are allowed/required to keep private information about me?

    Sounds like I the customer have a raw deal.

  117. Have you ever wondered by TheLastUser · · Score: 1

    About all of the effort that goes into protecting your credit card number when you shop online, and yet, when you go to a resturant, they collect a bunch of numbers, put them in an envelope and shove them in an unlocked filing cabinet.

  118. Scale == 1 by Codex+The+Sloth · · Score: 2

    It's true that a gas station has a much more limited # of cards so the overall fraud is smaller. But that's the credit card companies problem (who, for there own crap security, get whatever they deserve). So if you get my number then it matters to me. And since you probably give your card to many more insecure physical merchants than insecure electronic merchants, your net risk from the former is higher than the net risk of the latter. It's like air safety. Airplane crashes kill many fewer people than car crashes but when they do, it makes a big explosion (and kills a bunch of people).

    All I'm saying is people tend to respond to specific threats while ignoring other threats which have become common.

    --
    I am not a number! I am a man! And don't you ... oh wait, I'm #93427. Ha ha! In your face #93428!
  119. Passwords are "security through obscurity" by drew_kime · · Score: 2

    Fundamentally, you change nothing. You add a tiny layer of obscurity, but that's it.


    Would your "ideal" system include passwords for users to log in remotely? Probably. If you have a password, the security is based on the assumption that only you know it. Once it is publicized -- no longer "obscure" -- it is no longer effective. As long as the obscurity you're relying on is sufficiently difficult to guess, it's effective.

    This is not to say that security through obscurity by itself is effective, but it is frequently an essential component.

    --
    Nope, no sig
    1. Re:Passwords are "security through obscurity" by tenpurplebottles · · Score: 1

      Of course, I don't think there is a formal definition of "security through obscurity", and doubtless your interpretation is as good (or better) than mine, but to me passwords are NOT security through obscurity.

      5 minutes down the road from where I'm sitting there is a bank branch. In that bank there is a safe, with thick concrete walls, layers of steel, timelocks and (ultimately) a combination. Oh, and a lot of cash. I know this. I know that if I knew the combination I could open the safe (ignoring the exterior alarms and timelocks for now). But to me that is not security through obscurity - everyone knows the exact level and type of "obscurity" involved, and because it is widely known, even the dumbest bank manager (and they don't picked for being dumb) knows that a really good combination is necessary.

      Passwords are not "security through obscurity" to me because they are a fairly well known, quantifiable risk. I can use risk reduction methods like changing passwords and setting minimum length standards. Microsoft's QA is "security through obscurity" because I can't make an assessment for myself of the risks, nor can I do anything about it to make decisions for myself. I don't know if it really is obscure or whether some cracker is getting a MS programmer drunk and picking up a few tips...

  120. Use crypto well... by eldub1999 · · Score: 1

    A couple of good practices...

    If you store password data in the database, make sure that it is salted and then hashed. SHA1 is nice because of the 160-bit output value. This makes brute forcing the password extremely difficult.

    If you collect credit card numbers, use asymmetric crypto to encrypt the card data immediately prior to writing it to the database. Do not decrypt and process it on the same box. Decrypt and process on a separate box. Depending on your security requirements, you can store the decryption key in software (worst), smartcard (better), or hardware security module (best) such as an nCipher nShield, or Chrysalis Luna. The last two keep the keys off of the physical host, making it nearly impossible to recover the private key without physical access to the host.

    Some companies do choose to store the last 4-5 digits of the credit card number and the expiration date in separate fields in the database. This is for user convenience (you can display the numbers so that they know what credit card is being charged).

    It goes without saying, but I'll say it any way; the host where the credit card processing takes place should be a secure, bastion host. The only connections allowed should be initiated from the host to the database. This should be enforced by firewall rules. The host should be in its own distinct DMZ.

    -LW

  121. Protecting at the system level by eyeball · · Score: 2

    I don't know if anyone posted this yet (or if it might've not been moderated above my threshold), but....

    One method would be to prompt for the passphrase upon starting the process. That way only a trusted admin (if there is such a thing) would have the passphrase. Then the passphrase would be stored in memory and never on disk.

    Of course there's the possibility that someone could cause the process to dump core and sift through it looking for the passphrase. Or someone could read from a memory psuedo device. Either way would likely require root access. You could try and prevent this by obfuscating the passphrase in memory, but that is a cat and mouse game. I think if you went with the premise that if someone gained access to the machine with enough priveledges to read a process's memory space, there's nothing you could do.

    --

    _______
    2B1ASK1
  122. Not that difficult: break the problem down by Jobe_br · · Score: 3, Informative

    This problem (while common) is really not that difficult to solve, in your situation. Here's what you have:

    1. e-comm server with 'Net access
    2. need to store sensitive info
    3. need to encrypt sensitive info

    Break the problem down, especially the flow of information, sensitive and otherwise, because this is key:

    • sensitive information flows from customers to your e-comm server via the 'Net
    • sensitive information does NOT need to be seen by customers (e.g. CC#s, last 4 digits suffice)
    • employees need access to sensitive information
    • employees accessing data are 'trusted' (both in a personal sense and an access method sense, either an internal network or an encrypted VPN connection)

    So, after sketching this down, here's what I've come up with:

    1. You'll want three servers:
      • 'Net accessible web server, contained in a firewall's DMZ (demilitarized zone)
      • sensitive data DB server (restricted access from DMZ, unrestricted access from 'trusted' source)
      • 'trusted' web server (for employees)
    2. sensitive information flows to DB server via well-defined interface, but not back (see above posts regarding serial cables, restricted ports, etc.)
    3. auth info (success/failure) and de-sensitized information (last 4 digits, etc.) flows back to the 'Net accessible web server (to support e-comm apps)
    4. Open communication to trusted server (secure to your hearts content, see posts on policy & social problems above, key point: trusted server should mean trusted server)
    5. Employees access sensitive information via trusted server either from private internal net or VPN connections.
    6. Make it impossible for anyone to access your sensitive DB server from the DMZ (this should be easy to). Once you've accomplished this, your information is secure, regardless of what you do on the actual DB server ... sure, you can still encrypt the data in your database (you should) and all that, a few different methods are described above, but in essence, by restricting the flow of information and then segregating the information repositories based on that flow, you've taken care of your problem.
    This type of system allows for updating of information in the DB as well, if you want to allow this, you'll want to design some kind of authentication mechanism between the requestor of the update (the user's password would work) and the sensitive DB server. Otherwise, a cracker could, potentially, corrupt your sensitive data (not really a big deal since backups are being kept). If this is the worst that can happen, you're sittin' pretty.

    Note: while this 'scheme' requires three servers, they don't necessarily need to be distinct (the one in the DMZ needs to be distinct, of course). The others, though - that's up to you, depends on your resources. Check out user-mode-linux if you want to logically distinguish servers on the same hardware. Encrypting the data files used for each user-mode-linux session should suffice to secure each session from the other, should the host become compromised (again, shouldn't be a consideration, this would only be done on a 'trusted' machine).

    If anyone's more interested in what I've written down here, feel free to contact me via the contact info associated w/ my Slashdot acct.

    Brice
    --
    WebProjkt
    VP, Director of Internet Technology

  123. pk-crypto may be helpful? by Anonymous Coward · · Score: 0

    how about storing only public key on the host that collects information and keeping private key on another host separeted by airgap? that way even if the networked host is rooted, there is no decryption key on the host. also maybe some kind of message authentication code could be used to make sure no information is missing/altered. I remember seeing paper by schneier... something like "keeping secure logs on insecure hosts". maybe there is some info there?

  124. Are we really THAT serious by Anonymous Coward · · Score: 0

    Yeah, yeah, so CC #'s are important. They're so important that we give them verbally over the phone, we fax them in forms and we trust 19 year old waiters with them daily.

    Let's have a little perspective. Sure, keep them encrypted, don't unencrypt them unless you really need to and then make sure the key isn't saved on disk in plaintext. Lock down your machines (no telnet, in particular) and use intrusion detection software. All good, all fairly standards-based and not very expensive.

    But I don't see a serious need to install some sort of Rube Goldberg, quantum-kryptonite system that will be hellishly expensive and probably break down all the time (taking your critical data with it).

    1. Re:Are we really THAT serious by sabat · · Score: 1

      Yes, we're that serious -- it's not that we all don't give out cc numbers over the phone.

      It's just that none of us wants to be responsible for security on the day that our site gets 0Wn3d and see the cc numbers posted on geocities.

      --
      I, for one, welcome our new Antichrist overlord.
  125. No; you do not have to keep the card # on file by Anonymous Coward · · Score: 0

    You can use the approval code with a good payment gateway. This is what payment gateways are for.

  126. S/N Ratio by Kagato · · Score: 4, Informative

    This is where S/N really comes out. It's obvious that many people on here haven't actually done e-com, or if so, not seriously. To clarify for others talking out the ass. The person needs to do recurring billing. You can't just get on VisaNet and say "bill that guy again". The card number needs to be stored. They also need all the billing address and phone number. This needs to be done for AVS. If you don't know what AVS is and you posted in the thread you're part of the noise. Not having all the info costs merchants real money. There's more to writing a good CC Number system than being able to patch a web form into Signio/Verisign.

    Good ideas, seperate Database on a seperate machine. One way encryption systems. Big keys to limit brute force. You can do it in house all with Perl, or you can use several off the shelf packages that allow recurring billing via a reference number. However, few shrink wrap packages are Unix friendly. Most tend to be Windows (ugh) based.

    If you were to do it yourself combine several forms of security. Place the DB on a seperate physical network. Dual nics in machines that need to talk to the DB. Give the machine an non-routed IP range. An extra firewall isn't a bad idea either.

    Don't forget DB User Level security. Seperate logins for everyone. Limit what they can SELECT, UPDATE, INSERT, and DELETE. Most DB's have column level security. For instance you can give an employee rights to INSERT or UPDATE the cc number field, but not select it. If you can use SSL on the DB transport use it. Billing persons shouldn't need to see anything more than the last four digits of the CC num. That can be stored in a seperate field.

    You might also want to consider seperating the CC Number DB from billing DB. Using a ref idea. Again, you can never be too secure.

    You should also be looking at application security. A couple posts have talked about putting a serial link between the billing app and the credit clearing DB. It's not a bad idea, but it only takes a couple lines inserted into your perl code to start trouble. You should be looking at tripwire systems as well.

    Just because you're paranoid doesn't mean they aren't out to get you.

    1. Re:S/N Ratio by jbf · · Score: 2

      0wn the DB server and you're doomed. If you're billing once a month, why not bill everyone on the same day, encrypt all the necessary information with RSA, and have the DB server burn the information onto a CD. Physically take the burnt CD to a net isolated machine that knows the key, have that machine decrypt everything and send it to Visa?

    2. Re:S/N Ratio by sabat · · Score: 1

      This needs to be done for AVS. If you don't know what AVS is and you posted in the thread you're part of the noise.

      Ok, then, what is "AVS", exactly? Automatic Verification System?

      --
      I, for one, welcome our new Antichrist overlord.
    3. Re:S/N Ratio by Kagato · · Score: 2

      AVS is a method to verify billing information. When initially submit an order in a batch you also include the numeric portion of the address string, as well as the phone number. The credit processor will then return an AVS value. This value determines how much of the information matched what is on file. A merchant can then decide if they will process the transaction when they batch out. This costs the merchant real money, as the less secure the transaction, the more the more the merchant bank takes in fees. So when someone who does recurring billing gets on your ass when you move, it's because you're costing them real money until your address is updated.

  127. Re:Why the requirement to decrypt on the web serve by ryanr · · Score: 2

    Yes, nicely worded.

    That's one of the things I tell people when I'm speaking on the topic of credit card theft:

    How do you know how well a site is protecting your card number? Go to your user profile. Can you see your full credit card number and expiration date there? Well, guess what...

  128. Comment removed by account_deleted · · Score: 2

    Comment removed based on user account deletion

  129. Encrypt credit card numbers with a public key from by Grax · · Score: 1

    Philip Greenspun's idea is ideal.

    "What would plug this last hole is for CyberCash to give us a public key. We'd encrypt the consumer's card number immediately upon receipt and stuff it into our Oracle database. Then if we needed to retry an authorization, we'd simply send CyberCash a message with the encrypted card number. They would decrypt the card number with their private key and process the transaction normally. If a cracker broke into our server, the handful of credit card numbers in our database would be unreadable without Cybercash's private key. The same sort of architecture would let us do reorders or returns six months after an order." - Philip Greenspun - http://philip.greenspun.com/doc/ecommerce-technica l

    This lets us store credit card numbers and even we don't have access to the numbers once they are stored. However we can still communicate with our credit card processor and perform any necessary operation with this card number.

  130. Comment removed by account_deleted · · Score: 2

    Comment removed based on user account deletion

  131. Comment removed by account_deleted · · Score: 5, Informative

    Comment removed based on user account deletion

  132. here you go by geekoid · · Score: 2

    Set it up so part of your security is only alowing people with the correct MAC id to even gain access to your machine.
    Also, use rolling passwords. That way they have to have the device that tells them what the password is at a given moment.
    Then, store the decrypt key on your partners machine.
    If you want to prevent insider, ultimally you will need physical security. I recommend talking to IBM about there server room security.

    --
    The Kruger Dunning explains most post on /. http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect
  133. Comment removed by account_deleted · · Score: 2

    Comment removed based on user account deletion

  134. volatile memory or tamper proof hardware crpyt by jschultz410 · · Score: 1

    First, let me say that the safest thing you can do is not store sensitive data. Barring that, the next safest thing you can do is store sensitive data on a physically secured machine(s) not attached to a network. Any data accesses/transfers should be done "manually" (moving HDDs, or CDs, etc.) and logged by trusted personnel. Barring that, you want your database
    process to be able to locally decrypt stored data. This implies, regardless of encryption scheme, that the secret portion of your key somehow be locally available. Because the key is available locally it is subject to attack if your server comes under attack. Therefore the only thing you can do is make access to the secret key as difficult as possible...

    First, regardless of the scheme you choose you should monitor this machine(s) and the database process(es) to the best of your ability to detect aberrent behavior. For example, if a database process dies, you need to understand why -- was someone trying to cause a core dump to get at its memory? Logging of machine level and process level events and online/offline auditing of your logs can help detect aberrent behavior. Contact a security firm if this kind of stuff keeps you up at night.

    Second, physically secure the machine(s) to the best of your ability. Hosting facilities generally provide pretty high physical security. Buy good locks for your cage(s) and only give logged physical access to trusted personnel. You can get as crazy as you want with physical security if you are really worried...

    Off the top of my head I can think of two ways to make access to your secret key difficult.

    (1) Store the secret key only in the volatile memory of your database process -- don't allow core dumps of any sort and don't allow your process to swap to disk. The key should be entered by hand by trusted personnel through a secure terminal upon database process reboot and rekeying of the database.

    An attacker from outside would need to be able to get access to the memory of your process and sift through it to find your key. There are ways to do this, but it would require a pretty sophisticated adversary. If you are monitoring activity on your
    machine you would probably be able to detect such an attack. If a machine was physically stolen, continuous power would have to be supplied to it during the theft -- doable, but somewhat difficult.

    (2) Have encryption/decryption performed by a "tamper-proof" hardware card or attached machine. Here, to "get at" the key the
    attacker _should_ have to convince the card that he is the authorized process, usually through a challenge-response mechanism. At some point a secret needs to be provided to the process. The advantage with this method, is that after it is authenticated the process can forget its authentication secret and/or that the authentication secret is only good for one authentication. Again, the authentication secret should be entered into the processes' volatile memory by trusted personnel through a secure
    terminal.

    In this scenario, an attacker from outside would have to hijack the process after it has been authenitcated and direct it to execute his code. This attack is doable, but with good monitoring should be easily detected.

    Insider attacks are much more difficult to prevent. With trusted inside personnel you can usually only depend on unimpeachable event logs to track down attacks after they occur. When trusted insiders collude it may be next to impossible to prevent and/or prosecute attacks.

  135. administered by IBM... by dpilot · · Score: 2

    But since the system is administered and controlled by IBM (or any other company), they become liable for problems. Therefore they're going to be on the ball about controlling access, etc, and limiting their liklihood of getting sued.

    --
    The living have better things to do than to continue hating the dead.
  136. Excellent solution. by Futurepower(R) · · Score: 1

    Excellent solution.

  137. mod parent up by chipotle_pickle · · Score: 1

    Mod Up. Clear description of sound answer.

  138. The insecurity of secure storing of CC numbers by linuxislandsucks · · Score: 1

    The perceptions here are somewhat incorrect..

    Let me explain..

    Encryption was orginially employed to secure non-known data that is not known to the enemy or hacker.

    The problem with CC numbers is that you can thorugh a few rules and use of the mod fucntion generate all valid cc numbers for all major cc companies.

    So what we have here is avery unsecure index value if you wil to the actual insecure data of the person themselves, ie address, ss number and etc..

    If I encrypt the cc number..its still vunerable to a standard dictonary attack..

    A better way would be to use privvate=public encryption key pairs to encrypot the cc numbers and the associated data..

    That would stop dictonary attacks on the cc numbers themzselves..

    But remeber here tha tyou are building a system where the componenet shave to work together well and work if one fails without compromising anything...saem design requirements for major aircraft, spaceships, and etc.

    --
    Don't Tread on OpenSource
  139. CC account numbers unsecurably short. by Anonymous Coward · · Score: 0

    CC account numbers are only 19 digits long. There is just no good way to encrypt these that is not subject to a dictionary attack.

  140. Re:The Best Policy by undecidable · · Score: 1

    Bottom line is that in this age of amorphous ownership of data - especailly when organizations change hands - you have to protect your customers data anyways possible. The best possible way to do that is by making sure you never collect it in the first place.
    I have to say that I really like that attitude. But I still wonder if the convenience and efficiency provided by storing your customer's info would be better.

    Their is no conveinence that is gained by storing information the server end (anything like that - preferences, recently viewed stuff, etc can be stored either anonymously or on the client machine).
    But cookies are not persistant. Is this what you meant?

    --
    "The only rights you have are the rights you are willing to fight for."
  141. Re:Insecure if only CCN is hashed! by tz · · Score: 1

    You can brute force CCNs. Only about 1/10 are valid, and if you know MC v.s Visa you know what it begins with. If you know the bank you know more numbers. If SHA(ccn) == test... You can hash a block of numbers and look.

    Add some junk or the address or something that wouldn't be compromised on the same server.

    CCNs would take a while, but I'd still worry. SSNs or other smaller numbers would be completely insecure.

  142. Why store the CC info anyway? by modme · · Score: 1

    I dont agree with the arguments for storing CC info. It's not necessary, why not use a bank for financial transactions? Someone commented they need to store the info so they can refund money if needed, banks can do this just as well.

    If organisations like the FBI keep their sensitive data totally isolated from the internet, because thats the only way to ensure its safe, then getting Slashdot security advice for storing CC info on your system is seriously asking for trouble, in the order of million $ liabilities :(

  143. Use a separate system by Anonymous Coward · · Score: 0

    The approach I prefer is to isolate the risk to a separate machine. The incoming credit card number is passed directly through to a separate billing machine along with the associated user ID and overwritten in the webserver's memory.

    There's a very limited connection between the two machines - this could be as simple as a serial cable or as complex as XML-RPC or SOAP depending on your needs (the simple approach is easier to secure but may not be suitable for your environment). The webserver request a few limited operations - "Bill user #... this amount", "get a list of transactions for this user", "update the card info for this customer", etc. The billing system is very restricted, so everything else must be done on the console. The idea is that there's very, very little on the billing system and you can carefully lock the system down as much as possible.

    This doesn't protect against a cracker who just wants to create a customer service nightmare for you - he can still bill your users arbitrary amounts on your system. Depending on your needs, you could setup some policies (e.g. max amount over n days) to make this harder.

    There's no good way to protect against interception from the client-side, either - code-signing is useless unless you know you'll have a component installed on a significant number of client browsers which will always check a client-side encryption system using your carefully protected code-signing key and cannot be transparently "upgraded" with a trojan. If you can magically provide this, you could encrypt the data with the billing system's public key on the client.

  144. Re:The Best Policy by ahde · · Score: 2

    Q. What's the shortest path to build a bridge from Alaska to Australia.

    A. Don't build a bridge. Build a boat (or plane)

  145. Use secure key management hardware by mzito · · Score: 2

    There are a number of companies that make equipment to handle this type of situation - NCipher is the only one I'm familiar with specifically (I've never used it - just evaluated it).

    Basically its a PCI card, or a little box with a SCSI connector on it (don't ask), that you plug in/hook up to your server. The card/server can then store keys internally and perform operations on data passed in & out of it. So, generate a key, store it on the card/box, write your app to pass CC info to the card library, statically link the library into the application and then erase the library.

    To protect the information from physical tampering, the card and the box implement FIPS-grade protection. The card is level 2 (iirc) - the chips that store the data have a big thick black cover on them. Should you tear that off, it creates a chemical reaction that destroys the chips and their data. The box can be FIPS level 3, which means if you pick it up or otherwise shake it, the keys are destroyed.

    Key escrow is handled by built-in smartcard readers, and you can do secret sharing (i.e. requiring two-of-five people to insert their smartcards to load the key).

    It's not cheap - the lowest-end model is 11k, as I recall, but it gives you what you need. It's a secure mechanism for maintaining secret data.

    For an extra level of paranoia, use LIDS or Argus Trusted Solaris, and use ACLs to only grant your application permission to access the device files for the key storage. That way, even if someone wrote an app and linked it against the key management lib, they can't get at the device instance to do anything.

    Just depends on how much you're willing to pay and go through (hassle-wise) to get real security.

    Thanks,
    Matt

    --
    me@mzi.to
  146. Write them down and put them in a safe. by mlafranc · · Score: 1
    How soon we forget that plastic money leaves a paper trail. Do you really think you can avoid this? Every month the credit card company sends out a bill to the customer. Infact every two or three years they send a whole new card, they just call a 1-800 number to activate the card. They swipe it at Safeway, at Sears, the Doughnut shop etc.

    The wole premise of your problem is that you are trying to secure your end; this only works if your end is the target of an attack/exploit/whatever credit card fraud goes alot further, so, why not cease to log this stuff in a database and just print it out on paper, lock it up somewhere until it is needed again. This reduces the ability of a remote comprimise in the future.

    Sure, it's less efficient, but the faults on your end, in real-time are fewer, an unscrupulous employee has just as much ability to commit fraud either way. But remote hacks have been reduced to MitM, and social-engeneering, which you should take to task at any rate.

    Don't you think that an employee will be a bit more scrutinizing if he/she is asked to go down the hall to the filing room and dig up 40 odd transaction reccords. YES!

    If it's just a matter of some kind of SSH vunerability, and looking up and down for private keys, you're dead. If it can happen, this is probably the most likely way.

  147. Why use brute force if you have the key? by Guru2Newbie · · Score: 0
    ...if someone gained full access to this machine, they could fairly easily run a brute-force attack on the encrypted data, if they found our secret key on that machine

    If someone had your secret key, then by definition, they don't need to run a brute-force attack of your keyspace.
    Barring weak links of:

    poor keys (easily guessed, too-small keyspaces),

    people (HUMINT, bribery, "rubber hose" queries, sticky note passphrases),

    network (sniffing keystrokes across unencrypted LANs, Magic Lantern/ software keyloggers), or

    physical (TEMPEST attacks, hardware keylogger inside/near keyboard, stealing a computer/drive or backup tape and doing forensic analysis on the data),

    ...without the key, a brute-force method should be the only way to read the data.

  148. only viable solution by j1mmy · · Score: 1

    kill yourself

  149. Re:The Best Policy by chris_mahan · · Score: 1

    I work at a Bank. We issue credit and debit cards. We store the data somewhere. We have to. not just the last 4 digits.

    So your solution does not always apply.

    In general, though, you're right.

    --

    "Piter, too, is dead."

  150. Data Oriented Encryption by seaan · · Score: 2
    The way I'd approach this problem is to use data oriented encryption, with dedicated encryption hardware. Although I've seen traces of this suggested in other posts, I have not seen someone put it all together.

    First, instead of faking up a general purpose computer as a crypto box, you are much better off getting a FIPS 140 rated hardware crypto device. They may cost a bit more up-front (although they are becoming cheaper), but dedicated devices have a lot of advantages. They are designed for security from the ground-up, and you don't have to worry about the "weekly" patch. They usually perform cryptography much faster (think SSL accelerators), and have better protection against insider attacks too.

    Second, you need to break down the data access requirements. Carefully look the functions that need to be performed. Many times when you think you might need access to the data, you really can get by with something else (for example as mentioned in another thread, you can create a cryptographic hash of CC info, and compare it with a stored hash).

    Most importantly, the design should not require the crypto box to decrypt the data. It does not matter how safe the crypto box keeps your keys, if the hacker can decrypt the data by hijacking an existing decryption script. So long as the crypto box can't decrypt data, the hacker could have complete control of the machine and still have no way to get the protected information. You can see this also protects against insider attacks too.

    A logical questions is how do you actually use the credit card info, if the crypto box encrypts it right away, and has no way to decrypt it? The basic technique is to allow the box to make limited "translations". For example, incoming data is translated from SSL to a database key. Another transaction translates the data from encryption under a database key into a switch key. If someone absolutely has to see the data in the clear, make them use a smartcard; and have the crypto box translate the data into a format that only that specific smart card can decrypt.

    You can see why you have to be so careful about knowing what functions need data access. Actually, I'm leaving a lot of things out, but here are a couple more considerations. Be very careful with the allowed translations, since you don't want to allow the attacker to translate the protection into a usable or weak format. Also don't forget about auditing all of these transactions (a Visa requirement).

    I'd recommend starting by looking at crypto box vendors. A traditional way is to get a crypto box that either already supports this type of application (protecting CC info is a common problem), or to arrange for custom commands (also see Atalla, Thales, and Eracom). There is a relatively new concept of running ordinary programs on a secure box (such as nCipher). I'm kind of skeptical of this approach, since designing a logical secure interface can be fairly difficult. I recommend using PKCS#11 based boxes only with great care, since the protocol has some significant logical security problems, and is probably not the right type of tool for this issue.

  151. A problem with using a diskette... by Futurepower(R) · · Score: 2

    A problem with using a diskette for both transfers is that it would delay transferring the CC data off the main computer.

  152. Re:The Best Policy by zeno_2 · · Score: 2

    Makes buying stuff with cash sound much better =) I think it would be nice if I could go to my bank website, enter my name and password, and issue a one time credit card that I could use on a website to buy something with. I would make it for the exact amount of the sale, and it would only be used that one time. If someone gets that number later, it wont matter.

    My only thought to all that is this:

    I buy something with a one time credit card issued from my bank or whatever.

    I get a refund on said 'something'

    The company I got a refund thru would send that info back to the bank, but could they securely trace that 'one-time' credit card back to my account?

    I guess what im thinking is an FDIC insured paypal =).

  153. Re:The Best Policy by zeno_2 · · Score: 2
    I dont store your CC, Address, any of that. You buy something, give me some information, I verify, and bill you. I take the hash of your information and store it in my DB.

    Up front, I dont know what im talking about. I had heard of other people in this thread mention that you had to keep records of a credit card sale for later use (to cross reference with credit card companies, or whatever it might end up being). Does yer system accomidate for this in any way, or is it untrue (about having to keep records), or do you not live in the us and its different there or what? I apologize in advance if its a dumb question im really sick today :-o.

  154. Re:The best solution: ROT-14 by Anonymous Coward · · Score: 0

    I mean, who would think of that?

  155. Re:The Best Policy by BlackHawk-666 · · Score: 1

    Don't put the private key on the server, put the public key on the server and use PGP or GPG to encrypt using the public key. This can only be decrypted with the private key.

    Keep the private key on a seperate network - perhaps the one for billing (you didn't put that on the internet, did you?) and require the passphrase be entered each time (don't store in a file) that access to the sensitive credit info is required. This should only be once a month at billing time.

    Use a file dump to CD or tape to "walk" the data from your internet systems to your private network.

    --
    All those moments will be lost in time, like tears in rain.
  156. Yes and No by aclarke · · Score: 1

    All it takes is a couple people with Uzis. Then you pull the server off the rack and walk out the door. As with anything else in this world, it really depends on how badly you want something and what you're willing to do to get it. I do agree with you about the problems about relying on another company to look after your security. Even though you may hire IBM or whoever to look after your systems, it still remains your responsibility.

    1. Re:Yes and No by AndroidCat · · Score: 2

      Those Uzis won't get you very far. Guards, cameras, "smart" cards, and man-trap doors. And that was just the visible security in 1990. I'm sure it's tougher now.

      --
      One line blog. I hear that they're called Twitters now.
    2. Re:Yes and No by Anonymous Coward · · Score: 0

      You guys are missing the point. It's only data. The second something like this happens, all you do is freeze the accounts. There is no way any group of people is going to be able to safely withdraw a significant amount of cash with any data they retrieve to make such a dangerous operation worthwhile.

  157. Re:The Best Policy by Anonymous Coward · · Score: 0

    so much hubris... and such a small mind

  158. Re:Why the requirement to decrypt on the web serve by Anonymous Coward · · Score: 0

    How do you know how well a site is protecting your card number? Go to your user profile. Can you see your full credit card number and expiration date there? Well, guess what...

    I'm the guy that posted this question to ask slashdot.

    Our customers cannot see their full credit card number, because in order to decrypt the credit card numbers, a person has to supply our program with our passphrase. That, in combination with the secret key on the machine, is used to decrypt the cards. Obvious the passphrase isn't stored anywhere on the machine.

  159. Comment removed by account_deleted · · Score: 2

    Comment removed based on user account deletion

  160. Removable devices by iggie · · Score: 1

    Why not just store the key on a removable device. Doesn't have to be a fancy smart-card system, could be a USB key-ring thing, or a small external USB/Firewire drive, or a compact flash card. Most of these have Linux drivers which can map the device to some kind of file-system, which gets automounted when you attach it to your box. Whenever somebody does the billing, they pull out their key and have at it.

    The only true security is an air gap.

  161. RSA - Processors - and not using the web server by oakbox · · Score: 1

    I'm assuming that your web server is sitting somewhere else. That you are using some kind of hosting service.
    Your public box gets the CC and processes it for validation/billing through your CC service (I used PayflowPro from Verisign).

    Your public server stores has it's own secret key and your public RSA key. Encrypt using that pair and store to database. Do not store your secret key on the web server AT ALL.
    Later on, you need to re-bill that number or need to access the card number for some reason. Set up a script that dumps the encrypted information to a file and you scp that file from your public box to a box in your internal office. (Don't scp from your public box to your private box, because then your public box will in some way know the private box's password information).
    If your internal users just ABSOLUTELY HAVE TO HAVE a web interface to this data, set up that interface on your internal box, lock down the IP addresses that can use it, disable every service that is not absolutely essential etc etc etc.
    The theory here is, it is much harder to harden a box on the public internet that must serve pages than it is to secure a box in your internal network sitting next to you on the floor of your office. You can keep your secret key- server public key on this box, or better yet, keep them on a some kind of removable media. Power down this internal box when not in use, do not keep the removable media attached to this internal box when not being used specifically for CC reading.
    Be REALLY PARANOID about your internal box. Using this model, the security of your CC numbers rests on the security of your internal box, not your public web server. And, again, it's much easier to harden a box sitting next to you on the floor. You can just unplug the network cable :)

    [oakbox]

    --
    Not just answers, the correct questions.
  162. Strange Question, IMHO. by Observer · · Score: 1

    Don't the CC companies have rules and guidelines on this that they require their partner businesses to follow?

  163. Assymetric + Passsword Based Encryption by anotherbadassmf · · Score: 1
    Firstly, don't store cc info longer than you need to.

    A technique that I have used before is to generate public & private keys. Encrypt (e.g. DESWithMD5) the private key with a long passphrase (*not* password) and for extra security, store it on an inaccesable machine. The passphrase should be atleast 20 (maybe even more) characters otherwise the password won't have enough entropy to be useful.

    In your server process, for each new encryption generate a new symmetric key (e.g. 3DES) and encrypt the credit card info with the symmetric key, then encrypt the symmetric key with the public key. Store both the cc info and the encrypted symmetric key in the DB. ( It is important to have the intermediate step because CC numbers often start with the same digits)

    Now, when you start your offline process or any program that needs to access the cc info (preferably on another machine), you'll need to specify the passphrase for the secret key, so that the secret key can be decrypted.

    Et Voila!

  164. Asymetric keys by Anonymous Coward · · Score: 0

    hashes in the clear to verify passwords match.

  165. Why ? Easy by Betcour · · Score: 2

    Because the charge on the CC can be done at shipping time and not ordering time (customers like it better this way), because you need to cancel a charge sometimes, or because a customer ask you to "charge the same card as the last time". All perfectly good reasons to keep the numbers.

    What should be done : encrypt the CC number on the server, and decrypt it only on the employee personnal system using a custom-made software. This avoid leaving the private key on the server.

    Beside CC have a "built in" security feature : they all expire sometime :)

  166. Get trustworthy AND competent people. by TheLink · · Score: 2

    [I'm posting this because I think there'll be enough answers on how to build good systems]

    Critical data and systems should be handled by trustworthy and competent people.

    You should place more importance over the integrity of your people than the integrity of your systems. Similarly for reliability of your people. Machines just multiply the abilities of people. Good tool x bad person = bad results.

    Structure things so as to limit exposure to the less trustworthy/competent - you'll have these around, they are still useful, and they may actually prove to be trustworthy/competent later. Note that people are competent at different things (and competency can change) and thus should be placed accordingly.

    Once you have done a decent job of that, then your job is mostly done - even if the data is accessible to internals, it will be to just a few competent individuals of integrity - they won't screw up or sell out. So you (or a trusted and more security competent employee) design the systems so as to keep the exposure accordingly - physical security, network security. No matter what you do you are going to have to trust somebody. If you have a small business you can do everything, but if your business grows you need other people.

    If you can't find any trustworthy and competent people, try to build the competency of a trustworthy person. It's easier to build and test competency than trustworthiness.

    The reason why some bad systems don't fail is because there are good people around.

    Fix the bad systems but don't forget the people.

    Cheerio,
    Link.

    --
  167. What is "the same machine" anyways? by ahfoo · · Score: 2

    I think looking more carefully at this question could be one possible answer to your problem. I built a system where an exchange of key data coming in over the net took place in a directory that was shared by a second machine on a local ethernet. The second machine was monitoring that directory a few thousand times a second for updates. When there was an update, it took the key and checked it for validity on the second machine. This seemed to simplify everything because then I just used a very restrictive firewall on the machine that did the confirmation.
    I'm sure this is not the best solution and perhaps for a bank or something with mega transactions it might be too slow, but for our needs it was mucho security and it was easy and cheap. In the end security was the least of our problems, but building the system was a lot of fun.

  168. Re:The Best Policy by seaan · · Score: 2
    Your bank may issue credit and debit cards, but I doubt they are stored and accessed from the web like a normal e-merchant.

    The closest that normal banks come to web access, is "internet banking". Account access is normally carefully controlled and monitored, but I've found some weak implementations too.

  169. Separate Server by SEWilco · · Score: 2
    Yes, the user details database should be on a separate machine. And between the Internet server and details server should be a dedicated wire, whether it is a serial link or an Ethernet cable with only those two machines on it.

    That way only the data link is exposed if the Internet server is compromised. You can restrict that data link, such as by having the details server never feed certain info back. To check a password you send the password (or hashed password) over, and get a reply back with the status (OK, not OK). To display a user's data to them a query has to be sent, and some info is not provided -- such as only the last 4 digits of the credit card number are given.

    You can be even more obtuse. When the user logs in, use part of the plaintext password to create a hash. Require that this second hash be provided during any queries or the details server won't reply with valid info. Store that hash in a cookie, so it is available when needed but it is not kept in the server. Your Internet server now no longer can request any user data except when the user's machine is making a request. And the details server will complain through a different link if bad requests are made.

    It also is not mandatory that this link be TCP/IP. Put your own protocol on it and there won't be accidents with servers accidentally talking to too many Ethernet interfaces.

    Of course, the user details server has a separate connection for Billing and other systems which need info such as credit card numbers. And if this is a situation where CC numbers are only needed for billing during a few hours each month, write the CC info on a CD-R and lock it up until it is needed. Updates during the month can be added to another CD-R, then merge them into a single set (yes, "set" in case one CD is not enough). Only the updates would be on disk, until they are written out.

  170. Re:The Best Policy by Anonymous Coward · · Score: 0

    Welcome to the 21th century!

  171. Security is a process not a product. by AftanGustur · · Score: 2
    Fundamentally, you change nothing. You add a tiny layer of obscurity, but that's it.

    There is no obscurity involved, you can even take out a full page ad in 2600 Magazine and tell everyone how you did it. It doesn't change the level of security you get.

    But your apps on the front-end will still be using your comms. library, and if I r00t your front-end, I will still be able to talk to the "secure" machine (using your neatly written comms library)

    Sure you can root the data processing machine but so what ? You realy don't think that a security aware programmer would allow "SELECT * FROM Customers" query to run ?? (If you do, can I please have some of the stuff you are smoking ?)
    Most likely the client would only send some details like name/address over the serial line and the server would reply with the rest of the personal information.

    --
    echo '[q]sa[ln0=aln80~Psnlbx]16isb572CCB9AE9DB03273snlbxq' |dc
  172. Keeping your key really secret by pcontezini · · Score: 1

    In fact, the big problem is how to keep your key in secret, we had done it here, by writing the private key in one smart card, and acessing it from terminal, only the user with the PIN of the card, can access it. but remotely its a problem, there is ways to access smart cards thru network(by using activeX) but you'll need to write your code from scratch since all solutions are not free software

  173. The Intergalactic WebDing Encryption algorithm by AaronSevivas · · Score: 1

    The ultimate solution is using the "The Intergalactic WebDing Encryption algorithm". Its quite a complex operation but I will nonetheless attempt to explain the process by which you can encrypt/decrypt data using this process. It is rumored to be used for U.S. military satellite to satellite communication in their location tracking orbitals. The credit card data is passed through the function I usually call "private String hashData(String d){...}" This function takes your String d and converts it to WebDing font. Crack that silly humans!!hahahaha.. hehem..

  174. Re:The Best Policy by NateDawg · · Score: 1

    Your approach works great for one-time purchases. What if I am selling a service that I need to bill you for every month? Asking you for your information again every month is not a solution.

    I think what people are usually missing here is that the only place stored credit cards need to be read is when they are used in the billing cycle.

    Lets take an ISP for example. I don't want to encrypt my entire customer database because I'll need to search/query it quite often, and it's hard to sort or query an encrypted database. It's up to me to maintain an information disclosure policy that my customers will accept. I'll definately want to encrypt the credit card information though, but nobody should ever have access to anything (internal or external) that displays the credit card information. The only "process" that ever decrypts the credit card information is the application that processes the automatic payments once a month for those who choose to pay that way. You could even store the private key on a floppy or USB dongle drive and allow access only to those in the accounting department who need it. The public key is good enough just to encrypt the data. Store this on the webserver so customers can sign up, enter in their credit card, it gets encrypted with the public key and stored in the database. If one were to hack into this webserver, they would be able to encrypt data, but not decrypt it.

    Perhaps store "xxxxxxxxxxxx4321" in plaintext so you could verify with a customer what card we are using and allow them to change the card number. I don't think storing the last 4 digits like this is that much of a risk, YMMV. This would be an optional feature anyway.

  175. Re:The Best Policy by hexx · · Score: 2
    IF the question was "how do I make a Windows box secure?" their would be thousands of (right) answers saying "you don't, you make it Linux".


    But that's simply not true. That is akin to saying Q: "What's 2+2?" A: "2+3=5".


    You're not answering the question.


    For the question "how do I make a Windows box secure", the answer is: "go through a long and convoluted process of turning off a large number of services, possibly disconnect it from the net, remove the floppy/CD or lock the BIOS with a password to stop booting from anything but the hard drive, etc... but the fact of the matter is it's a long and difficult process and might not be possible..."


    Your "answer" of "you don't, you make it Linux" is in fact not an answer at all, but merely a suggestion.

  176. Re:The Best Policy by hexx · · Score: 2

    Q. What's the shortest path to build a bridge from Alaska to Australia.

    A. Don't build a bridge. Build a boat (or plane)


    That is not an answer. It is a suggestion of an alternative means to accomplish what you believe the problem behind the question is.


    If the person wanted to build a bridge from Alaska to Australia to allow bicyclists to bicycle straight from Gnome to Sydney, your "answer" doesn't help.


    That's why one can't "answer" a question with a simple remark akin to "don't do what you want to do, do this instead".

  177. Re:The Best Policy by Enzondio · · Score: 1

    Okay, first of all, it is hardly fair to say that all personal information stored online will inevitably be compromised. That's patently absurd.

    You could reasonably assert that all personal information stored online is compromisable. But there's a big different between the two.

    Now, more to the point, many times there is no choice. You mention that not storing personal info online is difficult to sell to your boss. In many situations I would say it is completely impossible. If the client (the real boss) says they want to store personal information, you can advise them against it but the final say resides with them (or they won't be your client for very long).

    We have to make compromises (no pun intended) all the time. Yes, you're right that not storing personal information is the best way to make sure it doesn't get compromised. But suppose that's not an option, the question then becomes how can I make my data as secure as possible.

    This same thing applies to your last comment. If my boss asks me to secure a Windows box and I refuse, saying "That's impossible, we need to install Linux!" then I'm likely to not have that job for very long. So again, the question becomes how can I make the best of the situation I am forced to deal with.

    Being idealistic is great fun, but it doesn't pay the bills.

  178. Re:The Best Policy by caca_phony · · Score: 1

    This kind of adressing a question while leaving the original question open is called "begging the question". People misuse the phrase "begging the question" all the time though, so it is approaching meaninglesness.

    --
    ...and this lie crawls out of its mouth: 'I, the state, am the people.'
  179. Re:Securing the co-host. by Ashurbanipal · · Score: 1

    I don't know why you got modded down, I thought your post was interesting and the points you raised should be considered by anyone serious about understanding the issue.

  180. Re:The Best Policy by kentborg · · Score: 1

    Read the previous post. The guy/gal said s/he works at the bank that *issues* the card. They need the card numbers so they can print your statement, send you a new card, verify charges from merchants, and generally maintain your credit card account.

    -kb, the Kent who can't figure out *how* you got mod-ed up.

  181. Re:The Best Policy by uncledrax · · Score: 1

    You gotta remember that the person asking the question has the power to implement a policy, but not the power to change the policy.

    If the business is big enough to be head-strong, the suggestion of 'dont do it' is not productive to the questioner, since the business will not listen and change it's practices.

    Yes, it is a good option, but in context may not help the questioner.

    --
    ----- The internet has given everyone the ability to have their voice heard equally as loud.. even if they shouldn't be
  182. Re:The Best Policy? by bobKali · · Score: 1

    I agree that that's a small price to pay for security. However, how many end users see this as being more secure vs just assuming that those companies who keep their data provide adequite protection for it? And those companies, while possibly being less secure are a bit more convenient.

    Besides, that doesn't solve the problem of implementing a convenient repeat billing feature. Why not keep the CC info on a seperate machine with only one service running - one waiting to accept a bill-me transaction so that if the entire network were comprimised and someone figured out your system and was able to talk to your billing server, the most they could do would be to cause you to erroniously bill your customers - certainly a bad thing, but at least that could be reversed when caught. And if you kept the listener process simple (i.e. listen for the transaction, write the transaction to a transaction file, doitagain) with a seperate process to periodically pick up and process the transactions, you could limit the possability of your exposed service being compromised.

  183. A policy designed for trouble on the first error by Spamalamadingdong · · Score: 2
    Hashing the address and other information sounds really good, at first blush. However, what happens when someone makes a typo in a house number or mis-spells the street name? Will you ever get the hashes to match again, and how do you verify that the customer is who she says she is once you've got an error like that in your system?

    All in all it sounds great, but you'd have to be really specific about what you use to generate hash keys and other crucial data in such a scheme.

  184. Re:The Best Policy by hexx · · Score: 2

    Hrmm.. I thought begging the question was this:
    http://skepdic.com/begging.html

  185. Applied Cryptography by Gleef · · Score: 2

    Read Applied Cryptography, by Bruce Schneier (ISBN 0471117099). It covers all the basics of cryptographic systems, in depth, including when to use which kind of setup.

    After you've read that, if you want more information about Alice and Bob, read here.

    --

    ----
    Open mind, insert foot.
  186. Recurring Billing. by hackwrench · · Score: 1

    Perhaps someone needs to explain recurring billing. Here's my go: Recurring billing is like monthly bills and if they have the credit card number they don't have to bother you with asking each month. (Not to mention the possible insecurity of having to transmit it to them)

  187. Re:The Best Policy by caca_phony · · Score: 1

    Hey, you're right, thanks for the tip...

    --
    ...and this lie crawls out of its mouth: 'I, the state, am the people.'
  188. Comment removed by account_deleted · · Score: 2

    Comment removed based on user account deletion

  189. Comment removed by account_deleted · · Score: 2

    Comment removed based on user account deletion

  190. Re:The Best Policy by Enzondio · · Score: 1

    First of all, what evidence do you have to support the claim that EVERY system on the Internet will inevitably be hacked?

    Again I am not advocating a position of not worrying about security because "surely WE won't get hacked." I am simply saying that considering most sites have a finite lifetime, I don't see how one can claim that ALL sites will be hacked. But this is beside the point.

    The point is, it's not about what is practical, it's about what the client wants. If the client (despite all your best efforts to convince them otherwise) wants to store billing information for its customers so that they only have to login with a username and password to order something (and not have to enter their address and such every time) then you are going to give the client what they want.

    And once again, the question becomes how can I make this inherently insecure system as secure as possible while maintaining the requirements specified by my client (or boss or whatever).

    Simply saying "Don't do it that way" isn't an option.

  191. freezing accounts by aclarke · · Score: 1

    Yes you would definitely freeze all the accounts. But think of the ramifications of that:

    - Your CC processing company gets pissed at you for causing them hassles. Your risk/annoyance factor goes up, and likely so does your processing fee
    - The CC companies have to reissue credit cards to, say, 100,000 of their cardmembers. Or deal with it somehow.
    - You lose MAJOR credibility with anybody who hears about it. If this story makes it to the press, it would make you look Very Very Bad. Customers place a very high importance on the security and privacy of their data, ESPECIALLY their credit card information. Not everybody, but most people.

    Sure, if 100,000 credit card numbers are stolen the credit card companies and police will be able to cross-reference them VERY quickly to your store (hmm, where have all these people shopped in the last couple years?) but that still won't help YOU.

  192. My point was... by aclarke · · Score: 1

    In the end, my point about the uzis was a little tongue in cheek to just say that if anybody really wants your data, they'll find a way to get it. If the reward justifies the hassle and risk to somebody, they'll do it.

    I haven't been into any large hosting facilities since the September 11 deal, but before then I NEVER saw an armed guard in any of the facilities I went to. Not to say they aren't at some, but never were at Verio, level3, etc. Or I didn't see them...

    Anyways, it's really just a risk =? reward equation. If myself and one or two others had automatic weapons and explosives and really wanted something, I don't think a smart card reader would really stop us...

    1. Re:My point was... by AndroidCat · · Score: 2
      I haven't been into any large hosting facilities since the September 11 deal, but before then I NEVER saw an armed guard in any of the facilities I went to. Not to say they aren't at some, but never were at Verio, level3, etc. Or I didn't see them...

      I'm talking about a bank data centre. They take their physical security very seriously. I'd lay odds those man-traps are buttet-proof and explosive resistant. I'm not sure where the servers were, but I doubt they'd be on the ground floor, and security could probably switch off the elevators. By the time you got up the stairs, stole the data, and back down again, you'd find a lot of new friends waiting.

      Okay, maybe if you were The One and had a kick-ass girlfriend with guns, lots of guns... :^)

      --
      One line blog. I hear that they're called Twitters now.
    2. Re:My point was... by aclarke · · Score: 1

      Could be - I've never been inside a bank's server room. Keep in mind though that these servers are being administered (and hosted?) by IBM. This whole thread started with discussing how to keep CC information secure so I guess I was going back to that.

  193. Re:The Best Policy by chris_mahan · · Score: 1

    List of things for which we have to have the original numbers:

    Reissue the card.

    List of card numbers issued.

    List of cards numbers issued

    Report fraud to Gov't

    Verify card info on the phone. If the customer reads out the card number , you don't want the custrep to have to type the number and press the "check" button. You want the custrep to be able to follow on-screen. Most customers would get super edgy if they heard keystrokes that matched their reading of their own credit cards.

    --

    "Piter, too, is dead."