我一直在用Python编写一个小的密码管理命令行实用程序。通常只是为了好玩,可能因为我已经使用已建立的工具来完成此任务,所以实际上我什么都不会使用。
该程序将站点,用户名和密码存储在sqlite数据库中,并提供了用于查找密码,帐户等的各种选项。我一直在寻找一种加密sqlite数据库的方法,因为密码和我碰到的一样sqlcipher。我在Mac OS上构建它时遇到了麻烦,很快就放弃了。我决定尝试仅使用GnuPg加密数据库。从使用的角度来看,它似乎运行良好。我在bash中编写了一个小型包装程序,该包装程序可以在对数据库执行任何操作之前快速对其进行解密,并在完成操作后对其进行重新加密。这是加密sqlite数据库的可接受方法吗?我真的在网上找不到其他任何以这种方式加密的sqlite数据库示例。
答案 0 :(得分:0)
这是对sqlite数据库进行加密的可接受方法吗?
如果您认为可以接受,则其他人可能会也可能不会。
但是,从安全角度来看,如果要解密数据库文件以使用它,然后在使用后对其进行加密,则可能不是这样,因为解密后的版本可以使用和访问。 SEE(SQLite Encryption Extension)仅解密到内存,然后仅解密部分数据,而不解密整个文件,因此从安全性的角度来看会更安全。
SEE的工作原理
每个页面分别加密。加密的关键 是页码,随机随机数(如果有)和 数据库密钥。数据在主数据库和 回滚日志或WAL文件,但保存在其中时未加密 记忆。这意味着如果对手能够查看内存 由您的程序使用,她将能够查看未加密的数据。
一种替代方法是存储加密的值,在提取每个加密的值时对其进行解密,这将等同于解密后的值仅在内存中。这可能具有多个关键短语(例如针对多个用户)的潜在好处。这样就不会有一个密钥可以解锁所有数据。