【问题标题】:How to safely keep a decrypted temporary data?如何安全地保存已解密的临时数据?
【发布时间】:2013-06-09 13:27:21
【问题描述】:

出于兴趣,我打算用python写一个密码管理脚本。

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

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

我知道 SQlite 数据库的加密有第三方框架。但我很好奇它实际上是如何工作的,因为在这样的框架中处理中间数据似乎是不可避免的。

【问题讨论】:

    标签: python security sqlite gnupg


    【解决方案1】:

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

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

    【讨论】:

    • 我可以这样理解吗:处理大块的解密数据比处理大文件要好得多?我想知道成熟的密钥环程序是如何做到这一点的。
    • @ymfoi 不。我想处理块会更容易。我不能说一种方法比另一种方法好得多
    • @ymfoi 据我从this page 得知,GnomeKeyring 是前者,但它使用自己的二进制格式,而不是 SQLite。使用您自己的二进制格式,您不必与 SQLite 作斗争,因此一切都会变得更容易。
    猜你喜欢
    • 2011-08-14
    • 2016-01-25
    • 1970-01-01
    • 2020-10-19
    • 2016-02-03
    • 2018-08-27
    • 1970-01-01
    • 2017-07-06
    相关资源
    最近更新 更多