使用普通DES(64位)似乎令Triple-DES(> 128bit)感到困惑。 我正在尝试使用Java 1.5
使用Triple DES(或DESede)加密Derby数据库我偶然发现了这个discussion forum message about a problem with JDK 1.5,因此检查确保它确实使用的是DESede而不是普通的DES。当我使用Triple DES(168位)URL
创建数据库时jdbc:derby:MySecureDB;dataEncryption=true;encryptionAlgorithm=DESede/CBC/NoPadding;bootPassword=$ecureC@deCanBr@kE0074242
我仍然能够打开它并使用(普通)DES(64位)URL
访问它jdbc:derby:MySecureDB;dataEncryption=true;encryptionAlgorithm=DES/CBC/NoPadding;bootPassword=$ecureC@deCanBr@kE0074242
这不是我期望的行为!我不应该用错误的加密算法打开它。如何确保使用正确的(> 128位)算法真正加密它?
Derby似乎使用JCECipherProvider.java中提到的Java 1.5的正确函数。我对代码的阅读表明Derby不像普通DES那样处理Triple DES ......我真的相信它正在使用强加密吗?
答案 0 :(得分:5)
我认为文档是错误的,并且您实际上不需要指定在使用非默认算法时要使用的加密算法,因为应该使用的算法在$ DERBY_HOME / database / service中指定。特性
就我而言,当我使用您的参数创建数据库时,我的service.properties具有以下内容(以及其他不相关的条目):
log_encrypt_algorithm_version=1
encryptionAlgorithm=DESede/CBC/NoPadding
dataEncryption=true
derby.encryptionBlockSize=8
encryptionKeyLength=168-24
encryptedBootPassword=472b7cc5600605333392dd10a46067d2e2935fd4c350d533-43435
data_encrypt_algorithm_version=1
您可以通过更改使用的算法来验证是否已使用此功能。如果将该文件中的指定算法更改为DES,则无法重新启动数据库。
例如:
$ ../bin/ij
ij version 10.4
ij> connect 'jdbc:derby:testdb;create=true;dataEncryption=true;encryptionAlgorithm=Blowfish/ECB/NoPadding;bootPassword=$ecureC@deCanBr@kE0074242';
ij> quit;
$ sed -i .o 's/Blowfish/DES/' testdb/service.properties
$ ../bin/ij
ij version 10.4
ij> connect 'jdbc:derby:testdb;bootPassword=$ecureC@deCanBr@kE0074242';
ERROR XJ040: Failed to start database 'testdb', see the next exception for details.
ERROR XBM06: Startup failed. An encrypted database cannot be accessed without the correct boot password.
ij> quit;
$ sed -i .o 's/DES/Blowfish/' testdb/service.properties
$ ../bin/ij
ij version 10.4
ij> connect 'jdbc:derby:testdb;bootPassword=$ecureC@deCanBr@kE0074242';
ij> quit;
$
答案 1 :(得分:1)
根据Java DB Developer's Guide中的Working with encryption,第一个URL看起来很好在创建时加密数据库(因为它指定了dataEncryption=true
)并且应该生成了一个168位加密密钥。
现在,仍然根据文档,我认为在引导加密数据库时不应该使用dataEncryption=true
。我的理解是您只需要使用bootPassword
和encryptionAlgorithm
。
我承认我没有对此进行测试,实际上,我真的很想知道究竟会发生什么:
dataEncryption
并在第二个网址中使用了错误的encryptionAlgorithm
。dataEncryption=true
并使用其他encryptionAlgorithm
时(它是否会重新创建加密数据库?)。文档不清楚。
答案 2 :(得分:1)
我认为encryptionAlgorithm参数仅在您第一次执行加密时(即,您第一次创建加密数据库时,或者您第一次加密未加密的数据库时)。
一旦加密了数据库,从那时起,您只需要指定bootPassword。 Derby已经知道使用了什么加密算法。