RSA-OAEP和RSA-PKCS1.5之间的区别

Nix*_*ixy 3 encryption cryptography rsa padding

RSA-OAEP和RSA-PKCS1.5有什么区别?我的理解是它们都是RSA加密,但是使用不同的填充方案。一个相对于另一个的优势是什么?如果生成RSA 2048海盗和公钥对,是否可以使用同一密钥对加密和解密OAEP填充与PKCS1.5填充的消息?

bar*_*njs 5

至少有一个更全面但简单的答案,可以在“ 什么是RSA OAEP和RSA PSS”中以简单术语找到答案(InfoSec.SE)

What is the advantage of one over the other?从InfoSec.SE的答案中询问:

这次出了什么问题?

事实证明,错误的答案可以“成功解密”。任何消息C都对任何带有奇数的4096位密钥k有效

1/256 * 1/256 * (255/256)^8 * (1 - (255/256)^502)
Run Code Online (Sandbox Code Playgroud)

(“第一个字节为零”,“第二个字节为2”,“ 8个字节内没有零”,“最终出现零”)

0.004 * 0.004 * 0.996^8 * (1 - 0.996^502)
0.004 * 0.004 * 0.969 * (1 - 0.140)
0.004 * 0.004 * 0.969 * 0.860
1.27e-5
Run Code Online (Sandbox Code Playgroud)

因此,每78,000条消息中大约有1条是“有效”的,但错误的。这可能会使Bob感到困惑,并使他说些愚蠢的话作为回应。如果夏娃(空余时间比马洛里更多)希望她现在可以开始发送鲍勃聪明的胡言乱语并观察他说自己感到困惑的时间,最终夏娃可以弄清楚原来的信息是什么。(Bleichenbacher攻击(Crypto.SE)

你也问过 can I use the same key pair to encrypt and decrypt a message that is OAEP padded vs PKCS1.5 padded?

如果您的意思是“软件会让我吗?” 答案是肯定的。如果您的意思是“这是个好主意吗?”,那么在FIPS 186-4第5.1节中,美国政府的要求是

用于数字签名的RSA密钥对只能用于一种数字签名方案(例如ANS X9.31,RSASSA-PKCS1 v1.5或RSASSA-PSS;请参见5.4和5.5节)。此外,RSA数字签名密钥对不得用于其他目的(例如,密钥建立)。

因此,该文档的作者至少建议不要对OAEP和PKCS1.5使用相同的密钥

IETF RFC 8017第6节进一步建议不要这样做:

通常的良好加密做法是仅在一种方案中使用给定的RSA密钥对。这避免了一种方案中的漏洞可能损害另一种方案的安全性,并且对于维持可证明的安全性必不可少的风险。[...]

为了说明在多个方案中使用RSA密钥对的相关风险,假设在RSAES-OAEP(第7.1节)和RSAES-PKCS1-v1_5中都使用了RSA密钥对。尽管RSAES-OAEP本身可以抵抗攻击,但对手可能能够利用RSAES-PKCS1-v1_5的实现中的弱点来恢复使用任一方案加密的消息。


Dar*_*l42 2

PKCS#1 ....参见https://www.rfc-editor.org/rfc/rfc3447#page-23

非常非常简短的差异细分:

PKCS1.5 或更正式的 EME-PKCS1-v1_5 定义了一个仅附加到消息 M 的填充,主要由消息长度相关的随机字节数组成......

意思是:如果“MESSAGE”进入PKCS1.5,你会得到类似“MESSAGE#GARBAGE#”的信息

注意:如果随机部分中的某些位发生变化,它并不会真正损害解密操作...有密码学原因导致这种情况不好,但这超出了 SO 的范围...为此请转到https: //crypto.stackexchange.com/

OAEP:定义全有或全无操作,从消息 M 和随机数 r 生成伪随机消息 M'

你需要 M' 的每一端来恢复 r 并解码 M

EME-PKCS1-V1_5 应被视为不安全且已弃用

  • 该消息是在 v1.5 填充*之后*出现的。请注意,RSA 是使用 Big Endian 表示法定义的。在我看来,整个问题更适合加密货币,我会标记它。 (2认同)