如何确定 RSA 加密消息中使用的填充方案?
最好的方法可能是执行 PKCS#1 v1.5 或 OAEP 解密,看看您是否达到了黄金水平。如果选择了错误的算法,取消填充将会失败。
可以进行原始解密,然后通过将填充的消息表示为十六进制来查看结果方案。如果生成的八位字节字符串(字节数组)以
0002
开头,那么它可能是 PKCS#1 v1.5 填充。如果它以 00
开头,然后是一个随机的字节,那么它可能是 OAEP。正如您所看到的,这只是一个启发式算法,而不是一个成熟的算法。请注意,OAEP 的 MGFG1 可以用哈希函数参数化,但通常使用 SHA-1。
RSA-KEM 使用不多,但由于它会产生完全随机的密钥种子(可能不包括第一位),因此除了密文和私钥是否正确时期望 RSA-KEM 之外,没有其他方法可以测试 RSA-KEM可以验证是否正确,并且该值与其他方案之一不匹配/缺乏结构。
协议应定义使用哪种算法。将算法的选择留给解密例程会使您的实现容易受到攻击。密码的安全性证明不允许选择其他算法。
因此您可以使用上面的方法来分析协议,但请不要在您的实现中使用它来在现场算法之间进行选择。