嵌入式数据库和加密

晚安42

我想创建一个开源应用程序,其中将用户特定的数据存储在嵌入式数据库(例如SQLite,H2,HSQLDB)中。另外,会有一个登录屏幕,用户必须在其中输入加密数据库的密码。但是我不确定如何处理加密:仅由数据库和/或由BouncyCastle处理,并且具有完整的文件加密功能?

我更喜欢基于文件的加密:如果我要使用文件加密,是否可以在不将解密文件实际存储在硬盘上的情况下使用嵌入式数据库?这个要求有道理吗?我的意思是,如果我的计算机受到攻击者的攻击,数据库中存储的数据将以某种方式或以其他方式可读,对吗?另一方面,如果不需要创建数据库的解密副本(考虑一下硬盘上的空间或性能),那就很好了。

在此先感谢您的帮助!:)

晚安42

好的,我现在通过以下过程解决了我的问题:

我现在使用HSQLDB及其通过AES-128(以及其他类似Blowfish)的内置加密。存在打开的连接时,HSQLDB将创建其他文件。

如果使用HSQLDB的加密机制,则使用生成的私钥对文件进行加密。这一代会在每次运行时创建一个单独的32个字符宽的密钥。

为了保护此密钥以及其他文件的安全,我首先将整个文件夹以及数据库文件打包到一个zip文件中。在下一步中,我使用用户在登录屏幕上输入的密码对该文件进行加密。该密码将不会被物理保存。对于加密/解密,我使用Bouncy Castle Java密码API的AES实现。

详细的加密:1.使用SecureRandom-Class创建随机初始化矢量(IV; 16字节),盐(8字节),并使用KeyGenerator for AES创建数据加密密钥(DEK; 16字节)。2.使用输入的密码和盐创建32字节长的PBKDF2-Key,并将其拆分为验证密钥(VK; 16字节)和密钥加密密钥(KEK; 16字节)。3.将保存数据库文件的文件夹打包为一个zip文件,并使用DEK和AES-Provider加密该文件的字节。4.由AES-Provider用KEK和IV加密DEK。5.将IV,Salt,DEK和VK存储在加密的zip文件的开头。如果另外使用数据库内部加密,则会得到一个CRYPT_KEY,该密码也存储在zip文件中。

最后,我在每次关闭应用程序时删除数据库文件。

如果您有什么建议可以减少此过程的脆弱性,请不要犹豫。我将非常高兴获得有关如何改进所描述过程的安全性方面的想法!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章