2017-01-28 3 views
0

사용자 특정 데이터가 임베디드 데이터베이스 (예 : SQLite, H2, HSQLDB)에 저장되는 오픈 소스 애플리케이션을 만들고 싶습니다. 또한 사용자가 암호화 된 데이터베이스의 암호를 입력해야하는 로그인 화면이 있습니다. 하지만 암호화를 처리하는 방법을 아직 잘 모르겠습니다. BouncyCastle 전체 파일 암호화?임베디드 데이터베이스 및 암호화

파일 기반 암호화를 선호합니다. 파일 암호화를 사용한다면 해독 된 파일을 물리적으로 하드 디스크에 저장하지 않고 포함 된 데이터베이스로 작업 할 수 있습니까? 이 요청은 심지어 의미가 있습니까? 내 컴퓨터가 침입자에 의해 손상되어 데이터베이스에 저장된 데이터가 어떻게 든 또는 다른 읽을 수있는 것인지, 그렇습니까? 데이터베이스의 해독 된 복사본을 만들 필요가 없다면 (하드 디스크의 공간이나 성능에 대해 생각하면) 다른면에서 좋을 것입니다.

많은 도움을 주셔서 감사합니다. :)

답변

0

좋아, 나는 다음과 같은 과정을 지금 내 문제를 해결 :

내가 HSQLDB를 사용하는 지금의 내장 (복어 같은 등) AES-128 암호화를 지원합니다. HSQLDB는 열린 연결이 존재하는 동안 다른 파일을 생성합니다.

HSQLDB의 암호화 메커니즘이 사용되면 파일은 생성 된 개인 키로 암호화됩니다. 생성은 각 실행시 개별 32 자 너비의 키를 만듭니다.

이 키와 파일을 보호하기 위해 전체 폴더를 데이터베이스 파일과 함께 zip 파일로 압축합니다. 다음 단계에서는 사용자가 로그인 화면에 입력 한 비밀번호로이 파일을 암호화합니다. 이 암호는 물리적으로 저장되지 않습니다. 암호화/복호화를 위해서는 Bouncy Castle Java Cryptography API의 AES 구현을 사용합니다.

암호화 세부 설명 : 1. AES 용 KeyGenerator로 SecureRandom-Class 및 데이터 암호화 키 (DEK, 16 바이트)를 사용하여 무작위 초기화 벡터 (IV; 16 바이트), 소금 (8 바이트)을 생성하십시오. 2. 입력 된 암호와 소금을 사용하여 32 바이트 길이의 PBKDF2 키를 생성하고 확인 키 (VK; 16 바이트)와 키 암호화 키 (KEK; 16 바이트)로 분할합니다. 3. 데이터베이스 파일을 저장하는 폴더를 zip 파일로 압축하고이 파일의 바이트를 DEK 및 AES 공급자로 암호화합니다. 4. AES 공급자가 KEK 및 IV를 사용하여 DEK를 암호화합니다. 5. 암호화 된 zip 파일의 시작 부분에 IV, Salt, DEK 및 VK를 저장하십시오. 데이터베이스 내부 암호화를 추가로 사용하면 zip 파일에도 저장되는 CRYPT_KEY가 발생합니다.

결국 나는 응용 프로그램이 종료 될 때마다 데이터베이스 파일을 삭제합니다.

이 프로세스의 취약성을 줄이기위한 제안 사항이 있으면 제발 hestitate로 작성하십시오. 설명 된 프로세스의 보안 측면을 개선하는 방법에 대한 아이디어를 얻으 려한다면 정말 대단합니다!

관련 문제