Pergunta

Parece estar confundindo o Triple-DE (> 128 bits) com Plain DES (64 bits). Estou tentando criptografar um banco de dados Derby com o Triple Des (ou Desede) usando o Java 1.5

Eu achei isto Mensagem do fórum de discussão sobre um problema com o JDK 1.5 por acaso e verifiquei para garantir que ele realmente estava usando Desede e não Plain Des. Quando criei o banco de dados com um URL triplo des (168bit)

jdbc:derby:MySecureDB;dataEncryption=true;encryptionAlgorithm=DESede/CBC/NoPadding;bootPassword=$ecureC@deCanBr@kE0074242

Eu ainda era capaz de abri -lo e acessá -lo com o URL (simples) DES (64 bits)

jdbc:derby:MySecureDB;dataEncryption=true;encryptionAlgorithm=DES/CBC/NoPadding;bootPassword=$ecureC@deCanBr@kE0074242

Este não é o comportamento que espero !!! Eu não deveria ser capaz de abri -lo com o algoritmo de criptografia errado. Como posso garantir que realmente o criptografa com o algoritmo certo (> 128 bits)?

Derby parece usar a função certa para Java 1.5 mencionado em Jcecipherprovider.java. Minha leitura do código indica que o Derby não lida com o Triple des como diferente de Plain Des ... Posso realmente confiar que ele está usando criptografia forte?

Foi útil?

Solução

Acredito que a documentação está errada e que você realmente não precisa especificar o algoritmo de criptografia a ser usado ao usar um algoritmo não padrão, uma vez que o algoritmo que deve ser usado é especificado em $ derby_home/database/Service.properties

No meu caso, quando criei um banco de dados com seus parâmetros, meu serviço.Properties tinha o seguinte conteúdo (entre outras entradas não relevantes):

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

Você pode verificar se isso é usado, alterando o algoritmo usado. Se você alterar o algoritmo especificado nesse arquivo para DES, não poderá reiniciar o banco de dados.

Por exemplo:

$ ../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;
$ 

Outras dicas

De acordo com Trabalhando com criptografia Do guia do desenvolvedor Java DB, o primeiro URL parece bom para criptografar um banco de dados na criação (porque especifica dataEncryption=true) e deveria ter gerado uma chave de criptografia de 168 bits.

Agora, ainda de acordo com a documentação, não acho que você deva usar dataEncryption=true quando Inicialização de um banco de dados criptografado. Meu entendimento é que você só precisa usar bootPassword e encryptionAlgorithm.

Admito que não testei isso e, na verdade, estou realmente me perguntando o que acontece exatamente:

  • Se você não especificar dataEncryption e use o errado encryptionAlgorithm No 2º URL.
  • Quando você especificar dataEncryption=true e use outro encryptionAlgorithm (Ele recrie um banco de dados criptografado?).

A documentação não está clara sobre isso.

Eu acho que o parâmetro criptonálico é importante apenas quando você está fazendo a criptografia (ou seja, quando você está criando um banco de dados criptografado ou quando está criptografando um banco de dados não criptografado).

Depois de criptografar o banco de dados, a partir de então, você só precisa especificar o bootpassword. Derby já sabe qual o algoritmo de criptografia foi usado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top