数据库加密比应用程序加密安全吗?

时间:2010-07-07 02:37:29

标签: mysql database security encryption

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

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

  • 明文 - 如果它在文件系统的某个地方是纯文本那么那就是你的弱点。也许它在应用程序代码中,可能在某个配置文件中。在任何情况下,获得管理员访问服务器权限(或者只是窃取硬盘驱动器)的人都拥有他们需要的东西,默默无闻是你唯一的保护。
  • 手动输入 - 如果您有一个人类用户在启动应用程序/数据库/ pc时输入密钥,那么您通常会减轻明文密钥的问题。作为交换,您需要用户记住密钥,并且您放弃了完全自动重启的能力(对于需要熬夜的服务器而言是坏消息)。

*我说的主要是因为从技术上讲,密钥仍然可以在RAM中的某个地方以明文形式提供。但这比存储在磁盘上的内容要困难得多(尽管内存交换)。

特别针对MySQL,您可能会发现this thread有帮助。

答案 1 :(得分:0)

您使用什么方法对用户进行身份验证?如果在每种情况下认证方法相同,则在应用程序中加密不可能比在数据库中更安全或更不安全。最可能的攻击向量仍然是相同的。入侵者似乎不太可能有机会窃取数据库,而不仅仅是获取访问权限 - 除非你做的事非常愚蠢。