【问题标题】:Is database encryption less safe than application encryption?数据库加密是否不如应用程序加密安全?
【发布时间】:2011-03-12 14:47:32
【问题描述】:

我接收数据,并在将其保存到数据库之前使用 aes 或 blowfish 对其进行加密,因此加密是在应用程序级别完成的。如果有人窃取了数据库,除非他们也窃取了应用程序(存储/访问密钥的位置),否则数据将相对安全。

我现在正在研究使用 ezNcrypt for MySQLEncryption-GENERALSQLCipher 等库的数据库加密。

但我不太了解数据库加密的工作原理。如果应用程序只将未更改的原始数据传递给数据库,并且数据库以某种方式自行解密数据,那么如果由于 100% 的加密组件被盗,数据库被盗,这是否会降低数据库级加密的安全性?

在我目前的情况下,如果数据库被盗,攻击者将不得不使用第二个组件(应用程序级别的密钥)来解密数据库。但是对于数据库加密,数据库本身对加密负有全部责任,所以通过窃取数据库,攻击者不就拥有解密数据库所需的一切吗?

也许我不清楚数据库级解密的工作原理。

【问题讨论】:

    标签: mysql database security encryption


    【解决方案1】:

    加密算法应用于应用程序堆栈中的不同点,但归根结底,无论您使用应用程序还是数据库层解决方案,该过程都是完全相同的。密钥必须存储在某处,如果攻击者同时获得加密数据和密钥,那么他们就可以访问数据。

    所以,真正的问题归结为您如何存储密钥:

    • 纯文本 - 如果它在文件系统的某个地方以纯文本形式出现,那么这就是你的弱点。也许它在应用程序代码中,也许在某个配置文件中。无论如何,获得服务器管理员访问权限(或只是窃取硬盘驱动器)的人拥有他们需要的东西,而默默无闻是您唯一的保护。
    • 手动输入 - 如果您在应用程序/数据库/PC 启动时让人类用户输入密钥,那么您主要* 缓解了明文密钥的问题。作为交换,您需要用户记住密钥,并且您放弃了完全自动重启的能力(对于需要保持正常运行的服务器来说是个坏消息)。

    * 我之所以这么说主要是因为从技术上讲,密钥在 RAM 中的某个地方仍然可以以纯文本形式使用。但这比存储在磁盘上的东西要难得多(尽管有内存交换)。

    特别是关于 MySQL,您可能会发现 this thread 很有帮助。

    【讨论】:

    • 所以数据库级加密仍然需要密钥。这是我忽略并澄清了整个问题的“关键”点。
    • 我在使用数据库加密时会失去一些性能吗?而服务器需要加密和解密每个请求或操作?还是我错了?
    【解决方案2】:

    您使用什么方法来验证您的用户?如果验证方法在每种情况下都相同,则应用程序中的加密不太可能比数据库中的加密更安全或更安全。最可能的攻击媒介仍然是相同的。入侵者似乎不太可能有机会实际窃取数据库,而不仅仅是获得对它的访问权限 - 除非您正在做一些非常愚蠢的事情。

    【讨论】:

    • 你能再澄清一点吗?我不太明白你的意思。
    • 这样说吧。一个有效的用户访问应用程序,大概是在以某种方式进行身份验证(例如通过登录)之后。入侵者通过破坏或绕过该身份验证机制来访问应用程序。无论数据是由数据库还是应用程序加密,这同样适用。这就是真正的漏洞通常所在的地方。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多