我需要通过RSA解密消息,以便通过不安全的通道发送消息,但我害怕Padding Oracle Attack。因此我已经问过以下几个问题:
与第一个问题中提到的一样,
但是,由于您使用的是高级加密库,因此您不必担心这一点。该图书馆的作者应该照顾它。
我不应该考虑。据我所知,PKCS#1 v1.5
的RSA实施容易受到Padding Oracale Attack
的影响,OAEP不是(假设它已正确实施)
因此,我想知道Java 7的javax.crypt.Cipher
使用了哪个填充实现
答案 0 :(得分:6)
这不是the first link to the cryptography site给出的好建议。您永远不应该依赖加密库加密算法的默认值。这有很多原因:
由于历史原因,Oracle提供的SunJCEProvider
默认为PKCS#1填充("PKCS1Padding"
)(参见上面的原因#2)。这没有很好的记录。
那时设置了默认值,你基本上只有不安全的教科书RSA("NoPadding"
)和PKCS#1 v1.5版本("PKCS1Padding"
或RSAES-PKCS1-v1_5
in the PKCS#1 v2.1 standard)。当时RSAES-PKCS1-v1_5
绝对是更安全的选择。现在将默认值更改为OAEP会破坏使用默认值的每个RSA实现。
otus的建议(在本答案的第一个链接中)更适合于库中的协议实现而不是加密算法。 最终,您应该能够捍卫所做出的选择的安全性,无论您选择什么。
答案 1 :(得分:0)
仅指定RSA
时,弹性城堡的默认值为RSA/NONE/NOPADDING
这也与RSA/ECB/NOPADDING
相同。