Frage

Es scheint Triple-Des (> 128bit) mit Plain Des (64bit) zu verwechseln. Ich versuche, eine Derby -Datenbank mit Triple DES (oder Dese) mit Java 1.5 zu verschlüsseln

ich habe das gefunden Diskussionsforum Nachricht zu einem Problem mit JDK 1.5 zufällig und so überprüft, ob es wirklich Dese und nicht einfach Des benutzte. Als ich die Datenbank mit einer Triple DES -URL (168bit) erstellt habe

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

Ich konnte es immer noch öffnen und mit der (einfachen) DES (64 -Bit) -URL zugreifen

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

Dies ist nicht das Verhalten, das ich erwarte !!! Ich sollte es nicht mit dem falschen Verschlüsselungsalgorithmus öffnen können. Wie kann ich sicherstellen, dass es wirklich mit dem richtigen Algorithmus (> 128bit) verschlüsselt?

Derby scheint die richtige Funktion für Java 1.5 zu verwenden, die in erwähnt wird JceCipherProvider.java. Meine Lektüre des Codes zeigt an, dass Derby Triple DES nicht als unterscheidet sich von Plain Des nicht mehr umgeht. Kann ich wirklich darauf vertrauen, dass es eine starke Verschlüsselung verwendet?

War es hilfreich?

Lösung

Ich glaube, dass die Dokumentation falsch ist und dass Sie den Verschlüsselungsalgorithmus nicht angeben müssen, um einen Nicht-Default-Algorithmus zu verwenden

In meinem Fall, als ich eine Datenbank mit Ihren Parametern erstellt habe, hatte mein Service. Properties hatten den folgenden Inhalt (unter anderem nicht relevante Einträge):

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

Sie können überprüfen, ob dies verwendet wird, indem Sie den verwendeten Algorithmus ändern. Wenn Sie den angegebenen Algorithmus in dieser Datei in DES ändern, können Sie die Datenbank nicht neu starten.

Zum Beispiel:

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

Andere Tipps

Entsprechend Arbeiten mit Verschlüsselung Aus dem Java DB Developer's Guide sieht die erste URL gut aus zu Verschlüsseln Sie eine Datenbank zur Erstellung (weil es angibt dataEncryption=true) und hätte einen 168 -Bit -Verschlüsselungsschlüssel erzeugen sollen.

Jetzt, immer noch nach der Dokumentation, glaube ich nicht, dass Sie verwenden sollten dataEncryption=true Wenn Booten einer verschlüsselten Datenbank. Mein Verständnis ist, dass Sie nur verwenden müssen bootPassword und encryptionAlgorithm.

Ich gebe zu, dass ich das nicht getestet habe, und eigentlich frage ich mich wirklich, was genau passiert:

  • Wenn Sie nicht angeben dataEncryption und das Unrecht verwenden encryptionAlgorithm in der 2. URL.
  • Wenn Sie angeben dataEncryption=true und benutze einen anderen encryptionAlgorithm (Erstellt es eine verschlüsselte Datenbank?).

Die Dokumentation ist nicht klar.

Ich denke, der Parameter für Verschlüsselungalgorithmus ist nur wichtig, wenn Sie zum ersten Mal die Verschlüsselung durchführen (dh wenn Sie zum ersten Mal eine verschlüsselte Datenbank erstellen oder wenn Sie zum ersten Mal eine unverschlüsselte Datenbank verschlüsseln).

Sobald Sie die Datenbank verschlüsselt haben, müssen Sie nur das Bootpassword angeben. Derby weiß bereits, welcher Verschlüsselungsalgorithmus verwendet wurde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top