如何将RSA私钥存储在客户端的浏览器中以获得更好的用户体验?
我计划编写一个基于Web的密码管理软件,以便在团队和成员中提供共享和权限功能。
编辑:
正如Luke Park在下面提到的那样,我想补充说我正在使用带令牌的用户密码授权(即过期)。 令牌在所有授权的API调用中提供,这些调用只能由注册用户访问。 是的,应用程序被SSL封装,使服务器和客户端之间的通信更加安全。
编辑结束
目前,我已经做了大量的研究,寻找处理密码加密的正确模式。 我所看到的模式称为混合加密,因为它可以与多个客户端协同工作并且可以安全地实施。 以下是我将如何在我的应用程序逻辑中实现此模式:
客户想创建一个密码
服务器应用手柄密码提交
检索共享密码
到目前为止,我看到这种模式足够安全,因为客户端的所有私钥都不公开,只对客户端可见。 为了在基于Web的应用程序中实现此功能,我找到了openpgpjs.org,它可以在客户端生成公钥和私钥,并使用这些密钥对数据进行加密或解密。 最重要的是,私钥字符串可以通过秘密密码来保护。
我的问题是,如何在不妨碍用户体验的情况下将私钥文件实施到我的前端应用程序中? 我不想强制用户手动管理他的私钥并强制他为每个密码请求提供密钥。 将私钥文件存储到浏览器的本地存储并在每次密码请求时从本地存储获取私钥是否安全?
您仍然无法验证您的客户端和服务器。 因为任何人都可以公开请求公共密钥,所以在客户端和服务器之间的MITM会很容易,并为其提供一个垃圾任意密码。
考虑:
如果不能验证和授权服务器和客户端,你的系统就容易混淆了。 这似乎不是一个巨大的问题,但它可以轻松让位给其他攻击。
编辑:也注意到,如果MITM发生在客户端和REST API之间,攻击者可以为客户端提供一个与攻击者拥有的私钥配对的公钥。
考虑:
经过几次思考,我决定使用用户主密码加密RSA私钥。 由于主密码无处存储,因此我认为将加密的私钥存储到用户的本地浏览器存储中是安全的。 该解决方案可以自动为每个密码请求提供加密的私钥,但强制用户在每个请求中输入密码,这对我来说现在很合适。
如果有人有更好的解决方案,我会很高兴,如果你可以在这里发布你的解决方案。
链接地址: http://www.djcxy.com/p/21775.html上一篇: How to store RSA private keys in the client's browser for better UX?