假设我要设计一个请求响应协议(类似的HTTP)。为了简单起见,让我们假设这是一个“聊天”协议,客户端只能执行两个操作:
所有请求和答复都有保密性、真实性和完整性保证。请求和响应是可变大小的。
在该协议中,被动攻击者可以应用流量分析来估计发送的消息的大小、估计会话内容的大小以及区分这两种类型的请求和响应。
对付这种流量分析的最明显的方法是在固定的间隔内发送和接收固定长度的消息,但是,由于协议的性质,这是不可能的。
如何在不改变协议性质或浪费(大量)带宽的情况下,在这样的协议中进行流量分析?
更新:从议定书的交通分析中得到的一些信息对于民用目的的重要性是微不足道的。我主要是试图减少从请求或答复的长度中获得的信息量。
假设服务器支持多个“聊天室”。
以下是攻击者如何利用服务器响应长度的两个示例:
发布于 2012-02-22 09:47:00
对付频率分析的最明显的方法就是完全掩盖每一种频率。对于客户机数量适中的聊天服务器,这可以实现,例如,通过施加限制,每个客户端最多可以在任何时间打开N个聊天,并在每次聊天中每L秒最多发送M个字符。然后让每个客户端轮询服务器,每隔L秒,并让服务器每次返回N*M +标头大小的响应。
考虑到更新后的答案中的要求,在我看来,您只需要实现一个功能服务器端,它可以计算客户端可能得到的响应的最大长度,而不管他或她目前正在参加哪个聊天室。
例如,假设协议是这样的,每个聊天室中的每条消息都被赋予一个自动递增的序列号,并且每个请求都以“发送聊天室中的所有消息,从MessageMid开始”的形式出现。最明显的解决方案是,服务器将消息存储在一个表中,其中字段为RID、MID、时间戳、数据,在每个请求中获取RID、MID的时间戳,计算在该时间戳之后存储的所有消息的总长度,并使用填充到该长度的块进行响应。
如果每个客户端一次只能访问一个聊天室,则响应的长度可以缩减为请求时间内最频繁的聊天室的数据量。
发布于 2012-02-21 18:20:55
我试图利用这样一个事实:客户端和服务器使用唯一的会话,通信严格序列化,消息既不丢失也不重复(如果任何这样的假设都不成立,我想为此添加协议很简单)。我也认为服务器发送的“聊天内容”是消息的一部分(非常大)。
要说的话,让我们假设--作为握手过程中的第一次操作--客户机和服务器商定了一个随机字典,其中每个消息符号(字母、字母组、单词等)都通过通信符号表示。
然后,只通过新的编码传递消息。此外,每个被产生和接收的符号都会影响到每个端共享的字典。因此,字典将不断变化,但将保持同步。想想一个未优化的自适应Huffman编码 (如果它是真正优化的,你会给出符号频率)。
如果会话寿命较长,则构建初始字典将占用可忽略的带宽。我不能说真正的带宽开销是多少,但是如果字典的更新机制是合理的,它可能会相当低。
发布于 2014-01-29 19:45:24
虽然保持恒定的数据传输速率是阻碍流量分析的一种方法,但我认为还有其他方法。也许这只是一个半生不熟的想法,但仅仅保持数据传输的固定分布难道还不够吗?
例如,使用固定的数据包大小,并在与泊松分布无法区分的时候发送数据包。(泊松分布描述盖革计数器的输出,或离家较近的爆米花持久性有机污染物的输出。每个微小的时间间隔都有相同的小概率产生一个事件,即一些恒定的rho乘以间隔的长度。)当用户不需要传输数据时,发送可以由Poisson进程发送的虚拟数据包,其值为rho。当用户需要传输更多的数据时,发送更多的数据包,但数量不足以让观察者从统计上判断rho增加了。
当然,数据包大小也可以改变,保持相同的标准,即数据突发在统计上不会异常到允许观察者将其与随机波动区分开来。
https://crypto.stackexchange.com/questions/1898
复制相似问题