Jon Swinth wrote:

>Thanks Brian and Marc for the responses.
>
>The credit card database is used for audit and for capture.  When an order is placed,
>the user must enter their credit card info and the system authorizes the charge right 
>then
>while it still has the unencrypted cc number.  The system then uses the public key to
>encrypt the cc number and write the results to the audit trail.  The user must put 
>their
>credit card information in every time, so the front end site is not impacted if the 
>private key
>is not available.
>
>The private key is used in the backend portion of the site.  It is needed when the 
>orders
>have shipped and now the charges need to be captured (batch).  Unfortunately, the 
>credit
>card processor being used requires the cc number again even though we already have a
>transaction number and authorization code.  Beyond capture, there is a couple of other
>times that customer service needs to do something that would result in a new charge
>on an existing credit card.  If the key were to be unavailable then the function 
>requiring
>the key would error and the customer service person would just notify the manager.
>
>Putting the key in a different DB is no more secure.  If JBoss can get to it then a 
>hacker
>can given enough time.  I wont be able to prevent a hacker from sniffing what is on 
>the
>machine, including the cc numbers that are comming in at that moment.  I just don't 
>want
>someone to be able to get at the whole database.  This way, if the machines were ever
>compromised then the most a hacker would have access to is the cc numbers that went by
>while he was on the box.  Hopefully, he would spend a lot of time looking for the 
>private
>key and we would have time to detect him before he got much.  This is all theory.
>
>I would actually not like the key to be on the box at all, not even in memory.  This 
>would
>make some functions difficult to code as they would need to wait for some outside 
>process
>to come along and decrypt the needed cc number.  Your idea of a separate JBoss behind
>another firewall has merit.  It would be rather complex since I wouldn't want to have 
>a function
>exposed anywhere that would simply decode the cc number.  I would have to bundle the
>call to the cc processor in the separate JBoss so that it could only be used to 
>generate charges
>and not to get at the cc number itself.  This involves extra hardware and testing.  
>If I can
>solve the issue of pegging the key in memory, I would explore the separate JBoss on 
>the
>next version.
>
>Jon
>
>  
>
>>From: Marc Zampetti <[EMAIL PROTECTED]>
>>To: [EMAIL PROTECTED]
>>Subject: Re: [JBoss-user] Design Question
>>Reply-To: [EMAIL PROTECTED]
>>
>>I'm not sure I understand the desire to not have the key in a
>>persistence store. This would mean that if your systems (or jBoss)
>>crashes, your site is unusable until a human being inputs a new key. If
>>you are worried about putting the stuff on a Internet-accessible
>>machine, put another copy of jBoss inside your firewall and call out to
>>a statefull session bean to get the key if you need it. Or another db
>>would also work. In fact, I would put it in the database, locked down
>>under another user id. The DB shouldn't be outside the firewall either,
>>so hacking really should not be a problem.
>>
>>I see several issues with using the user's password. Most systems use a
>>one-way encoding algorythm to store the password, so you can't recover
>>the cleartext of the password that the user entered. Thus, you could
>>never decrypt the cc info, since you can't get the cleartext password
>>back. If you use a two-way encryption algorithm to encrypt the password,
>>then you are back to your original problem, where do you store the
>>key.Also, I'm assuming you are encrypting the cc number itself, so the
>>idea of having an audit trail of the cc numbers defeats the whole
>>purpose to begin with.
>>
>>Marc
>>
>>Brian Topping wrote:
>>    
>>
>>>How about using an entity bean against a separate data source pointing at
>>>a memory DB such as hypersonic?  You could configure it not to cache,
>>>then when the process died, your single data entry would go with it.  To
>>>prime the db, the operator would hit an operator page that also had
>>>access to that data source.
>>>
>>>But it seems like you could avoid this problem altogether by crypting each
>>>user's wallet with the password that they selected in their account setup.
>>>In this manner, each account would have a different key against the
>>>respective wallets, eliminating the ability for a cracker to get all the
>>>credit card numbers if the master password was cracked.  Then you don't
>>>have to have so much concern about a persistent password, they are always
>>>based on the session.  Lost passwords would be managed by assigning a new
>>>password, not sending it back to them via email or whatnot.  And if they
>>>change their password, they lose their wallet, which is smart business
>>>anyway.  You'll need to keep audit trails of the credit card used with
>>>each transaction, but that can be run off to a separate database.
>>>
>>>If you had a business reason to persist the encrypted cache (wallet), you
>>>could keep a lookaside password cache that works in the way you are
>>>already working with.  The wallets would each still have a different key,
>>>but there is a "key escrow" that is managed more securely... since the
>>>private key isn't needed for operation within the business objects.
>>>
>>>-b
>>>
>>> 
>>>      
>>>
Look into using JMS and message-driven beans. You could bundle up your 
requests that require the cc number and send it via JMS (using a SSL 
connection maybe), and let the back-end jBoss handle the rest, sending 
some sort of confirmation message.

Marc



-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Two, two, TWO treats in one.
http://thinkgeek.com/sf
_______________________________________________
JBoss-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to