- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想知道从 SSL 3.0 到 TLS 1.0 的哪些更改完全修复了 POODLE 攻击。此攻击的基础是消息 block M1||MAC||PAD,因此整个 block 用于 MAC 和填充。
我有一个想法,它不再工作(没有降级)因为在 TLS 1.0 中如果最后一个 block 是填充它是 0x101010...( block 大小为 16)而不是 0xXX...XX10( XX=Random), 所以直接猜 16 Bytes 比只猜最后一个 Byte 重很多。
但是是否有任何其他安全参数可以解决此问题,或者我提到的是否正确?消息的结尾不再是 ||MAC||PAD 了吗?或者 PAD 是否有签名或类似的东西?
问候朱利安
最佳答案
SSL 3.0 和 TLS 1.0 处理填充的方式不同。
参见 https://www.openssl.org/~bodo/ssl-poodle.pdf这部分:
The most severe problem of CBC encryption in SSL 3.0 is that its blockcipher padding is not deterministic, and not covered by the MAC(Message Authentication Code): thus, the integrity of padding cannotbe fully verified when decrypting. Padding by 1 to L bytes (where L isthe block size in bytes) is used to obtain an integral number ofblocks before performing blockwise CBC (cipherblock chaining)encryption. The weakness is the easiest to exploit if there’s anentire block of padding, which (before encryption) consists of L-1arbitrary bytes followed by a single byte of value L-1.
TLS1.0 中的消息结构仍然相同,请参阅 RFC 2246 中的结构:
block-ciphered struct {
opaque content[TLSCompressed.length];
opaque MAC[CipherSpec.hash_size];
uint8 padding[GenericBlockCipher.padding_length];
uint8 padding_length;
} GenericBlockCipher;
填充是这样定义的:
Each uint8 in the padding data vector must be filled with the padding length value.
这是 SSL 3.0 和 TLS 1.0 之间的关键区别,这使得接收方能够检查填充是否正确,而不是实际上是有效应用程序数据 block 的剩余部分。
(比较 SSL 3.0 的 https://www.rfc-editor.org/rfc/rfc6101#section-5.2.3.2 和 TLS 1.0 的 https://www.rfc-editor.org/rfc/rfc2246.html#section-6.2.3.2)
这在 https://www.imperialviolet.org/2014/10/14/poodle.html 上也有解释像那样:
Consider the following plaintext HTTP request, which I've broken into8-byte blocks (as in 3DES), but the same idea works for 16-byte blocks(as in AES) just as well:
[
GET / HT
][TP/1.1\r\n
][Cookie:
][abcdefgh
][\r\n\r\nxxxx
][MAC DATA][•••••••7
]The last block contains seven bytes of padding (represented as •) andthe final byte is the length of the padding.
[..]
An attacker can't see the plaintext contents like we can in thediagram, above. They only see the CBC-encrypted ciphertext blocks. Butwhat happens if the attacker duplicates the block containing thecookie data and overwrites the last block with it? When the receiverdecrypts the last block it XORs in the contents of the previousciphertext (which the attacker knows) and checks the authenticity ofthe data. Critically, since SSLv3 doesn't specify the contents of thepadding (•) bytes, the receiver cannot check them. Thus the recordwill be accepted if, and only if, the last byte ends up as a seven.
之后:
The critical part of this attack is that SSLv3 doesn't specify thecontents of padding bytes (the •s). TLS does and so this attackdoesn't work because the attacker only has a 2-64 or 2-128 chance of aduplicated block being a valid padding block.
关于ssl - 为什么 POODLE Attack 只在降级到 SSL 3.0 后才生效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51672931/
我希望在通过 POST 方法发送数据后文本框消失。但我无法让 Javascript 工作。页面不断重新加载,因此文本框始终存在。 function puff() { if (document.get
我无法让 expand_aliases 在 bash 中生效。我尝试了很多不同的方法,但没有任何效果。 这是一个简单的测试用例: /bin/bash -c 'shopt -s expand_alias
我正在尝试查找 #include 位于 extern C block 内的所有位置。是否可以使用预处理器进行检查?我想在我的头文件中添加类似这样的内容: #ifdef EXTERN_C_IS_IN_E
我们扩展了 UILabel,以便能够为我们应用程序中给定标签类型的所有用途应用标准字体和颜色。例如。 @interface UILabelHeadingBold : UILabel @end 在我们的
案例1 我们正在尝试将自定义样式应用于渲染的 vuetify 元素: .input-group__input { background: red; } 但是没有任何变化。 案
我正在使用 symfony 1.4 和 sfGuardDoctrinePlugin,我已经安装并设置好了,但我遇到以下问题: 如果我以管理员身份登录并更新用户的权限,该用户必须注销然后重新登录才能获得
getElementsByTagName() 有 2 个很棒的特性:速度快且实时。但是,如果我想获得 p strong 怎么办。当然,我可以再次使用 getElementsByTagName() 优化
我有三个文件: spark_mock_dependency.py 提供了一个user() 方法来读取/etc/user, spark_mock.py 用于创建一个 Env 类,它使用 user() 方
我从 samples/bpf/pare_simple.c(来自 Linux 内核树)编译了 BPF 示例,做了非常简单的更改: SEC("simple") int handle_ingress(str
我有一个基本的树结构。容器可以水平滚动。我在所有 上都有正确的填充元素。但是,正确的填充没有生效。我该如何修复它才能生效? ul { height: 100%; margin: 0; p
我目前在使用 Ruby on Rails 上的 Assets 管道时遇到了一些问题。 我正在使用电子商务解决方案 (Spree),在文档中,文档中有这个: [...] you can improve
在我们非常庞大且非常复杂的 AngularJS 应用程序中,我注意到(偶然!)我的主模块设置中有这样一行... application.run(function($rootScope) { w
我发现重写getResources()后app第一次运行的activity也会对后面运行的activity生效,前提是你的手机字体特别大。 例如:执行以下步骤 将手机字体设置为巨无霸 创建两个名为 A
我正在尝试使用 KVO 来观察在我的页面 View Controller 的子内容 View Controller 的 ScrollView 中使用拖动时的更新变化,但是当应用程序启动时,它崩溃了说:
我是一名优秀的程序员,十分优秀!