H2的安全问题

时间:2014-02-23 09:25:01

标签: security encryption h2

注意:虽然我提到H2,但这可能适用于任何DBMS,

  1. 允许您将整个数据库存储在一个文件中;

  2. 使其源代码公开。

  3. 我的担忧:

    是否可以通过执行以下操作进入加密的H2数据库?

    1. 在一些表格中存储一个非常大的,零大小的BLOB,大小为100 KB。

    2. 检查新的H2数据库文件二进制文件,并在页面/块边界附近查找重复模式。页面/块大小可以从H2源代码获得。如此获得的重复模式将是用于加密H2数据库的密码密钥。

    3. 一旦密码密钥暴露出来,黑客只需要足够专注,然后进一步挖掘H2源并找出其表,列和行的确切结构。换句话说,从这一点开始,一切都暴露无遗。

    4. 我没有亲自研究过H2的源代码,我也不是加密专家,但这就是为什么我认为上述内容 - 或者上述行中的一些黑客 - 可能有效:

      1. 出于性能原因,所有DBMS都以块的形式读取/写入数据(页面或块大小为512字节到8 KB),H2也是如此。

      2. 由于数百KB的BLOB远远超过DBMS的页面/块大小,因此可以预期密码关键字(使用用户密码在内部生成)以小于页面的重复模式显示/块大小。

2 个答案:

答案 0 :(得分:4)

一个好的加密算法不会受到这种攻击。

明文中的模式(这里是零的BLOB)将在密文中消散。秘密密钥在密文中不易作为模式或其他方式可见。使用分组密码时实现这一目的的经典技术是使块的加密取决于前一个块的密文。这里我所指的块是加密算法中使用的块,通常是128位长度。

例如,您可以使用前一个块加密的结果对明文块进行异或,这是来自维基百科的CBC模式的模式,该模式在加密之前将当前块与前一个块的结果进行异或。

CBC mode

正如您所看到的,即使您在每个明文块中提供全零,您最终也会得到一个完全随机的结果。

这些只是示例,H2中使用的实际混淆机制可能更复杂或涉及取决于他们使用的算法。

答案 1 :(得分:1)

H2中使用的文件加密算法不使用ECB encryption mode。文件加密算法as documented不容易受到此类攻击。将用于H2未来版本的new storage engine使用standardized AES XTS algorithm