假设我想使用 JavaScript Web Crypto API向 Web 应用程序添加客户端加密。我的应用程序的客户端将使用他们的密钥加密每个用户的数据,然后将加密的数据发送到服务器,并解密服务器返回的数据以显示它。
用户如何为这样的应用程序存储他们的密钥,而不会使其使用不便?
是否有一些简单的方法可以将密钥存储在浏览器中?
还是每个用户都必须将其密钥保存在计算机上的本地文件中,并在每次登录时将其导入 Web 应用程序?他们可以使用像 Apple Keychain 这样的单独密码管理器吗?
假设我想使用 JavaScript Web Crypto API向 Web 应用程序添加客户端加密。我的应用程序的客户端将使用他们的密钥加密每个用户的数据,然后将加密的数据发送到服务器,并解密服务器返回的数据以显示它。
用户如何为这样的应用程序存储他们的密钥,而不会使其使用不便?
是否有一些简单的方法可以将密钥存储在浏览器中?
还是每个用户都必须将其密钥保存在计算机上的本地文件中,并在每次登录时将其导入 Web 应用程序?他们可以使用像 Apple Keychain 这样的单独密码管理器吗?
Web Cryptography Api 的突破是在不暴露私钥内容的情况下,为加密密钥的创建、使用和存储提供原生支持
总之:
您可以使用加密密钥,但其内容对用户和程序员都是隐藏的。请注意图像中的“cryptoKey”对象被浏览器隐藏
为什么不使用...
替代品(@dandavis 评论)
这些解决方案适用于必须对服务器隐藏数据的情况。让服务器处理您需要的客户端数据(取决于密钥的类型)
对称密钥:您需要向服务器提供密钥本身(因此它必须是可提取的)或密码才能解密数据
不对称密钥:服务器使用密钥对(公共/私有)。服务器将公钥发送给客户端。从客户端发送到服务器的数据使用服务器公钥加密并使用私钥解密。从服务器发送到客户端的数据使用客户端公钥加密,并使用客户端私钥解密。