如何安全地保存解密的临时数据?

时间:2013-06-09 13:27:21

标签: python security sqlite gnupg

作为一种兴趣,我计划使用python编写密码管理脚本。

我的粗略想法是将帐户名和密码对存储在由GPG加密的SQlite数据库文件中。

问题在于:如何安全地为SQlite库提供临时解密的数据库文件?由于将原始文件放在隐藏路径中并不能保证安全性。或者我应该将解密的数据保存在内存中?怎么样?

我知道有一个用于加密SQlite数据库的第三方框架。但我对它的实际运作方式非常好奇,因为在这样的框架中处理中间数据似乎是不可避免的。

1 个答案:

答案 0 :(得分:1)

是的,将数据库保留在内存中似乎是一个可行的解决方案。这有点困难的是,SQLite可以轻松地在内存中创建一个数据库(使用:memory:而不是文件名)但是使 load 已经存在于内存数据库中会有点痛苦:你必须实现自己的sqlite_vfs。我见过one implementation但它已经很老了,我不确定它是否仍然有用。此外,使用Python需要额外的努力 尽管如此,将整个解密数据库始终保留在内存中并不是非常安全,因为您的内存可能偶尔会被分页到磁盘。所以,请记住mlock它。

一个更简单的解决方案是拥有一个普通的数据库,但在存储之前加密所有数据。这样,您只需要在内存中保留密码和一小部分解密数据。