我以前从未处理过PCI合规问题.我一直在阅读他们的文件,它说我需要保护信用卡号码,有效期和持卡人的姓名.无需存储安全代码.
在他们的文档中,它只是说保护.这是说我需要在我的数据库中加密这3列吗?我以为只有数字是需要加密的数据.无论哪种方式,我都很好.
如果我需要加密所有三列,我是否共享一个证书并拥有3个对称密钥,或者我只需要1个,并且所有3列都使用该对称密钥?我问的原因是在加密列的BoL文档中,密钥是在加密列之后专门命名的.
感谢您的帮助!
解决方法
如果您存储PAN(卡号),则绝对必须加密.
如果您存储持卡人姓名,到期日期,发行号码(并且它们可以链接到PAN),那么它们应该加密,但(我的理解)是它不是绝对必要的. PCI-DSS仅声明必须至少加密PAN.
CV2 / AVS / CSC代码无法在授权后存储,理想情况下您需要证明它根本不存储(例如 – 仅在执行授权时保留在内存中)
关于证书/密钥 – 您可以使用一个密钥来加密所有与卡相关的数据.最佳做法是不要将密钥用于多种用途,因此如果您有其他(非卡相关)数据加密,则使用单独的密钥.
最困难的部分是你没有详细提到过的部分 – 那就是密钥管理.为了满足PCI要求,密钥必须存储在数据库的单独物理盒中,并且您需要能够至少每年更改密钥. sql 2008通过Extensible Key Management (EKM)支持此功能
所有这些要点最好与独立的QSA(合格安全评估员)讨论,无论是为了满足PCI合规性,您都需要参与其中.您的QSA将能够引导您解决此类问题,并最终指导您应遵循的建议以满足合规性要求.
值得一提的是,大多数人很快意识到PCI合规性可以承担多大的负担,并希望通过使用第三方支付网关来减轻这种负担.大多数支付网关将允许您执行授权/结算并将卡详细信息存储在其(已兼容PCI)服务器上.然后,您需要存储引用这些付款详细信息的TokenId,如果您需要对该卡执行进一步的收费/退款.
祝你好运!