Derby / javadb _really_는 (평범한) des보다는 트리플 des로 암호화 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/1925134

문제

Plain DES (64 비트)와 트리플 데스 (> 128 비트)를 혼란스럽게하는 것 같습니다. Java 1.5를 사용하여 Triple Des (또는 Desede)로 Derby 데이터베이스를 암호화하려고합니다.

나는 이것을 찾았다 JDK 1.5의 문제에 대한 토론 포럼 메시지 우연히, 그리고 그것이 평범한 des가 아니라 실제로 Desede를 사용하고 있는지 확인하기 위해 확인했습니다. 트리플 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 비트) 알고리즘으로 실제로 암호화 할 수있는 방법은 무엇입니까?

더비는 언급 된 Java 1.5에 적합한 기능을 사용하는 것 같습니다. jcecipherprovider.java. 코드를 읽은 내용은 더비가 Plain Des와는 다른 트리플 DES를 처리하지 않는다는 것을 나타냅니다 ... 강한 암호화를 사용하고 있다고 정말로 믿을 수 있습니까?

도움이 되었습니까?

해결책

문서가 잘못되었다고 생각하며, 비 디폴트 알고리즘을 사용할 때 사용할 암호화 알고리즘을 실제로 지정할 필요는 없다고 생각합니다.

제 경우에는 매개 변수가있는 데이터베이스를 만들 때 내 서비스가 다음과 같은 내용을 가지고 있습니다 (다른 비 관련 항목 중).

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

다른 팁

에 따르면 암호화 작업 Java DB Developer 's Guide에서 첫 번째 URL은 생성시 데이터베이스를 암호화합니다 (지정하기 때문에 dataEncryption=true) 그리고 168 비트 암호화 키를 생성해야합니다.

이제 문서에 따르면 여전히 사용해야한다고 생각하지 않습니다. dataEncryption=true 언제 암호화 된 데이터베이스 부팅. 내 이해는 당신이 그냥 사용해야한다는 것입니다 bootPassword 그리고 encryptionAlgorithm.

나는 이것을 테스트하지 않았다는 것을 인정하고 실제로 정확히 무슨 일이 일어나는지 궁금합니다.

  • 지정하지 않는 경우 dataEncryption 그리고 잘못을 사용하십시오 encryptionAlgorithm 두 번째 URL에서.
  • 지정할 때 dataEncryption=true 다른 것을 사용하십시오 encryptionAlgorithm (암호화 된 데이터베이스를 재현합니까?).

문서는 그것에 대해 명확하지 않습니다.

암호화 모로리 매개 변수는 처음 암호화를 수행 할 때만 중요하다고 생각합니다 (즉, 처음 암호화 된 데이터베이스를 작성하거나 암호화되지 않은 데이터베이스를 처음 암호화 할 때).

데이터베이스를 암호화 한 후에는 그때부터 BootPassword를 지정하면됩니다. 더비는 이미 어떤 암호화 알고리즘이 사용되었는지 알고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top