加密数据库字段通常是个坏主意吗?

信息安全 加密 数据库
2021-08-31 06:43:21

我在一家小公司工作,实际上是我(程序员)和所有者。业主要求我加密数据库中的几个字段以保护客户数据。这是一个帮助律师事务所管理数据的 Web 应用程序,因此基本上它存储人员和诉讼信息(谁被起诉,为什么,为了多少)。他认为这些敏感信息不应该被轻易看到。他担心的是“我不希望未经授权的人看到这些信息”。只有其他律师事务所可能对这些数据感兴趣,所以这不应该像信用卡一样重要。

我在网上阅读了很多关于这方面的内容,我正在考虑在这些领域简单地使用对称加密,这样性能就不会那么差了。密钥将存储在服务器上。但是, stackoverflow 上的这个线程说这是一个坏主意。

我不明白如何加密字段并将密钥保存在服务器上会如此无用。我不担心光盘被盗,因为它们位于 Amazon EC2 上。我不是安全专家,但在我看来,如果出现任何问题,我会说数据库泄漏。即便如此,重要的信息也会被加密。现在,如果这个人甚至设法入侵了我的 EC2 服务器,那么我想我可以采取的保护措施几乎没有。由于我们是一家小公司,我们只有一台服务器可以做所有事情,从提供页面到存储数据。

我的问题是,考虑到我们只能负担一台服务器,是否使用保存在此服务器上的对称密钥加密这些字段,好吗?

4个回答

普通的留言。听起来在继续之前学习一些基本的安全概念对您和您的老板会有所帮助。安全是一个专业领域。你不会让街上随便一个人给你做心脏直视手术;而且您不应该期望普通软件开发人员知道如何保护您的系统。

我在这里感觉到一些误解。例如,听起来你的老板已经将安全等同于密码学。但这是一个错误。正如 Bruce Schneier 所强调的那样,密码学不是可以撒在系统上以确保其安全的魔法小精灵正如罗杰·李约瑟(Roger Needham)曾经说过的那句名言,如果你认为密码学可以解决你的问题,要么你不了解密码学,要么你不了解你的问题

在保护计算机系统时,一个重要的概念是威胁模型这意味着您需要仔细考虑您要阻止哪些类型的攻击和对手,以及您不是什么。未能清楚地思考威胁模型可能会导致安全战区:乍一看看起来不错的安全机制,但实际上在实践中严重不足。良好的安全管理通常归结为风险管理:仔细分析什么是最严重的风险,然后制定策略来减轻或管理这些特定风险。

同样重要的是要了解安全性是最薄弱环节的属性:系统的安全性仅与最薄弱的环节一样强系统任何一个部分的漏洞都可能危及整个系统的安全。这意味着没有一个答案足以保护您的系统。相反,为了保护您的系统,您必须在许多地方获得正确的安全性。

深入细节。听起来您的目标是防止未经授权的敏感数据泄露。如果是这样,您将需要专注于许多项目。没有一种简单的灵丹妙药可以为您解决这个问题;您通常需要处理应用程序安全性。

如果我正确理解了您的目标,让我建议您应该优先考虑的一些事情:

  • 应用安全。您需要开始学习 Web 应用程序安全性。你在这个问题上投入了多少加密货币并不重要;如果攻击者可以在您的应用程序代码中找到安全漏洞,那么您将被淹没。对于 web 应用程序安全的背景,OWASP 有很多优秀的资源。确保您了解 OWASP 十大,关于 XSS、SQL 注入、输入清理/验证、输出转义、白名单和其他概念。

  • 访问控制。您的 Web 应用程序需要具有可靠的访问控制,以确保您系统的一个用户无法访问另一个用户的信息(未经授权)。这方面的详细信息将取决于您的特定系统的具体情况,因此如果您需要有关此方面的更多帮助,您可能需要发布一个单独的问题,其中包含有关您的应用程序和当前访问控制策略的更多详细信息。

  • 验证。您的 Web 应用程序将需要一种方法来验证其用户。标准的最省力方案是只使用用户名和密码。然而,这在实践中具有严重的局限性,这是众所周知的。如果用户选择自己的密码,他们往往会选择较差的密码,这会破坏您系统的安全性。

  • 安全的软件开发生命周期。您需要将安全性集成到软件开发过程中。当您制定软件架构时,您应该考虑安全需求并执行威胁建模和架构风险分析。编写代码时,您需要了解可能违反安全性的常见实现错误并确保避免它们。构建软件后,您需要测试其安全性并不断评估您在安全方面的表现。当您部署软件时,您的操作人员需要知道如何安全地管理它。Microsoft 有一些关于安全软件开发生命周期 (SDL) 的优秀资源。另请参阅 BSIMM 了解更多信息。

  • 安全评估。如果您担心安全性,我建议您评估应用程序的安全性。一个简单的起点可能是让某人对您的 Web 应用程序执行渗透测试,以检查某些类型的常见错误。这绝不是安全的保证,但有时如果存在许多重大问题,它可以起到警钟的作用。您可以查看 WhiteHat Security 的服务;还有许多其他人将执行网络渗透测试。

如果你觉得这不是一件小事,我很抱歉,但事实确实如此。另一方面,好消息是那里有很多资源,而且你不需要成为专家级的安全大师:你只需要熟悉一些基本概念和一些常见的安全Web 编程中的错误,这将满足您的大部分需求。

如果数据库以某种方式被盗,加密数据库中的数据将保护信息。但是,它不会做任何事情来保护网站免受攻击。例如通过猜测用户名/密码。

如果他们已经破坏了服务器,它可能会减慢某人的速度,因为他们必须找到密钥,但这不会阻止他们。它的价格也可能很高。例如,加密字段不再以任何有效方式可搜索。

您还需要了解备份的含义并确保备份密钥,最好与数据库备份分开备份,以防止在备份磁带被盗时数据库被解密。并且您需要确保您拥有多个密钥副本并定期对其进行测试。

SoA 的一个好概念是拥有一个加密服务,与服务器上的其他进程隔离运行(您的 Web 应用程序也应该隔离运行!)。然后,当您需要加密/解密对象/字段时,您将明文/密文发送到加密服务,并返回密文/明文。这样,即使您的 Web 应用程序受到攻击,攻击者也无法读取加密密钥,因为只有加密服务知道密钥。此外,由于您的 Web 应用程序是孤立的,因此他可以在您的系统上执行的操作受到严重限制。服务隔离通常使用 SElinux、TOMOYO(比 SElinux imo 好用得多)、AppArmor 等 MAC 系统完成。此外,我建议运行使用 grsecurity 修补的最新 linux 内核。

简短回答:是的,使用对称加密。这样可以防止一些攻击,比如通过sql注入读取sql数据。但是,如果您的 web 应用程序受到攻击,则可能无关紧要。如果有人获得对您服务器的足够访问权限,您几乎无能为力。即使使用非对称加密。