rifatardarslan/Aegis

GitHub: rifatardarslan/Aegis

Aegis 是一款基于 Go 和 libp2p 构建的临时性纯内存 P2P 安全终端通讯工具,通过 Double Ratchet 协议和前向保密机制实现不留痕迹的加密聊天与文件传输。

Stars: 0 | Forks: 0

# 🛡️ Aegis [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![Go](https://img.shields.io/badge/Go-1.21+-00ADD8?logo=go&logoColor=white)](https://go.dev) [![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20Linux%20%7C%20macOS-informational)](.) 📖 **点击查看土耳其语 readme:** [🇹🇷 土耳其语](./README_TR.md) ## 📂 项目结构 ``` aegis/ ├── cmd/ │ └── aegis/ │ └── main.go # Application entry point & signal handling ├── internal/ │ ├── crypto/ │ │ ├── aead.go # ChaCha20-Poly1305 Seal/Open │ │ ├── handshake.go # X25519 DH + Ed25519 mutual authentication │ │ ├── identity.go # Ephemeral Ed25519 keypair & SAS generation │ │ ├── ratchet.go # Double Ratchet engine (HKDF-SHA256 KDF chain) │ │ ├── wordlist.go # BIP-39 wordlist for SAS display │ │ ├── zeroize.go # unsafe memory scrubbing (Bytes/Array32/String) │ │ └── crypto_test.go # Cryptographic unit tests │ ├── p2p/ │ │ ├── host.go # Argon2id key derivation & libp2p host init │ │ ├── node.go # P2PNode: connect, handshake, lifecycle │ │ ├── discovery.go # Kademlia DHT + mDNS peer discovery │ │ ├── nat.go # Public relay addresses for NAT traversal │ │ ├── stream.go # Length-prefixed framing (ReadFrame/WriteFrame) │ │ └── node_test.go # P2P unit tests │ ├── transfer/ │ │ ├── frame.go # AegisFrame JSON protocol definition │ │ ├── sender.go # Streaming SHA-256 file hashing │ │ ├── receiver.go # Secure file save (0600 permissions) │ │ └── transfer_test.go # Transfer unit tests │ └── tui/ │ ├── model.go # Root Bubbletea model & screen routing │ ├── dashboard.go # Screen 1: passphrase entry & peer connect │ ├── verify.go # Screen 2: fingerprint & SAS verification │ ├── chat.go # Screen 3: encrypted chat & file transfer │ ├── styles.go # Lipgloss color palette & style constants │ └── banner.go # ASCII art banner renderer ├── install.bat # One-click Windows installer (WDAC bypass) ├── run.sh # One-step Linux/macOS launcher ├── Makefile # Build, install, dev, debug, vet targets ├── go.mod / go.sum # Go module dependencies ├── LICENSE # MIT License ├── SECURITY.md # Security vulnerability reporting policy ├── README.md # Documentation (English) └── README_TR.md # Documentation (Türkçe) ``` ## 🔒 安全架构与密码学层 Aegis 基于零信任威胁模型构建,将传输网络和本地持久化存储均视为不可信域。 ### 1. 临时性与零存储承诺 * **严格的内存限制:** 绝不创建任何数据库、日志或本地配置文件。加密密钥、会话记录、消息历史以及传入/传出的文件缓冲区严格驻留在易失性内存中。 * **级联零化:** 活动的加密密钥(Double Ratchet 根密钥和链密钥、临时 Ed25519 身份密钥)和文件缓冲区在正常退出、网络断开或操作系统信号触发时,会立即通过直接指针修改(`unsafe.StringData` 和 `unsafe.Slice`)结合 `runtime.KeepAlive` 编译器屏障在内存中被明确地执行零化擦除。 ### 2. 临时身份与认证密钥交换 * **密码派生的主机密钥:** 启动时,Aegis 会提示输入主密码,并使用具有严格参数(3 次迭代,64 MB 内存,4 个线程)的 Argon2id 派生确定性的 libp2p 主机密钥。密码在边界层派生完成后会立即从内存中零化。 * **X25519 DH 握手:** Aegis 实现了手动临时的 X25519 Diffie-Hellman 交换,以派生共享的会话根密钥。共享密钥在 HKDF 扩展后通过 `defer` 立即清零。 * **Ed25519 身份签名:** 密钥交换通过每次会话动态生成的临时 Ed25519 密钥对进行身份验证。握手记录使用签名进行验证,以消除主动的中间人攻击定位。 ### 3. 对称 Double Ratchet 引擎 * **完全前向保密:** 消息使用 Signal Double Ratchet 协议的定制实现进行加密。每条发送和接收的消息都使用 HKDF-SHA256 派生出唯一的临时密钥,从而推进链。KDF 中间缓冲区和派生的消息密钥在每一步之后通过 `defer` 清零。 * **ChaCha20-Poly1305 AEAD:** Payload 消息使用标准的 ChaCha20-Poly1305 进行密封和身份验证。AEAD 密钥在每次加密/解密后清零。Nonce 使用单调消息计数器构建,并且关联数据(AAD)按字典顺序绑定远程 Peer ID,以防止重放或欺骗攻击。 ### 4. 带外验证 (OOB)(反 MitM) * **指纹比对:** Aegis 在连接后的验证屏幕上显示 SSH 风格的 SHA-256 base64 公钥身份指纹。 * **短认证字符串 (SAS):** 显示从映射到标准 BIP-39 单词列表的公钥哈希的 XOR 派生出的对称的 3 词 SAS。用户在继续聊天之前,通过口头或辅助可信通道确认匹配。 ## 📂 安全多路复用文件传输 Aegis 支持在同一个活动的 `/aegis/1.0.0` libp2p 流上多路复用的高速、安全、仅限内存的文件传输。 * **拖放/粘贴路径:** 将文件直接从操作系统资源管理器拖到终端窗口中(或粘贴/输入绝对路径),然后按 Enter 键立即启动安全传输。 * **流式哈希与分块:** 文件以流式方式读取,划分为标准的 `256 KB` 数据块,并使用 SHA-256 单独进行哈希计算。 * **内存组装:** 接收到的数据块直接在内存中收集。不会将任何临时文件写入磁盘。 * **完整性验证:** 完成后,接收方独立计算完整的 SHA-256 哈希,并将其与发送方公布的哈希进行比较。不匹配将触发立即拒绝并清空缓冲区。 * **仅所有者权限:** 经过验证的内存中文件缓冲区以严格的 `0600` 仅所有者权限一次性写入磁盘。 * **精致的 TUI 反馈:** 传输具有在系统状态面板中渲染的实时进度条,并伴有数据块验证诊断信息。 ## 🛠️ P2P 路由与 NAT 穿透 Aegis 在没有中心消息服务器的完全去中心化拓扑中运行。 * **传输与多路复用:** 在使用 Yamux 多路复用的安全传输流(TCP / QUIC)上运行。 * **发现:** 通过 Kademlia DHT 引导锚点全局解析对等节点,并通过多播 DNS (mDNS) 解析局域网对等节点。 * **NAT 打洞:** 通过 AutoNAT 和 DCUtR 打洞协议解析复杂的防火墙。 * **中继回退:** 支持利用公共 IPFS 引导节点的自动线路中继,并可通过 CLI 标志 `--relay` 进行可选的自定义中继配置。 ## 🚀 入门与安装指南 Aegis 支持在 Windows、Linux 和 macOS 上进行全自动的单命令安装。安装脚本会自动检查 Go,如果缺失,则通过系统包管理器(winget、apt-get、Homebrew、dnf、pacman)安装它,或者如果无法编译 Go,则下载预编译的 release 二进制文件。 ### 前置条件 * **Git**(用于克隆仓库)。 * 推荐使用 **Go 1.21+**(但如果缺失,脚本会自动安装)。 ``` # Clone 该 repository git clone https://github.com/rifatardarslan/Aegis.git cd aegis ``` ### 💻 1. Windows 安装(自动化) 要在 Windows 上安装 Aegis,只需在根目录中运行安装脚本: ``` # 双击 'install.bat' 或通过 terminal 运行它: .\install.bat ``` **此安装程序执行的操作:** 1. **Go 环境检查:** 检查您的系统是否安装了 Go。 2. **自动安装:** 如果缺少 Go,它会自动尝试通过 Windows 包管理器 (`winget`) 安装它。 3. **预编译回退:** 如果跳过或未安装 Go,它将从 GitHub Releases 下载最新的预编译 `aegis.exe`。 4. **环境配置:** 将二进制文件和启动器包装器放置在您的 PATH(`GOPATH\bin` 或 `~/.aegis/bin`)中,以便您可以全局运行它。 **运行:** 完成后,打开一个**新的**命令提示符或 PowerShell 窗口并输入: ``` aegis ``` ### 🐧 2. Linux 和 macOS 安装(自动化) 对于 Linux(Kali、Ubuntu、Debian)和 macOS,请运行自动安装脚本: ``` # 运行安装 script: chmod +x install.sh ./install.sh ``` **此安装程序执行的操作:** 1. **Go 环境检查:** 检查您的系统是否安装了 Go。 2. **自动安装:** 如果缺少 Go,它会尝试通过您的包管理器(`apt-get`、`brew`、`dnf` 或 `pacman`)安装它。 3. **预编译回退:** 如果 Go 安装失败或被跳过,它将从 GitHub Releases 下载相应的预编译 release 二进制文件(`aegis-linux` 或 `aegis-macos`)。 4. **环境配置:** 将二进制文件安装到 `$HOME/.local/bin`,并在必要时更新您的 shell profile(`.bashrc` 或 `.zshrc`)。 **运行:** 完成后,重启终端或运行 `source ~/.bashrc`(或 `source ~/.zshrc`)并输入: ``` aegis ``` ### ⚙️ 命令行参数(所有平台) 启动 Aegis 时使用这些标志来调整其行为: | 标志 | 描述 | |------|-------------| | `--debug` | 启用高级网络操作日志记录(加密密钥**绝不**会被记录) | | `--relay ""` | 绑定到自定义的线路中继 multiaddr,而不是默认的 IPFS 引导节点 | **示例:** ``` aegis --debug aegis --relay "/ip4/1.2.3.4/tcp/4001/p2p/Qm..." ``` ## 📡 实时执行演练 1. **主机设置:** 通过 `aegis` 在单独的终端上启动两个实例。 2. **身份派生:** 两个用户输入他们的私人主密码。Libp2p Peer ID 通过 Argon2id 确定性地建立。 3. **连接:** 一个用户在连接输入字段中输入远程对等节点的 Peer ID。Kademlia DHT 启动路由和 NAT 打洞。 4. **验证屏幕:** 闪烁警告面板。比对公钥指纹和 BIP-39 SAS(例如,`DELTA · ECHO · FOXTROT`)。按 **Y** 继续,或按 **N** 中止。 5. **安全聊天:** 开始发送安全消息。Double-ratchet 数字在系统面板中推进。 6. **文件传输:** 将文件直接拖放到终端文本输入框中(或按 **Ctrl+F** 使用文件浏览器),然后按 **ENTER**。接收方通过 **Y** 接受提供。观看进度条完成。按 **Ctrl+S** 并指定输出目录或路径来安全保存文件(如果提供的是目录,Aegis 会自动追加文件名)。 7. **安全销毁:** 按 **Ctrl+C** 或关闭终端。所有加密材料和内存缓冲区都会立即被零化。 ## 🛡️ 威胁模型缓解措施 | 威胁 | 安全缓解措施 | |---|---| | **被动网络窃听** | 在 TLS 1.3 QUIC 和 ChaCha20-Poly1305 上利用 Yamux 流进行双重加密的传输线路。 | | **主动中间人攻击** | 带外指纹匹配和 3 词短认证字符串 (SAS) 记录检查,结合 Ed25519 流签名。 | | **重放或欺骗攻击** | 绑定到唯一 AEAD nonce 的单调数据包计数器。未签名或重复的序列数据包将被拒绝。 | | **密钥泄露/泄漏** | 临时 Ed25519 签名密钥。Double Ratchet 引擎在收到消息后会立即擦除之前的消息密钥(PFS)。 | | **冷启动内存取证** | 在任何退出、断开连接或中断时,对原始私钥、派生矩阵和文件字节进行直接的不安全内存零化。 | | **密码泄露** | 用户密码绝不写入磁盘,并且在确定性密钥派生之后,堆栈/堆缓冲区会在边界层立即被擦除。 | ## 📜 许可证 该项目基于 [MIT 许可证](LICENSE) 授权。
标签:EVTX分析, Go, P2P网络, Ruby工具, 即时通讯, 双棘轮, 安全通信, 密码学, 手动系统调用, 日志审计