【问题标题】:Architecture of a secure application that encrypts data in the database加密数据库中数据的安全应用程序的体系结构
【发布时间】:2011-02-08 20:07:06
【问题描述】:

我需要设计一个应用程序来保护数据库中的某些数据免受根攻击。这意味着,即使攻击者控制了存储数据的机器或带有应用程序服务器的机器,他也无法从数据库中读取一些业务关键数据。这是客户的要求。 我将使用一些不对称算法加密数据,我需要一些好主意,在哪里存储私钥,以便数据安全并且应用程序可用性相当舒适?为简单起见,我们可以假设只使用一对密钥。

【问题讨论】:

  • 让我猜猜,客户想在云中运行它,但又想声称它对云运营商来说是安全的?

标签: java database architecture encryption cryptography


【解决方案1】:

看看这个question,尤其是原始问题中提到的资源。

我认为这本书很好地概述了构建此类系统时遇到的问题。

【讨论】:

    【解决方案2】:

    这是客户的要求。

    客户的需求必须投射到现实世界中。

    如果您的应用程序可以读取一些业务数据,并且如果攻击者控制了您的应用程序,那么攻击者可以读取该业务数据。

    非对称加密不会变魔术。

    【讨论】:

      【解决方案3】:

      存放私钥的地方在客户端,只在客户端解密。数据在任何时候都不需要以未加密的形式解密、读取或通过服务器。

      【讨论】:

      • 听起来很合理,但客户保留密钥可能是个问题。该系统的用户在技术上并不先进,并且可能没有意识到加密密钥是他们工作的关键。我正在考虑将管理密钥的责任交给系统管理员,但他可以在哪里安全地存储密钥以便应用程序有效运行?经过一番思考,我认为如果管理员在启动服务器应用程序时提供密钥,客户可以接受,但是将密钥存储在内存中是否安全?从记忆中挑选钥匙很难吗?
      • @Przemyslaw,从内存中读取它当然很难,但也很难root机器。如果有人能获得 root,我不会将内存视为障碍,尤其是因为他们可以转储并分析它。
      【解决方案4】:

      我不确定数据库选项,但值得一看 Oracle Advanced Security(OAS)。但是,密钥不是存储在数据库中,而是存储在 Oracle 钱包(操作系统管理)中,据我所知,很难妥协。

      OAS 支持表空间级别和列级别的加密。所有这些,它声称可以在没有开销的情况下执行。

      【讨论】:

      • 这是一个不错的选择,您知道某些免费或至少更便宜的数据库是否具有同等功能?
      • AFAIK,目前只有 Oracle 拥有这些功能。
      • 虽然不是免费的,但 Microsoft SQL Server 在 2008 企业版中有一个名为透明数据加密的等效项。
      • Oracle 和 MsSQL(以及 Postgresql:postgresql.org/docs/8.4/static/encryption-options.html)都在 DB 层进行加密。业务层数据清晰,如果黑客控制了应用服务器,你就没有保障了。
      猜你喜欢
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多