作为一种兴趣,我计划使用python编写密码管理脚本。
我的粗略想法是将帐户名和密码对存储在由GPG加密的SQlite数据库文件中。
问题在于:如何安全地为SQlite库提供临时解密的数据库文件?由于将原始文件放在隐藏路径中并不能保证安全性。或者我应该将解密的数据保存在内存中?怎么样?
我知道有一个用于加密SQlite数据库的第三方框架。但我对它的实际运作方式非常好奇,因为在这样的框架中处理中间数据似乎是不可避免的。
答案 0 :(得分:1)
是的,将数据库保留在内存中似乎是一个可行的解决方案。这有点困难的是,SQLite可以轻松地在内存中创建一个数据库(使用:memory:
而不是文件名)但是使 load 已经存在于内存数据库中会有点痛苦:你必须实现自己的sqlite_vfs
。我见过one implementation但它已经很老了,我不确定它是否仍然有用。此外,使用Python需要额外的努力
尽管如此,将整个解密数据库始终保留在内存中并不是非常安全,因为您的内存可能偶尔会被分页到磁盘。所以,请记住mlock
它。
一个更简单的解决方案是拥有一个普通的数据库,但在存储之前加密所有数据。这样,您只需要在内存中保留密码和一小部分解密数据。