使用主密钥进行Python加密
我需要把一些敏感数据放到一个数据库里,这个数据库是我们组织里所有人都能看到的。我想先把数据加密,然后再放到一个文本字段里。用户通过一个图形界面可以访问这些数据,界面会要求用户输入一个密码,这个密码会用来加密和解密数据。
我不太相信用户能记住他们的密码,所以我想有一个主密钥,这个密钥可以解密所有的数据。
我觉得唯一可行的方法是用对称密钥来加密数据,同时用公钥加密一份密码的副本。然后可以用私钥来解密对称密钥,这样即使用户丢了他们的密钥,也能解密数据。
这样做合理吗?还是说我把事情搞得太复杂了?
我会用Python来实现这个。看了其他帖子,似乎Pycrypto是我应该关注的库。这对吗?
谢谢!
2 个回答
0
如果协议没有严格要求,你绝对不应该对密码进行加密。
你可以考虑这样做:
- 为每个字段创建一个随机的对称密钥
- 用一个主公钥加密这个密钥(主私钥要妥善保管,比如可以放在一个安全的地方)
- 用从密码中生成的对称用户密钥加密这个密钥,生成用户密钥的过程可以使用PBKDF2
- 用这个对称密钥加密数据
- 把对称密钥和主公钥、用户密钥、PBKDF2所需的盐值(如果可能的话,前面加上协议的版本指示)以及密文一起存储
现在,你只需要制定一个流程,来处理用户忘记密码的情况。这需要设置一个新密码并找回数据。
0
我觉得这个方法会导致设计变得复杂,这样在扩展和维护的时候会更加麻烦。
更好的方法是使用对称密钥来存储和获取数据库中的敏感数据。用户可以输入他们的密钥,然后数据就可以被解密或加密。这个链接会帮助你实现这个功能。