这是使用混合 RSA 2048、AES 256 发送大型加密消息并使用 HMAC SHA-256 进行身份验证的安全策略:
鉴于 Alice 已经拥有 Bob 的 RSA 公钥,Alice:
- 生成新的 128 位IV(强 PRNG)
- 生成新的 AES 256bit/CBC/PKCS7 加密密钥(Kc)
- 生成一个新的 AES 256bit/CBC/PKCS7 Auth Key (Ka)
- 用(Kc)和IV => (M)e加密她的消息 + 时间戳
- 进行认证IV +(M)在线与(KA)使用HMAC SHA-256 => IV +(M)E +标签
- 用 Bob 的 RSA 公钥加密(Ka)+(Kc),并用 OAEP => (Kc+Ka+P)e填充
- 进行认证(的Kc +嘉+ P)在线与(KA)使用HMAC SHA-256 => IV +(+的Kc嘉+ P)E +标签
- 发送 Bob RSA 加密IV+(Kc+Ka+P)e+Tag和 AES HMAC-256 消息IV+(M)e+Tag
然后鲍勃继续:
- 从IV+(Kc+Ka+P)e+Tag 中提取IV
- 根据 nonce 缓存检查IV,拒绝重复 IV 的消息
- 用他的 RSA 私钥提取和解密(Kc+Ka+P)e => (Ka)+(Kc)
- 用(Ka)验证IV+(Kc+Ka+P)e+Tag,拒绝无效消息
- 用(Ka)验证IV+(M)e+Tag,拒绝无效消息
- 用(Kc)解密IV+(M)e+Tag
- 提取时间戳和消息
- 验证时间戳不早于 Max Request Age,拒绝过期消息
基本上想知道上述混合 RSA/AES/HMAC SHA-256 方法是否有任何明显的弱点,或者任何人会做不同的事情?
上述策略已经过修改,以包含@puzzlepalace 的反馈,即创建单独的 AES 密钥用于加密和验证,而不是从主密钥的 SHA-512 哈希中派生它们。
欢迎任何其他反馈或改进建议!