saroo98/kurdistan-protocol-compiler
GitHub: saroo98/kurdistan-protocol-compiler
Kurdistan 是一个用 Go 编写的多态中继传输协议编译器,通过为每次部署生成结构不同的协议实现来抵抗协议指纹识别和流量分析,面向伊朗等高审查网络环境。
Stars: 1 | Forks: 0
# Kurdistan Protocol 编译器



Kurdistan 是一个抗审查协议研究项目,旨在构建一个生产级的 Polymorphic Relay Transport Compiler。
Kurdistan 探讨了反审查网络中的一个核心问题:relay transport 能否被生成为许多结构上完全不同的 protocol 实现,而不是仅提供一种容易被识别的 protocol fingerprint?
## 什么是 Kurdistan?
Kurdistan 是一个用于生成 Relay Transport 的 Protocol Compiler。生成的 profile 定义了私有 transport 在首次接触、状态转换、framing、调度、填充、探测、身份验证检查、stream 语义以及无效输入处理等方面的行为。
当前的 profile 生成涵盖:
- 特定于 profile 的首次接触序列
- 生成的客户端/服务端状态机
- 生成的 frame 语法和语义 wire 映射
- 调度器、填充、探测和格式错误输入行为
- 用于受控身份验证测试的 HMAC transcript proof
- 具有流量控制和 backpressure 的多 stream relay 语义
- 无 payload 的 trace 捕获
- 生成的 Go source 模块
- 对抗性多样性、突变和黑盒 trace 审计
当前的 codebase 是一个研究用的 compiler、runtime 测试框架、source 生成器和审计系统。生产级的 transport 集成属于未来的工作。
## 为什么会有这个项目
许多抗审查网络系统和 Pluggable Transport 必须抵御 protocol fingerprinting、流量分析、探测和主动干扰。固定的 protocol 系列随着时间的推移会形成可识别的特征,即使 payload 加密是正确的。
Kurdistan 研究一种基于 compiler 的替代方案:在保持稳定内部语义的同时,为每次部署或研究运行生成结构上不同的 relay transport。其长期动机是在对抗性网络环境中(包括伊朗和其他受互联网审查影响的严重过滤地区)实现弹性通信。
如今,该仓库专注于 protocol 生成、本地互操作性、trace 多样性和回归测试关卡。它目前还不是一个可部署的审查规避系统。
## Kurdistan 正在构建什么
```
Application or future proxy adapter
|
v
Stable internal relay semantics
|
v
Kurdistan generated transport
|
v
Carrier layer
|
v
Remote relay
```
目前的工作集中在生成的 transport/compiler 层,包括内部的 carrier 形状建模。未来的 Proxy 或 VPN 集成需要单独的生产级安全设计、实施加固和审查。
## 当前状态
| 里程碑 | 状态 |
|---|---|
| Compiler/Runtime 脚手架 | 完成 |
| 多样性审计 | 完成 |
| 回归测试关卡 | 完成 |
| 对抗性实验室模拟器 | 完成 |
| 突变/纵向测试 | 完成 |
| 生成的 source 后端 | 完成 |
| 生成后端审计 | 完成 |
| 多 stream 实验室语义 | 完成 |
| 多 stream 对抗性测试 | 完成 |
| 仅限实验室的 Proxy 语义 | 完成 |
| Carrier 抽象 | 完成 |
| 生产级安全模型 | 下一步 |
| Proxy/VPN 集成 | 未来计划 |
## 功能
- 基于种子的确定性 profile 生成。
- 生成的首次接触语法和 transcript proof 模型。
- 生成的带有特定于 profile 的语义到 wire 映射的 frame 语法。
- 生成的调度器、填充、探测和无效身份验证行为。
- 仅使用标准库的 HMAC-SHA256 transcript proof,用于受控测试。
- 无 payload 的 JSONL trace 捕获。
- Profile 语料库多样性指标。
- 黑盒 trace 多样性扫描器。
- 对抗性聚类和合成控制。
- 针对 protocol 行为崩溃的突变测试。
- 针对基线 JSON 报告的纵向审计比较。
- 带有 `kgen` 的生成 source 后端。
- 针对生成代码产物的 source 扫描器。
- 多 stream relay 语义。
- Stream ID 策略、关闭/重置行为、流量控制和 backpressure。
- 针对 interleaving、调度器压力、阻塞的 stream、重置、关闭竞争和不均匀 stream 大小的 Stream 对抗场景。
- 带有合成目标描述符和 relay 意图的内部 proxy 语义模型。
- 用于 echo、discard、fixed、slow、chunked、large、error、reset、drip 和 jittery 响应的合成目标注册表。
- Proxy 对抗场景、proxy 特征提取、崩溃扫描和 proxy 突变体检测。
- 针对 stream、message、datagram-like、chunked、batch、interactive、long-poll-style 和 lossy/reordered carrier 形状的 Carrier 抽象模型。
- 针对 batching 压力、chunked 大型响应、队列 backpressure、重排/重试恢复和 proxysem 一致性的 Carrier 对抗场景。
- 针对解释行为与生成行为的生成后端一致性检查。
## 当前边界
该仓库目前包含 compiler、runtime、生成器和审计工作。它不包含部署代码、外部目标、生产级密钥交换、payload 日志记录、SOCKS 模式、VPN 模式、HTTP carrier、TLS 模拟、CDN 行为、移动客户端或实时网络测试。
在 protocol 模型、审计关卡和生成的后端仍在构建中时,这个边界是有意为之的。
## 架构
```
cmd/kdc
profile generation, validation, corpus summaries
internal/ir + internal/compiler
protocol profile schema and deterministic profile compiler
internal/fsm + internal/framing + internal/scheduler + internal/stream
runtime model for state machines, frames, scheduling, and streams
internal/proxysem + internal/proxyrelay + internal/proxyadversary
synthetic proxy-semantics model, relay-intent runner, and proxy collapse scanning
internal/carrier + internal/carrierrelay + internal/carrieradversary
abstract carrier envelopes, semantic reconstruction, carrier collapse scanning, and carrier mutants
cmd/kgen + internal/codegen
generated Go source backend for profile-specific modules
internal/trace + internal/adversary + internal/streamadversary
payload-free trace features, clustering, collapse scanning, and adversarial controls
cmd/kcheck + internal/audit
regression gates, generated-backend audit, stream adversary audit, STATUS.md generation
```
解释型 runtime 支持快速的研究迭代。生成 source 后端的存在是因为共享的解释器可能会引入通用的实现特征。`kgen` 会生成特定于 profile 的 Go 常量和表,以便生成的模块能够在本地编译和互操作。
## 快速开始
```
go test ./...
go vet ./...
go run ./cmd/kcheck --quick
go run ./cmd/kcheck streamadversary --quick
go run ./cmd/kcheck proxysem --quick
go run ./cmd/kcheck carrier --quick
go run ./cmd/kcheck codegen --quick
```
如果在此工作空间的 `PATH` 中找不到 Go,请使用自带的工具:
```
.tools\go\bin\go.exe test ./...
.tools\go\bin\go.exe vet ./...
.tools\go\bin\go.exe run ./cmd/kcheck --quick
```
生成并验证 profile:
```
go run ./cmd/kdc generate --seed 12345 --out profiles/examples/profile-12345.json
go run ./cmd/kdc validate --profile profiles/examples/profile-12345.json
```
生成特定于 profile 的 Go 模块:
```
go run ./cmd/kgen --profile profiles/examples/profile-12345.json --out .generated/profile-12345 --force
```
构建生成的模块:
```
cd .generated/profile-12345
go test ./...
go run ./cmd/generated-client --multistream-demo --streams 3
go run ./cmd/generated-client --proxysem-demo --targets mixed --streams 4
go run ./cmd/generated-client --carrier-demo --carrier mixed --streams 4
```
## 审计与关卡
Kurdistan 将多样性视为可衡量的事物。
`kcheck` 涵盖:
- 跨生成的 IR 结构的 profile 多样性
- 黑盒 trace 多样性
- 对抗性聚类
- 固定特征检测
- 格式错误/探测行为
- 表面差异控制
- 相同 profile 一致性
- 不同 profile 分离度
- Fuzz 测试存在性
- 突变测试
- 纵向审计比较
- 生成后端的语义等价性
- 生成的 source 扫描器检查
- 多 stream 语义和 backpressure
- Stream 对抗崩溃抵抗力
- Proxy 语义正确性、多样性、目标 backpressure、错误/重置隔离和突变体检测
- Carrier 语义重构、carrier 多样性、队列 backpressure、丢失/重排恢复、proxysem 一致性和 carrier 突变体检测
常用命令:
```
go run ./cmd/kcheck --quick
go run ./cmd/kcheck --full --out testdata/audit/latest.json
go run ./cmd/kcheck --quick --status STATUS.md
go run ./cmd/kcheck compare --old testdata/audit/baseline-small.json --new testdata/audit/latest.json
```
直接运行对抗性分析:
```
go run ./cmd/kcheck adversary --quick
go run ./cmd/kcheck streamadversary --quick
go run ./cmd/kcheck proxysem --quick
go run ./cmd/kcheck carrier --quick
```
`STATUS.md` 是根据最新审计生成的,旨在作为项目状态的简明快照。
## 生成的 Source 后端
`kgen` 会发布一个可构建的、特定于 profile 的 Go 模块,其中包含:
- 静态 profile 常量
- 生成的状态表
- 生成的 framing 表
- 生成的调度器常量
- 生成的 stream 策略常量
- 无效输入和身份验证常量
- 生成的测试和基准测试
- 生成的 client/server/echo/trace 命令
生成的代码会特化特定于 profile 的 protocol 数据,同时仍复用小型的辅助包以进行安全的 IO、HMAC、trace 输出和确定性测试。
## 多 Stream 语义
Kurdistan 在一个 session 内对多个逻辑 stream 进行建模。
当前的多 stream 语义包括:
- `OPEN_STREAM`
- `DATA`
- `CLOSE_STREAM`
- `RESET_STREAM`
- `WINDOW_UPDATE`
- `SESSION_CLOSE`
- `ERROR`
- `PADDING`
Profile 会改变 stream ID 策略、stream ID 编码、最大并发 stream 数、初始 stream/session 窗口、stream 优先级策略、窗口更新策略、关闭策略和重置策略。
Stream 对抗审计会执行:
- 平衡的 interleaving
- 批量与交互式调度压力
- 阻塞 stream 行为
- Session 窗口耗尽
- 中途重置 stream
- 关闭竞争
- 不均匀的 stream 大小
审计会检查仅包含填充噪音的 stream 是否不会被误认为是有意义的多 stream 多样性。
## Proxy 语义模型
Kurdistan 现在在内部对 proxy 风格的 relay 意图进行建模,而无需添加真实的 Proxy Adapter。逻辑 stream 可以绑定到合成目标描述符,发送类似请求的字节数,接收类似响应的数据块,并将目标错误、重置、关闭事件、缓慢响应和 backpressure 记录为安全的 trace 元数据。
合成目标包括 `echo`、`discard`、`fixed_response`、`slow_response`、`chunked_response`、`large_object`、`error_response`、`reset_midstream`、`drip_response` 和 `jittery_response`。Proxy 对抗审计会检查这些行为是否在各 stream 之间保持隔离,并且不会坍缩成固定的可观测模式。
## Carrier 抽象模型
Kurdistan 现在将语义 relay 消息与抽象的 carrier 信封分离开来。Proxysem 或 stream 场景可以发出语义消息,将其传递通过 carrier 模型,并验证解码后是否重构出相同的无 payload 语义形状。
Carrier 家族包括 `stream_carrier`、`message_carrier`、`datagram_like_carrier`、`chunked_carrier`、`batch_carrier`、`interactive_carrier`、`long_poll_style_carrier` 和 `lossy_reordered_carrier`。该模型会记录有关信封计数、分块、批处理、刷新行为、重试/重排事件以及 carrier 引起的 backpressure 的安全元数据。
## 路线图
1. 里程碑 12:生产级安全设计。
2. 里程碑 13:实施加固。
3. 里程碑 14:本地 Proxy Adapter 原型。
4. 未来计划:在安全审查后进行 Proxy/VPN transport 集成。
## 研究定位
Kurdistan 涉及抗审查研究、反审查网络、Pluggable Transport 研究、protocol 生成、polymorphic transport protocol、relay transport 设计、Proxy transport 架构、VPN transport 研究、对抗性网络测量、流量分析抵抗研究、protocol fingerprint 多样性以及互联网审查研究。
## 许可证
Kurdistan Protocol Compiler 对代码和文档使用不同的许可证:
- Source code:GNU Affero General Public License v3.0 或更高版本 (`AGPL-3.0-or-later`)
- 文档:知识共享署名-相同方式共享 4.0 国际许可 (`CC BY-SA 4.0`)
版权所有 2026 Saro。
使用、修改和分发必须保留版权声明,并遵守适用的许可条款。
标签:EVTX分析, Go语言, 协议编译器, 多态引擎, 抗审查网络, 日志审计, 时序数据库, 流量混淆, 程序破解, 网络中继