我正在编写一个使用加密的python程序。用户可以设置密码,当密码成为输入时,数据库将被解密。但是,函数需要解密密钥才能解密。因此,我考虑将密钥隐藏在某个地方(加密和解密密钥将动态生成,这意味着新设备上的用户将拥有另一个解密密钥)。我不知道我能把它藏在哪里,所以程序可以使用它,但是用户无法破解它。
发布于 2020-08-12 02:51:30
在程序可以使用的任何地方,您都不能拥有解密(或加密)密钥,但是运行该程序的用户不能使用该密钥。这也是DRM计划面临的同样问题。用户和他们的软件之间没有信任边界;软件不能做任何用户无法编写软件去做的事情。
有一些方法可以隐藏密钥(比如将密钥存储在外部安全模块中--无论是硬件还是运行在不同、限制更严格的安全上下文中的软件),但这类系统仍然会按用户的软件要求对它们进行加密/解密,因此对这样的本地“攻击者”来说,没有密钥实际上是毫无意义的区别。
假设您不是简单地从用户输入的密码中派生密钥(并且永远不会将其持久存储,至少不会在任何地方以纯文本存储),那么您最好将密钥存储在用户的配置文件目录中(或者,存储在一个特定于操作系统的密钥存储区中,由MacOS和MacOS提供),权限设置为只有用户才能读取它。显然,这并不妨碍用户使用自己的软件读取它,但他们也可以修改Python代码或在调试器中运行它,并以这种方式提取密钥,即使有更安全的存储方式。
https://security.stackexchange.com/questions/236949
复制