Almacenamiento de numbers de tarjetas de crédito encryptions en una database SQL

Me preguntaba cuál es el mejor enfoque para almacenar numbers de tarjetas de crédito encriptados en una database SQL para C # (.NET framework). ¿Debo hacerlo manualmente usando String/SecureString/Byte Array con algún tipo de symmetric encryption ?

Escuché que para una alternativa (y probablemente la opción más fácil), un proveedor de services (con el que realiza la transacción) le dará una key que puede usarse para recuperar información de transactions. No sé cómo abordar este enfoque, pero ¿es esta la mejor opción? Quiero la opción más segura y más segura. Quiero ser compatible con PCI también.

Actualización: en los tres años transcurridos desde que escribí esta respuesta, he aprendido más sobre PCI, y se ha lanzado una especificación más nueva. Si bien la información a continuación no es incorrecta , el paso 1 lo ubica en el scope de PCI en el nivel "D para comerciantes" , que es el más oneroso.

La mejor forma de manejar esto es no tocar los datos de la tarjeta usted mismo. O bien utiliza un formulario proporcionado por su procesador que les envía los datos, o simplemente los networkingirecciona (como con PayPal). Ambas opciones pueden ponerlo en los niveles "A" o "A-EP" , que son mucho más fáciles de certificar.

De cualquier manera, aún recibiría un token, que es seguro de almacenar, por lo que los pasos 3 y 4 siguen siendo aplicables.


Respuesta Original:

Escuché que para una alternativa (y probablemente la opción más fácil), un proveedor de services (con el que realiza la transacción) le dará una key que puede usarse para recuperar información de transactions.

Esto es verdad. Básicamente, el process es:

  1. Obtenga información de tarjeta de crédito del cliente / usuario. Almacenar en variable dentro del código (es decir, no un file, un logging o una database).
  2. Envíe información de su tarjeta de crédito a su procesador (como Authorize.NET, Payware, Paypal, etc.).
  3. Recibe una respuesta que incluye un "token" de algún tipo. Esta es la forma en que identifica esta transacción en particular para futuras comunicaciones con el procesador.
  4. Almacene el token en su database. El encryption sería bueno, pero no necesario, ya que el token simplemente se refiere a "Transaction # 12345", y no tiene información confidencial por sí mismo.

Si va a almacenar numbers de tarjetas de crédito en una database que usted controla, lea las PCI DSS:

http://en.wikipedia.org/wiki/Payment_Card_Industry_Data_Security_Standard

¿Por qué deberías cumplir?

https://www.pcisecuritystandards.org/security_standards/why_comply.php

Luego, lea cómo convencer a las personas que le pidieron que guarden las tarjetas de crédito en su casa el mundo del daño que están trayendo a ustedes mismos para hacer esto:

https://security.stackexchange.com/questions/18677/how-to-convince-coworkers-to-not-store-cnetworkingit-card-numbers- ourselves