6 个版本 (稳定)

1.1.2 2024 年 6 月 2 日
1.1.1 2024 年 4 月 30 日
1.1.0 2024 年 4 月 6 日
1.0.1 2023 年 11 月 24 日
0.0.0 2023 年 3 月 3 日

#1828密码学

Download history 386/week @ 2024-04-26 383/week @ 2024-05-03 1011/week @ 2024-05-10 475/week @ 2024-05-17 630/week @ 2024-05-24 595/week @ 2024-05-31 639/week @ 2024-06-07 1046/week @ 2024-06-14 1420/week @ 2024-06-21 1590/week @ 2024-06-28 902/week @ 2024-07-05 1423/week @ 2024-07-12 2719/week @ 2024-07-19 3732/week @ 2024-07-26 2561/week @ 2024-08-02 5088/week @ 2024-08-09

14,637 每月下载量
用于 2 crates

MIT/Apache

135KB
2.5K SLoC

Maybenot 🤔

Maybenot 是一个用于隐藏加密通信中模式以进行流量分析的框架。其目标是增加网络攻击者的不确定性,因此其标志 🤔 - 思考表情符号 (U+1F914)。

Crates.io Documentation Build Status MIT OR Apache-2.0

考虑加密通信协议,如 TLS、QUIC、WireGuard 或 Tor。虽然连接是加密的,但在加密通信中的 模式 可能仍然会泄露有关通信明文的有关信息。Maybenot 是一个创建防御框架,用于隐藏这些模式。

有关基于 Maybenot 的防御模拟,请参阅 Maybenot 模拟器

设计

Maybenot 的一个实例会重复接收一个或多个 事件,这些事件描述了通过加密通道传输的加密流量,并产生零个或多个 预定操作,例如注入 填充 流量或阻止出站流量。一个或多个 状态机 根据事件确定采取哪些操作。状态机具有轻量级运行时,并受限于可以安排的填充量和阻止量。

design overview

通过报告事件和执行预定操作与加密通信协议集成。Maybenot 不指定特定的异步运行时或如何保持时间,以便于集成。

示例用法

use maybenot::{
framework::{Action, Framework, TriggerEvent},
machine::Machine,
};
use std::{str::FromStr, time::Instant};

// deserialize state machine from string
let s = "789cedca2101000000c230e85f1a8387009f9e351d051503ca0003";
let m = vec![Machine::from_str(s).unwrap()];

// create framework instance
let mut f = Framework::new(&m, 0.0, 0.0, 1420, Instant::now()).unwrap();

loop {
    // collect one or more events
    let events = [TriggerEvent::NonPaddingSent { bytes_sent: 1420 }];

    // trigger events, schedule actions, at most one per machine
    for action in f.trigger_events(&events, Instant::now()) {
        match action {
            Action::Cancel { machine: MachineId } => {
                // if any scheduled action for this machine, cancel it
            }
            Action::InjectPadding {
                timeout: Duration,
                size: u16,
                bypass: bool,
                replace: bool,
                machine: MachineId,
            } => {
                // schedule padding of a specific size after timeout
            }
            Action::BlockOutgoing {
                timeout: Duration,
                duration: Duration,
                bypass: bool,
                replace: bool,
                machine: MachineId,
            } => {
                // schedule blocking of outgoing traffic for duration after timeout
            }
        }
    }
}

更多详情

有关框架的更多详情,请参阅 论文文档

Maybenot 的防御开发正在积极进行中。有关一些早期结果,请参阅 https://github.com/ewitwer/maybenot-defenses

虽然框架和模拟器的 v1 版本已稳定,但 v2 版本正在逐步成形,因为我们正在扩展框架的功能。目标是使框架尽可能简单,同时仍然足够灵活,以实现广泛的防御。

贡献

除非你明确说明,否则任何旨在包含在作品中并由你提交的贡献,如 Apache-2.0 许可证中定义的,应双重许可为 MIT 或 Apache-2.0,无需任何额外条款或条件。

来源

Maybenot 是基于 Perry 和 Kadianakis 在 2019 年提出的 Tor 电路填充框架,这是一个基于 2016 年 Juarez 等人设计的 WTF-PAD 网站指纹防御的推广,该设计又基于 2006 年 Shmatikov 和 Wang 提出的 自适应填充概念。

赞助

得到了 Mullvad VPN瑞典互联网基金会瑞典知识基金会的支持。

依赖项

~9–17MB
~308K SLoC