H2数据库:如何使用加密进行保护,而无需公开文件加密密钥
我们在服务器模式下使用Java + H2数据库,因为我们不希望用户访问数据库文件。H2数据库:如何使用加密进行保护,而无需公开文件加密密钥
为了给数据库文件增加更多保护,我们计划在存储被盗的情况下使用AES加密(将CIPHER = AES添加到数据库URL)。
但是,连接时([文件密码] [空格] [用户密码]),每个用户还需要提供文件保护密码。
虽然用户无法访问数据库文件,但知道加密密钥(文件保护密码)会使加密无用。
任何想法保持数据库文件的安全(加密),而不暴露文件加密密钥给用户?
谢谢。
在H2内目前没有办法做到这一点。
一种解决方案是使用独立于H2的文件系统加密。
但是请注意,在某些时候,您将不得不提供(数据库文件或文件系统)密码。这可能是启动服务器时(提示手动输入密码)。不幸的是,由于有人不得不输入密码,因此无法完全自动启动服务器。
我听说过的一个聪明的方法是编写一个简单的web服务来阻止所有的站点,但是你的webapp的服务器。将SSL用于基于证书的身份验证。
此webservice提供加密密钥。
这听起来很愚蠢,因为它似乎提供没有身份验证的密钥,但基于证书的身份验证涵盖了这一点。它在传输过程中提供了密钥的加密(如果你真的偏执,你可以使用共享密钥来包装数据库密钥)。它只能从webapp的服务器调用,并且触发webservice调用比执行SQL注入甚至查看文件系统要困难得多。
如果您的风险模型允许,您甚至可以在与您的web应用程序相同的框中运行此webservice。
第二种方法(如果您拥有必要的权限)是创建一个虚拟磁盘。将密钥放在虚拟磁盘上。
在启动过程中,您将挂载虚拟磁盘,读取加密密钥,然后卸载虚拟磁盘。在某些设计中,您可以放弃允许您挂载虚拟磁盘的操作系统权限 - 然后攻击者通过web应用程序读取密钥实际上是不可能的。
这来自一个更旧的策略,它从CD-ROM(甚至是软盘)读取敏感信息。该应用程序将读取密钥,然后弹出媒体。它可以工作,但需要人工干预才能在下次重新启动之前重新加载介质。它也不适用于服务器没有CD-ROM的现代环境,更不用说软盘驱动器。
这是如何具体到H2? – trashgod 2011-05-27 06:16:42