2017-01-28 13 views
0

ユーザ固有のデータが埋め込まれたデータベース(SQLite、H2、HSQLDBなど)に保存されているオープンソースアプリケーションを作成します。さらに、ユーザーが暗号化されたデータベースのパスワードを入力する必要があるログイン画面があります。しかし、私は暗号化をどのように扱うかまだ分かりません。データベースによってのみ処理されます。 BouncyCastleはファイル全体の暗号化をサポートしていますか?組み込みデータベースと暗号化

私はファイルベースの暗号化が好きです:ファイル暗号化を使用すると、暗号化されたファイルを物理的にハードディスクに保存せずに埋め込みデータベースを操作することは可能でしょうか?この要求は理にかなっていますか?私のコンピュータが攻撃者によって侵害された場合、データベースに格納されたデータは何らかの形で、あるいはその他の読み込みが可能なものですか?反対側では、データベースの復号化されたコピーを作成する必要がない場合(ハード・ディスクまたはパフォーマンス上のスペースについて考える)、それは良いでしょう。

ご協力いただきありがとうございます。 :)

答えて

0

[OK]を、私は次のプロセスで、今の私の問題を解決しました:

を私は今とAES-128(およびフグのような他の人)と内蔵の暗号化HSQLDBを使用しています。開いている接続が存在する間、HSQLDBは​​異なるファイルを作成します。

HSQLDBの暗号化メカニズムを使用すると、ファイルは生成された秘密鍵で暗号化されます。世代によって、各実行時に32文字のワイドキーが作成されます。

このキーとファイルを保護するために、データベースファイルを含むフォルダ全体をまずzipファイルにパックします。次のステップでは、ユーザーがログイン画面で入力したパスワードでこのファイルを暗号化します。このパスワードは物理的に保存されません。暗号化/復号化のために、Bouncy Castle Java暗号化APIのAES実装を使用します。

暗号化の詳細: 1. AES用のKeyGeneratorを使用して、SecureRandomクラスおよびデータ暗号化キー(DEK; 16バイト)でランダム初期化ベクトル(IV; 16バイト)、塩(8バイト)を作成します。 2.入力したパスワードと塩で32バイト長のPBKDF2キーを作成し、検証キー(VK; 16バイト)とキー暗号化キー(KEK; 16バイト)に分割します。 3.データベースファイルを保持するフォルダをzipファイルにパックし、このファイルのバイトをDEKとAES-Providerで暗号化します。 4. KEKとIVでDEKをAESプロバイダーで暗号化します。 5.暗号化されたzipファイルの先頭にIV、Salt、DEK、VKを格納します。データベース内部の暗号化をさらに処理する場合は、zipファイルにも格納されているCRYPT_KEYが取得されます。

最後に、アプリケーションのシャットダウンごとにデータベースファイルを削除します。

このプロセスの脆弱性を軽減するための提案がありましたら、hestitateを書いてください。説明されたプロセスのセキュリティ面を改善する方法を知りたいなら、私は非常に喜んでいます!

関連する問題