数据库加密或应用程序级加密?

Sim*_*com 9 database asp.net security encryption tde

当您需要存储CC或SSN等敏感数据时,您是否:

1)在应用程序中构建自己的加密例程,在配置文件中的某处定义密钥,然后手动加密/解密进入数据库的数据.

2)使用内置的数据库功能将所有问题推送到数据库(我认为大多数供应商称之为透明数据库加密).

您为解决方案找到了哪些权衡取舍?与TDE相比,编写自己的例程表现不佳吗?代码是否可维护,或者相反,DB供应商锁定问题?

May*_*ayo 8

我使用了各种加密技术,我相信使用经过验证的加密例程(即.NET库)在应用程序端加密更容易,更安全.

如果对数据库进行加密,则表示数据以未加密的形式发送到数据库或从数据库发送.这可能允许在应用程序和数据库上的加密例程之间进行窥探/篡改.即使您将密钥存储在应用程序端,数据库端仍然需要执行加密.如果数据库遭到破坏,您的数据将面临严重风险(想象一下,当您的应用程序运行时,有人会运行探查器).

如果在应用程序中加密/解密,则敏感数据(包括密钥)永远不会在应用程序服务器外部泄露.有人必须妥协Web服务器和数据库服务器才能访问您的所有数据.

另外,我强烈建议您不要使用自己的加密例程.您可能会犯一个会降低解决方案整体安全性的错误.

编辑:

还想添加另一个会影响您决定的因素.您是否需要查询该加密数据?如果在应用程序级别进行加密,则需要将数据带到应用程序,解密并从那里开始工作.随着数据集变大,这变得过高 - 而使用数据库加密,您可以在将数据发送回应用程序之前对其进行过滤.


Joe*_*Joe 6

当您加密敏感数据时,您实际上是在限制那些有权访问密钥的人的访问。然后问题就变成了密钥管理之一:确保只有经过授权的人员/系统才能访问解密数据所需的密钥。

您当然应该使用标准的加密算法,现在已经足够简单了,但是您需要考虑的是您要防御哪些威胁,您将如何控制对密钥的访问,以及您如何控制物理访问服务器。

使用 TDE 可确保对数据库及其备份的内容进行加密,对数据库的授权用户的影响最小。因此,任何可以使用有效凭据访问数据库服务器的人都可以看到未加密的数据。此外,任何 DBA 通常都可以访问密钥并能够查看未加密的数据。但是,例如,获得异地备份的第三方将无法访问数据——这对于遵守监管要求可能很重要。

另一方面,如果您在应用层加密,您可以使用只有应用服务器管理员才能访问的密钥。例如,如果数据库服务器和应用程序服务器管理员分开(例如不同组织的成员),这可能会给您带来更多的安全性。无权访问应用程序服务器密钥的 DBA 将无法查看数据。

在您的原始帖子中,您谈到在应用程序服务器上的配置文件中隐藏密钥。从表面上看,这听起来相当于将前门钥匙藏在门垫下的安全性。如果您这样做,您需要考虑如何确保未经授权的人无法访问密钥。