用 GnuPg 加密 sqlite3 数据库可以吗?

Is it okay to encrypt sqlite3 database with GnuPg?

我一直在尝试在 Python 中编写一个小型密码管理命令行实用程序。 Mostly 只是为了好玩,而且可能我不会真正使用任何东西,因为我已经使用已建立的工具来完成这项任务。

该程序将站点、用户名和密码存储在一个sqlite数据库中,并提供了多种查找密码、帐户等的选项。我一直在寻找一种加密sqlite数据库的方法,因为密码,我来了 across sqlcipher。我在 mac os 上构建它时遇到了问题,很快就放弃了。我决定尝试使用 GnuPg 加密数据库。从使用的角度来看,它似乎运作良好。我在 bash 中写了一个小包装器,它可以在对数据库进行任何操作之前快速解密数据库,并在完成后重新加密它。这是加密 sqlite 数据库的可接受方法吗?我真的无法在网上找到任何其他以这种方式加密的 sqlite 数据库示例。

Is this an acceptable method for encrypting a sqlite database?

如果您认为可以接受,其他人可能会也可能不会。

但是,从安全的角度来看,如果您正在解密数据库文件以使用它,然后在使用后对其进行加密,则可能不是这样,因为解密版本可能可用并可以访问。 SEE(SQLite Encryption Extension)只解密到内存,然后只解密部分数据,而不是整个文件,所以从安全方面来说会更安全。

How SEE Works

Each page is encrypted separately. The key to encryption is a combination of the page number, the random nonce (if any) and the database key. The data is encrypted in both the main database and in the rollback journal or WAL file but is unencrypted when held in memory. This means that if an adversary is able to view the memory used by your program, she will be able to see unencrypted data.

另一种方法是存储加密值,在提取每个值时对其进行解密,这样就等同于解密后的值仅存在于内存中。这可能具有多个关键短语的潜在好处(比如多个用户)。这样就没有可以解锁所有数据的单一密钥。