2009-06-29 54 views
1

我在这里阅读了很多类似的问题,但没有一个与我的情况完全相同。存储SSN/CC数据

此前,用户输入大量信息,包括SSN,配偶SSN和CC数据。当用户完成该过程时,信息被推送到PDF上,然后压缩(然后被加密),然后通过FTP返回到我们的服务器。除了SSN和CC之外,我们保存了数据库中的所有内容,当会话死亡时这些内容被删除。

现在,我们需要将该信息保存到数据库,以及在用户A完成后的某些情况下,用户B需要进入并签名表单。用户B完成后,将创建文件并删除SSN/CC数据。这意味着数据必须从我们的数据库中存储几分钟到可能一个月。有一组到期日期,我从数据库中清除数据并重新开始。注意:我没有使用CC数据实际收费,所以我不能将它交给像Authorize.net或Paypal这样的第三方。

有了这个解释,我需要知道加密这个东西并保护它的最好方法。我在我的代码中使用用户的GUID作为密钥或者只是SQL Server 2005列进行加密并将解密功能限制为网络用户之间进行切换。

我喜欢AES,因为它让少数拥有数据库访问权限的用户可以使用Web用户的密码来获取所有CC数据。他们可以访问源代码并可以复制解密方法,但至少比运行某些查询要困难一些。

不幸的是,我没有时间推动不存储CC数据的方式,但我对下一个版本有一些想法。我必须做出选择并在本周实施加密。

回答

2

我不明白如何在用户GUID作为对称密钥的应用程序代码中使用AES加密将保护数据不被具有数据库访问权限的人员解密。在大多数系统中,用户ID GUID也不会以明文形式存储在数据库中?如果是这样,那么任何有权访问数据库的人都可以通过传递相应的解密函数来解密任何数据。

根据应用程序服务器连接到数据库服务器的方式,SQL Server中的内置列加密功能应该是一个很好的解决方案。如果您使用集成身份验证,则可以避免为应用程序用户提供明文密码。通过使用可用的访问控制来保护您的加密密钥,您可以对其进行设置,以便其他用户(甚至可能不包括DBA)可以任意解密数据库中的数据。

2008年6月我作了关于在SQL Server 2005和2008可用使用加密功能here

下面是从演示文稿中给出了如何使实现这一目标的概述示例代码只适当的用户可以查看解密的数据:

- 创建数据库的主密钥,这将用于在DB每隔一个密钥来加密并且又由服务主密钥加密

CREATE MASTER KEY ENCRYPTION BY password = 'MasterKey1$' 

- 创建证书所用的用户保护自己的对称密钥 - 创建对称密钥对数据进行加密,因为它们是速度更快,基于关键尺寸没有固有的数据大小的限制

CREATE CERTIFICATE data_cert AUTHORIZATION data WITH SUBJECT = 'Data Cert' 

- 请注意,您也可以在这里使用“密码加密”选项来防止不知道密码的DBA打开证书,从而无法解密数据。 - 为每个用户创建对称密钥保护他们的数据 - 注意如果在XP上运行SQL Server,AES算法不可用,则必须使用3DES

CREATE SYMMETRIC KEY data_key WITH ALGORITHM = AES_256 ENCRYPTION BY CERTIFICATE data_cert 

- 注意,您还可以使用加密BY PASSWORD在这里也防止DBA谁不从打开该键

知道密码 - 授予对对称密钥,以便只有正确的用户可以访问它们

GRANT VIEW DEFINITION ON SYMMETRIC KEY::data_key TO [DOMAIN\ApplicationServiceAccount] 

这使您只能通过相应的用户可以打开表中使用的加密/解密数据的对称密钥。您还可以从数据库引擎中的加密最佳实践功能中获益,例如每个单元使用独特的初始化向量加密,以及SQL Server中的密钥管理功能,使您能够定期轻松更改密钥。

0

您是否已经阅读了Payment Card Industry要求?

将用户的GUID用作AES密钥似乎不符合要求。

+0

我没有看到任何与加密密钥相关的内容。 – AndyMcKenna 2009-06-29 05:06:42

+0

快速参考指南中的第3部分(https://www.pcisecuritystandards.org/pdfs/pci_ssc_quick_guide.pdf):保护用于加密持卡人数据的密钥,避免泄露和滥用。 – 2009-06-29 06:28:15