You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Web Crypto API的加密与签名:是否需双密钥对?

问题解答

核心结论

你确实需要为密钥包装/加密和签名验证分别生成不同的RSA密钥对,Web Crypto API不支持同一密钥对同时完成这两类操作,这既是API的设计限制,也是密码学的最佳实践要求。

具体原因

  1. API的算法与密钥用途限制
    Web Crypto API对密钥的keyUsages属性有严格区分:

    • 用于加密/密钥包装的RSA-OAEP密钥,生成时需指定keyUsages为["encrypt", "wrapKey"](公钥)或["decrypt", "unwrapKey"](私钥);
    • 用于签名/验证的RSA算法(如RSA-PSS、RSASSA-PKCS1-v1_5),密钥的keyUsages必须设为["sign"](私钥)或["verify"](公钥)。
      一个密钥对象无法同时拥有两类用途,API会直接拒绝这种不符合规范的密钥生成或操作请求。
  2. 密码学实践的安全要求
    加密密钥对和签名密钥对的安全目标完全不同:

    • 加密公钥用于接收保密信息,私钥用于解密;
    • 签名私钥用于证明身份和消息不可否认性,公钥用于验证身份。
      混用密钥对会带来安全风险,比如签名私钥若被用于加密操作,泄露后不仅会失去签名的不可否认性,还会导致所有用该密钥加密的信息被破解。

实践建议

  • 生成RSA-OAEP密钥对:用于对称密钥的包装/解包,以及敏感数据的加密/解密;
  • 生成RSA-PSS(推荐)或RSASSA-PKCS1-v1_5密钥对:用于消息签名和身份验证;
  • 协作双方交换公钥时,同时交换这两个公钥:对方用你的加密公钥包装对称密钥,用你的签名公钥验证你发送消息的身份。

内容的提问来源于stack exchange,提问作者Eric Anderson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:10:03