使用用户密码加密密钥密码 - 坏主意


Encrypting key passphrase with user password - bad idea?

我目前有一个私钥,用于签署当前存储在密钥库中的文档。尽管服务器专用于此任务(即:除了通过https运行的签名服务之外,没有人可以访问它),但我不愿意以纯文本形式保留密钥库的密码。我认识到,如果有人可以访问服务器,这可能是一个潜在的风险。

我认为合适的是使用用户的密码在服务器中加密密钥库的密码。因此,每当用户想要使用私钥时,都必须提供他的密码。密码更改不会有问题,因为加密的密码可以用旧密码解密并使用新密码加密。

要使攻击者获得对 PK 的访问权限,必须猜测某人的密码并有权访问服务器以解密密码以访问 KeyStore。可以强制执行强密码策略以避免弱密码,并且并非所有用户都可以签署文档。

当我发现这条评论时,我正在阅读OpenSSL PHP页面(得分为-8):

使用 OpenSSL 生成密钥对后,可以存储公钥 纯文本格式。然后我使用 常规 mcrypt 与我选择的人类记忆密钥和 使用base64_encode将其转换为ACSII。然后获取私钥 回来了,我只是用mcrypt解密了它。这样我就可以存储 服务器上的加密私钥,无需担心拥有 存储未加密的内容。

当然,这只会和你人类记忆的钥匙一样好 并且可能会降低脚本的安全性,如果您选择 简单的东西或不使用盐。

那么,这是一个坏主意还是可以在生产中使用?

取决于我们所说的坏主意。安全的整个理念是使违规行为更加昂贵和难以发生。但是,有时存在一种权衡,即您失去了可用性以增加安全性,或者在这种情况下,如果更多用户在这种情况下应该使用不同的密码而不是相同的用户帐户密码,则他们更有可能开始忘记密码。

您必须考虑,如果时不时需要更改用户密码,用户可能会感到困惑和健忘,然后放弃它并开始将密码写入桌面上的文件中!这真的有帮助吗?我知道小型和大型组织为用户提供PGP证书,其密码短语与用户的帐户密码相同。所以最后真的是你的选择!如果是我,如果不是我正在处理的绝密文件,我会使用与用户帐户相同的密码。