rifatardarslan/Aegis
GitHub: rifatardarslan/Aegis
Aegis 是一款基于 Go 和 libp2p 构建的临时性纯内存 P2P 安全终端通讯工具,通过 Double Ratchet 协议和前向保密机制实现不留痕迹的加密聊天与文件传输。
Stars: 0 | Forks: 0
# 🛡️ Aegis
[](LICENSE)
[](https://go.dev)
[](.)
📖 **点击查看土耳其语 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工具, 即时通讯, 双棘轮, 安全通信, 密码学, 手动系统调用, 日志审计