Dejan-Port/ferret-fsap
GitHub: Dejan-Port/ferret-fsap
FSAP 是一种结合 AES-256 加密与隐写认证层的网络数据包认证协议,无需后量子算法即可提供抗量子计算攻击的安全性。
Stars: 0 | Forks: 0
# Ferret 隐写认证协议 (FSAP)
一种结合了 AES-256 加密与隐写认证层的新型三层网络数据包认证协议,无需后量子算法即可提供后量子安全性。
## 存在的问题
现有的认证协议依赖于单一的数学困难假设。如果该假设被打破(例如通过足够强大的量子计算机),整个协议就会崩溃。
NIST 的后量子候选方案(CRYSTALS-Kyber、CRYSTALS-Dilithium、SPHINCS+)只是用另一个困难的数学问题替换了原有的问题。未来的算法突破仍然有可能将其攻破。
## FSAP 的方法
FSAP 叠加了两层**独立**的安全层:
1. **AES-256-CTR** — 数学困难性(FIPS 140-3,约 2^128 量子等价)
2. **隐写认证** — 信息困难性(在临时位置使用 100 位,具有 2^100 的搜索空间,**量子计算机无法对此加速**)
要攻破 FSAP,攻击者必须**同时攻破这两层**。这是具有不同攻击向量的不同类别问题。
## 数据包结构
```
┌────────────┬──────────────────┬──────────────────┬───────────┐
│ counter │ AES-256-CTR │ stego padding │ checksum │
│ (4 bytes) │ ciphertext │ (16 bytes) │ (4 bytes) │
│ │ (N bytes) │ looks random │ SHA-256[:4]│
└────────────┴──────────────────┴──────────────────┴───────────┘
```
### 验证顺序(从快到耗时)
1. **Checksum** — 对完整正文进行 SHA-256[:4] 校验。无需加密即可瞬间捕捉到位翻转。
2. **隐写层** — 位于由 `HMAC-SHA256(session_key, counter)` 派生的位置的 100 个比特位。没有 session key 的攻击者在*已经攻破 AES-256 之后*,还将面临 2^100 的搜索空间。
3. **AES-256-CTR 解密** — 标准对称解密。
### 隐写层
```
seed = HMAC-SHA256(session_key, packet_counter)
positions = ChaCha20-equivalent(seed) → 100 unique positions in 128-bit padding block
values = HMAC-SHA256(session_key, packet_counter ‖ 0x01)[:13] → expected bit values
```
- 位置和值**从不存储** — 动态派生并立即丢弃。
- 每个数据包都有**独一无二**的位置和值(每个数据包的 counter 都会递增)。
- 开源代码不提供任何优势:如果没有 `session_key`,位置派生将毫无用处。
- **零持久化**:磁盘被攻破不会发现任何东西;内存被攻破仅会暴露当前的 session key,一旦会话结束,该密钥就毫无价值了。
### 后量子分析
| 攻击 | 仅 AES-256 | FSAP |
|---|---|---|
| 经典暴力破解 | 2^256 | 2^256 × 2^100 |
| Grover 算法(量子) | 2^128 等价 | 2^128 × 2^100(隐写层不会加速) |
| 算法破解(新的数学理论) | 协议崩溃 | 隐写层仍然有效 |
Grover 算法可以将对称加密的比特强度减半。AES-256 变为 ~128 位等价 — 依然未被攻破。隐写层是一个**信息**问题:不存在量子加速,因为它没有任何可以利用的数学结构。
### 与 NIST 后量子标准的比较
| | CRYSTALS-Kyber/Dilithium | FSAP |
|---|---|---|
| 安全基础 | 新的数学问题 | AES-256 + 信息层 |
| 实现复杂性 | 高(格数学) | 低(HMAC + AES) |
| 开销 | 每次密钥交换数千字节 | 每个数据包 20 字节 |
| 可在 8 位 MCU 上运行 | 困难 | 可以 |
| 单点算法破解 | 有可能 | 不(两个独立的层) |
FSAP 是**互补的**,而非竞争关系 — 它可以与 CRYSTALS 算法一起使用。
## 用法
```
import os
from fsap import encrypt, decrypt
session_key = os.urandom(32) # AES-256 key — keep in RAM only, never persist
# Sender
packet = encrypt(session_key, counter=1, plaintext=b"hello")
# Receiver
plaintext = decrypt(session_key, packet)
if plaintext is None:
# Security event — log and alert
...
```
## 安装说明
```
pip install pycryptodome
python test_fsap.py
```
## 测试套件
```
======================================================
Ferret Steganographic Authentication Protocol (FSAP)
Test suite
======================================================
PASS Legitimate packet decrypts correctly
PASS Bit flip rejected (checksum layer)
PASS Wrong session key rejected (stego layer)
PASS Independent packet (counter=2) decrypts correctly
PASS Replay packet detected (counter already seen)
All tests passed.
```
## 安全说明
- **重放保护**由应用程序负责。为每个会话维护一个已见 counter 值的集合,并拒绝重复项。
- **会话密钥交换**不在此概念验证的范围内。请使用成熟的密钥交换协议(ECDH、X25519,或使用 CRYSTALS-Kyber 实现后量子安全)。
- 这是一个**概念验证** — 生产环境使用需要经过安全审计。
## Ferret 生态系统的一部分
FSAP 是 [Ferret](https://github.com/Dejan-Port/ferret) 的加密基础,这是一款自建的出站隧道工具,旨在无需端口转发的情况下穿透任何防火墙。
## 许可证
AGPL-3.0 — 免费用于开源。如需在不受开源义务约束的情况下进行商业使用,请联系作者。
© 2026 Dejan Kocić
标签:AES-256, DNS 反向解析, 信息隐藏, 内核驱动, 后量子密码学, 密码学, 手动系统调用, 漏洞评估, 网络协议, 网络安全, 逆向工具, 隐私保护