我实际上编写了一个 Python 模块来访问 KeePass/KeePassX 数据库。我的问题是数据库的密码以纯文本形式保存在我的数据库对象中:
def __init__(self, filepath=None, masterkey=None, read_only=False,
new = False):
""" Initialize a new or an existing database.
If a 'filepath' and a 'masterkey' is passed 'load' will try to open
a database. If 'True' is passed to 'read_only' the database will open
read-only. It's also possible to create a new one, just pass 'True' to
new. This will be ignored if a filepath and a masterkey is given this
will be ignored.
"""
self.groups = []
self.read_only = read_only
self.filepath = filepath
self.masterkey = masterkey # I mean this
我不知道如何避免这种情况。我唯一的想法是存储使用随机生成的密钥加密的密码(就像 KeePassX 所做的那样),但是 Python 不允许私有成员是否存在问题?我的意思是可以从正在运行的程序外部访问随机生成的密钥吗?或者是从 RAM 中转储程序内存的唯一可能性?如果后者的答案是“是”,那么应该增加安全性还是我被误导了?
无论哪种方式,是否存在 Python 将字符串“抛出”到整个 RAM 以使密码始终有可能以纯文本形式存储的问题?
我知道很多问题,但这是该项目中最关键的安全点之一。