Encryption 为什么在安全文档传输上使用两步加密?

Encryption 为什么在安全文档传输上使用两步加密?,encryption,w3c,webcrypto-api,Encryption,W3c,Webcrypto Api,我阅读了W3C文章()中关于Web加密API的一节。事情是这样的, 受保护的文档交换: web应用程序可能希望限制 包含敏感或个人信息,即使这些文档 已安全接收,例如通过TLS 使用Web加密API,应用程序可以通过 使用密钥加密文档,然后包装该密钥 使用与授权查看器关联的公钥。当 用户代理导航到这样的web应用程序时,应用程序将 发送文档的加密表单。然后,用户代理被激活 指示使用用户的私钥打开加密密钥, 然后,解密并显示文档 我想知道,为什么要先用密钥加密文档,然后用用户的公钥包装密钥?难道仅

我阅读了W3C文章()中关于Web加密API的一节。事情是这样的,

受保护的文档交换: web应用程序可能希望限制 包含敏感或个人信息,即使这些文档 已安全接收,例如通过TLS

使用Web加密API,应用程序可以通过 使用密钥加密文档,然后包装该密钥 使用与授权查看器关联的公钥。当 用户代理导航到这样的web应用程序时,应用程序将 发送文档的加密表单。然后,用户代理被激活 指示使用用户的私钥打开加密密钥, 然后,解密并显示文档


我想知道,为什么要先用密钥加密文档,然后用用户的公钥包装密钥?难道仅仅用用户的公钥加密文档并发送就足够了吗?或者,这样做只是为了获得不必为每个用户单独加密文档的性能优势吗?

公钥密码系统与对称密码系统相比速度较慢。因此我们更喜欢;使用公钥密码系统进行密钥交换,并使用交换的密钥对数据进行加密。这里有一些方法

  • 使用Diffie-Hellman密钥交换(DHKE)派生会话密钥。使用KDF(如HKDF)导出所需密钥,并使用对称算法加密,该算法具有良好的操作模式,如AES-GCM和ChaCha20-1204(均在TLS 1.3中)

    这样,您将拥有DHKE的前向保密性,以及AES-GCM和ChaCha20-Poly1305的保密性、完整性和身份验证

    最好使用名为ECDH的DHKE的椭圆曲线版本

  • 使用RSA-KEM进行密钥封装。在模数范围内选择一个随机数,再次使用HKDF导出密钥,再次使用AES-GCM或ChaCha20-Poly1305进行加密,使用RSA加密发送密钥,并同时发送密文


这是密钥封装机制(KEM)和数据封装机制(DEM)的要点。

数据通常不使用公钥加密,这是非专家的误解。标准方法使用,这就是您的报价所描述的。混合加密更简单、更安全、速度更快。