加密凭据并安全地重复使用它们

时间:2017-02-03 12:07:07

标签: python security encryption cryptography

我目前正在建立一个网站,用户可以在其中输入其他网络服务的凭据,我将要抓取这些网站以获取他们的数据。

我想确保当我将其凭据保存在我的数据库中时,我正在使用尽可能最好的加密和最佳架构来确保最高级别的安全性。

我想到的第一个想法是使用RSA pub密钥(PBKDF2,PKCS1_OAEP,AES 256bit ...... ???)加密数据,然后允许我的报废脚本使用私钥解密凭据并使用它们。

  • 但是如果我的服务器被黑客攻击,黑客就可以访问数据库和私钥,因为它将保存在运行报废脚本并托管数据库的服务器上。是否有解决此问题的架构模式?
  • 我读过应该混合使用散列和加密来实现最大的安全性,但散列是单向的,并且它不适合我的用例,因为我必须重用凭据。如果你能用最好的加密密码/模式告诉我你知道它可能很棒。

我在python中编码,我相信PyCrypto是加密的首选库。 (对不起,我对加密知识知之甚少,所以我可能会混淆技术)

2 个答案:

答案 0 :(得分:0)

在第二台服务器(加密服务器)上进行加密和解密。

将密码连同加密ID一起传递给加密服务器,并返回加密密码以存储在数据库中。

需要密码时,将加密密码传递给加密服务器进行解密。

让加密服务器监控请求活动,如果收到异常数量的请求,则发出警报,并在极端情况下停止处理请求。

使第二台服务器非常安全。无法访问Internet,访问帐户最少,双因素身份验证。

加密服务器成为穷人的HSM(硬件加密模块)。

答案 1 :(得分:-2)

from cryptography.fernet import Fernet 
class Crypt():
    def __init__(self, key):
        self.cipher = Fernet(key)

    def encrypt(self, my_message):
        return self.cipher.encrypt(my_message)

    def decrypt(self, my_message):
        return self.cipher.decrypt(my_message)

    @staticmethod        
    def key_maker():
        return Fernet.generate_key()            

if __name__ == '__main__':
    KEY = Crypt.key_maker()
    crypt = Crypt(KEY)
    msg = crypt.encrypt(b'hi')
    msg = crypt,decrypt(msg)