问题标签 [padding-oracle-attack]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
19547 浏览

java - javax.crypto.Cipher 为 RSA 使用了哪个填充

我需要通过 RSA 解密消息以便通过不安全的通道发送它,但我害怕Padding Oracle Attack。因此,我已经问了以下问题:

  1. 如何验证 RSA 加密消息的完整性?
  2. 如何使用 javax.crypto.Cipher 确保 RSA 密码的消息完整性

就像第一个问题中建议的那样,

但是,由于您使用的是高级加密库,因此您不必担心这一点。该图书馆的作者应该照顾它。

我不应该考虑。据我所知,RSA 的实现PKCS#1 v1.5很容易受到Padding Oracale AttackOAEP的影响(假设它已正确实现)

因此,我想知道javax.crypt.CipherJava 7使用了哪个填充实现

0 投票
1 回答
1689 浏览

encryption - 如何处理 pkcs11 中的填充错误?

我想知道C_DecryptFinal&C_Decrypt应该如何处理填充错误。

根据pkcs11 2.20C_DecryptFinal可以返回CKR_ENCRYPTED_DATA_INVALIDor CKR_ENCRYPTED_DATA_LEN_RANGE,所以我假设如果 padding 无效,C_DecryptFinal/ C_Decryptreturn CKR_ENCRYPTED_DATA_INVALID

这是对的吗?

如果是这样,是否C_DecryptFinal/C_Decrypt容易受到 padding-oracle 攻击?

0 投票
1 回答
627 浏览

python - CBC解密异或混淆

我正在尝试在 DES 中实现填充 oracle 攻击。我对 CBC 解密过程的理解(或者至少我在课堂上被告知的)是这样的:

假设我们的密文只有两个块,C0 和 C1。解密过程然后与 C1 进行 C0 异或,然后解密。之后,oracle 检查填充并返回 True 或 False。

我的问题是关于异或,我不明白如何在 python 中对两个字符串值进行异或(我对这一切都很陌生)。

所以如果我有价值观:

我如何对这两者进行异或运算,以便查看预言机是否返回正确的值?

编辑:我已经尝试过以下代码:如何在 python 中按位异或两个字符串?

但是我得到了一个看起来很奇怪的输出,这就是为什么我发布了一个单独的问题。任何帮助将不胜感激谢谢

终端输出

0 投票
0 回答
239 浏览

encryption - Padding oracle攻击,加密自己的消息

我对填充预言机的加密攻击的理解是攻击者有一组 Pi 和 Dec(Ci)

我知道通过反向计算攻击者可以找出 Ci-1,因为我们有

这样攻击者可以找到所有的 Ci-1,但是第一个 Ci 会发生什么?由于您从头开始并倒退,看起来最后一个 Ci 不会被计算,在这种情况下,攻击者无法加密所有消息......?

0 投票
1 回答
136 浏览

security - 幸运十三这个名字的含义是什么?

来自文章幸运十三:打破 TLS 和 DTLS 记录协议

哪些特定攻击可能的细节取决于握手协议协商的 MAC 算法输出的 MAC 标记的确切大小,以及在 MAC 计算中包含正好 13 个字节的报头数据这一事实(因此我们的标题)。

此外,我在伦敦大学皇家霍洛威学院的网站上阅读:

TLS MAC 计算包括 13 个字节的标头信息(5 个字节的 TLS 标头加上 8 个字节的 TLS 序列号)这一事实部分地使攻击成为可能。

据我了解,攻击是基于填充机制、使用 CBC 操作模式的事实以及 MAC 计算时间(和压缩函数)的差异。我无法弄清楚 MAC 标头的大小如何影响。

谁能解释一下幸运十三这个名字的含义?

谢谢你。

0 投票
1 回答
648 浏览

c# - 此代码是否容易受到填充预言机攻击?

以下代码是否容易受到填充预言攻击,因为如果填充有效或无效(CBC,PKCS#7),它将返回?

代码直接取自微软的网页,可以在 dotnetfiddle.net 等在线编译器上轻松运行。

我目前正在研究的程序使用上面的代码来加密一些 XML 文件。这是该程序的示例文件(只有一个元素的 XML 文件)。

0 投票
1 回答
676 浏览

python - Python Padding Oracle 破解脚本似乎未定义?

我正在编写一个非常简单的脚本,它将根据这个公式解密一个文本字节,P′2[K] = Pn[K] ⊕ Cn-1[K] ⊕ C′[K] oracle 是一个简单的函数,它解密然后检查最后一个字节是否等于 padding 0x15。p'2[k] 只是 0x15(填充大小)

但行为似乎 Undefined 。该循环是一个从 0-> 255 的简单循环(尝试解密一个块的次数)

被加密的消息只是 8 字节字符串 + 8 字节填充,并且每次都使用相同的密钥和 IV 进行解密。与c1,c2对应m1,m2的密文

完整的源代码在这里:

0 投票
0 回答
35 浏览

encryption - 在 AES-128 中,get 请求参数的密文是否可以包含 16 的非整数倍数的字节数?

我一直在研究加密/解密以及最近的填充预言攻击。现在,在我的学习中,我遇到了一个看起来像这样的 URL:

http://(some url)?stuff=IfCmMrKNpduwAZW51Kz-HGcGROyJM8ul3Q3us3kzzQQe-rwWR1e7tv3pCWGkqKe7XCK5J9q0sUfv2V!Ot-7rlZ3meyeVtX44xib7oMV-Q6TpIfuD8FfHskAw9oY8cjM-5r2!bTwy-AhsnNTKTM9GClGQOCNIQhDZruztsRfsOR65BTgWm31ZepjLayhN-I8AjB6jkoZQBJZtXNk3VyJ3Cg~~

现在,我将 stuff 参数中的密文放入字符计数器中,发现该密文由 216 个字符(即 216 个字节)组成。但是,数字 216 不是 16 的倍数(因为 216 / 16 = 13.5)。

AES-128 使用 16 字节块(是的,应用程序确认数据是使用 AES-128 加密的),所以当数据被加密时,它应该已经被填充,以便密文最终由多个字节组成是 16 的倍数。这是正确的,不是吗?

如果是这种情况,那么为什么上面的 URL 会返回 200 ok 状态而不是 500 无效填充的内部服务器错误?为什么只有当我删除该密文中的字符或更改字符时,才返回无效填充错误?(顺便说一句,那个网址不是真正的网址。我不想使用实际的网址,但密文是真实的)。我在这里错过了什么吗?

0 投票
0 回答
36 浏览

python - 在python中设置递归函数的问题(第一次使用python)

我已经为填充 oracle CTF 编写了这个小函数,但在此过程中迷路了,有人可以帮忙吗?

我正在尝试从后面逐字节更新字节串。但是,当我运行它时,它是从前面的 newbyte 执行的:看起来像 b"x00/x00..." iv[0:x] 不会以某种方式变小