Question

Il semble confondre Triple-DES (> 128bit) avec DES claire et simple (64 bits). J'essaie de chiffrer une base de données Derby Triple DES (ou DESede) en utilisant Java 1.5

J'ai trouvé cette forum de discussion sur un problème avec JDK 1.5 par hasard et donc vérifié pour vous assurer qu'il utilisait vraiment DESede et non DES plaine. Lorsque j'ai créé la base de données avec une URL Triple DES (168bit)

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

J'étais encore capable de l'ouvrir et d'y accéder à l'URL (plaine) DES (64 bits)

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

Ce n'est pas le comportement que j'attends !!! Je ne devrais pas être en mesure de l'ouvrir avec l'algorithme de chiffrement mauvais. Comment puis-je assurer qu'il n'encrypte vraiment avec l'algorithme de droite (> 128 bits)?

Derby semble utiliser la bonne fonction pour Java 1.5 mentionné dans JCECipherProvider.java . Ma lecture du code indique que Derby ne gère pas Triple DES comme différent de DES plaine ... Puis-je vraiment faire confiance qu'il utilise un cryptage fort?

Était-ce utile?

La solution

Je crois que la documentation est faux, et que vous n'avez pas réellement besoin de spécifier l'algorithme de chiffrement à utiliser lors de l'utilisation d'un algorithme par défaut, puisque l'algorithme qui doit être utilisé est spécifié dans $ DERBY_HOME / base de données / service. propriétés

Dans mon cas, quand je créé une base de données avec vos paramètres mes service.properties avait le contenu suivant (entre autres entrées non pertinentes):

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

Vous pouvez vérifier que cela est utilisé, en changeant l'algorithme utilisé. Si vous modifiez l'algorithme spécifié dans ce fichier au DES, alors vous ne serez pas en mesure de redémarrer la base de données.

Par exemple:

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

Autres conseils

Selon Travailler avec le cryptage de Java DB Guide du développeur, la première URL semble bien à chiffrer une base de données sur la création (car il précise dataEncryption=true) et aurait généré une clé de cryptage 168 bits.

, toujours selon la documentation, je ne pense pas que vous devez utiliser dataEncryption=true lorsque Amorçage une base de données cryptée . Je crois comprendre que vous avez juste besoin d'utiliser bootPassword et encryptionAlgorithm.

Je dois admettre que je n'ai pas testé cela et, en fait, je me demande vraiment ce qui se passe exactement:

  • si vous ne spécifiez pas dataEncryption et utilisez le mauvais encryptionAlgorithm dans la 2ème URL.
  • Lorsque vous spécifiez dataEncryption=true et utilisez un autre encryptionAlgorithm (-t-il une base de données cryptée recréent?).

La documentation n'est pas clair.

Je pense que le paramètre EncryptionAlgorithm compte que lorsque vous faites d'abord le cryptage (qui est, lorsque vous créez d'abord une base de données cryptée, ou lorsque vous êtes le premier cryptez une base de données non chiffrées).

Une fois que vous avez crypté la base de données, à partir de là, il vous suffit de spécifier le bootPassword. Derby sait déjà ce que l'algorithme de chiffrement utilisé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top