我收到数据,并在将其保存到数据库之前使用aes或blowfish对其进行加密,因此加密是在应用程序级别完成的。如果有人窃取数据库,数据将相对安全,除非他们也窃取了应用程序(存储/访问密钥的地方)。
我现在正在研究使用ezNcrypt for MySQL,Encryption-GENERAL或SQLCipher等库的数据库加密。
但我不太明白数据库加密的工作原理。如果应用程序只将原始未更改的数据传递给数据库,并且数据库以某种方式解密数据本身,那么由于100%的加密组件被盗,如果数据库被盗,这不会使数据库级加密安全性降低吗?
在我目前的情况下,如果数据库被盗,攻击者必须加工第二个组件(应用程序级别的密钥)来解密数据库。但是使用数据库加密,数据库本身对加密负有全部责任,因此通过窃取数据库,攻击者是否拥有解密数据库所需的一切?
也许我不清楚数据库级解密的工作原理。
答案 0 :(得分:2)
加密算法应用于应用程序堆栈中的不同位置,但无论您使用应用程序还是数据库层解决方案,在一天结束时该过程都完全相同。密钥必须存储在某处,如果攻击者同时获取加密数据和密钥,则他们可以访问数据。
所以,真正的问题归结为你如何存储你的密钥:
*我说的主要是因为从技术上讲,密钥仍然可以在RAM中的某个地方以明文形式提供。但这比存储在磁盘上的内容要困难得多(尽管内存交换)。
特别针对MySQL,您可能会发现this thread有帮助。
答案 1 :(得分:0)
您使用什么方法对用户进行身份验证?如果在每种情况下认证方法相同,则在应用程序中加密不可能比在数据库中更安全或更不安全。最可能的攻击向量仍然是相同的。入侵者似乎不太可能有机会窃取数据库,而不仅仅是获取访问权限 - 除非你做的事非常愚蠢。