Fratres-X-AI/SENTRY-Node-Mk-I
GitHub: Fratres-X-AI/SENTRY-Node-Mk-I
面向 Raspberry Pi Zero 2 W 的被动式预警传感器节点,融合多源信号生成威胁等级并通过 LoRa 转发,所有事件记录于 HMAC 防篡改审计链。
Stars: 5 | Forks: 0
# SENTRY 节点 Mk I
SENTRY 是一个开源的、用于 Raspberry Pi Zero 2 W 的防御性预警节点。简而言之:它是一个小型的防风雨传感器盒,能够侦测运动、声音、无线电活动、防拆卸事件以及轻量级的网络异常。它将这些信号转换为简单的警报级别,写入防篡改的本地记录,并能够通过短距离低功耗的 LoRa 转发警报,以便人工介入排查。
SENTRY 不会进行干扰、瞄准、交战,也不会自动执行任何响应。其传感器是完全被动的;唯一预期的发射行为是用于供人工审查的短距离、低功耗 LoRa 警报文本。
## 验证结果(首页)
**成熟度:** 软件阶段原型(物理部署前)
**版本:** `0.5.0-darkspace-integrated`
**快照:** 2026-07-19T21:30:25Z
**整体软件测试关卡:** **通过**
完整的已提交证据(JUnit、覆盖率 XML、审计 JSON、日志):[`validation/published/`](validation/published/) · 叙述性报告:[`RESULTS.md`](validation/published/RESULTS.md)
### 已验证与未验证内容
| 断言 | 状态 |
|-------|--------|
| 良性 / 入侵 / 干扰 / 低能见度情况下的威胁评分 | 在模拟中已验证 |
| HMAC 审计链有效 + 防篡改检测 | 在 CI/模拟中已验证 |
| 严格类型检查 (mypy) | 已验证 — 46 个文件,0 错误 |
| 单元测试(测量的核心部分) | 已验证 — 38/38 |
| 模拟平均功率低于 5 W 目标 | 在模拟中已验证 — 约 3.3 W |
| 实际环境的 FP/FN、Pi GPIO/USB、RF 前端 | **未验证** — 需要 G1–G5 硬件 |
| 高 g 力 / 链式部署的 COTS 存活率 | **非产品声明** — 压力模拟显示按设计其存活率几乎为零 |
### 测试关卡
| 关卡 | 结果 | 详情 |
|------|--------|--------|
| Pytest | 通过 | 51.5 秒内 38/38 |
| 覆盖率(仅包含集) | 通过 | **47 行测量代码**的 100% — 而非“整个仓库的 100%” |
| Mypy (strict) | 通过 | 46 个文件,0 错误 |
| 模拟冒烟测试 | 通过 | 入侵路径,审计有效 |
| 构建就绪(软件) | 通过 | 所需文件 + 站点布局 |
| 防御就绪审计 | 通过 | 场景 + 弹性 + 篡改探测 |
### 场景测试组(预期行为)
| 场景 | 结果 | 最高级别 | 平均 CPU % | 平均 W | 审计 |
|----------|--------|-----------|------------|--------|-------|
| 良性 | 通过 | CLEAR | 50.1 | 3.3 | 有效 |
| 入侵 | 通过 | RED | 46.6 | 3.3 | 有效 |
| 干扰 | 通过 | HOLD | 41.3 | 3.3 | 有效 |
| 低能见度 | 通过 | YELLOW | 35.8 | 3.3 | 有效 |
安静状态保持 CLEAR。入侵状态变为 RED。干扰强制触发 HOLD。能见度下降时保持级别升高,但未达到灾难性程度。
### 弹性测试组(注入故障)
**通过在此意味着节点在恶劣条件下拒绝撒谎。** 像 `0/8 operational` 这样的计数是预期的压力测试结果,而不是无声的产品故障。
| 模式 | 关卡 | 含义 |
|------|------|---------|
| sensor_dropout_rf | 通过 | RF 信号丢失会降低置信度;不会伪造 RED |
| thermal_throttle_jamming | 通过 | 高温 + 干扰会进入安全的 HOLD |
| tamper_during_intrusion | 通过 | 篡改行为优先;触发 HOLD |
| low_power_duty_cycle | 通过 | 保持功率节制 |
| deployment_chain_break | 通过 | 断链被报告为不可运行 (`0/8`) |
| deployment_entanglement | 通过 | 纠缠的节点不会伪造 mesh 就绪状态 |
| deployment_antenna_damage | 通过 | 损坏的天线会如实使 BIT 失败 |
| deployment_alert_suppression | 通过 | 警报在运行阶段前被抑制 |
### 明确的非声明项
- 未经实际环境验证。尚未进行室外 FP/FN 研究。
- RTL-SDR Blog V4 并非原生的 2.4/5.8 GHz 解决方案。
- Meshtastic RX 仍然是一个保守的缓冲/集成路径。
- 高 g 力 / 直线装药参考模拟会摧毁 COTS Pi 堆栈 — 这是物理边界,而非交付承诺。
## 状态
版本:`0.5.0-darkspace-integrated`
成熟度:**软件阶段原型(物理部署前)**
## 它的功能
- 将被动传感器证据融合为 `CLEAR`、`YELLOW`、`ORANGE`、`RED` 或 `HOLD`。
- 将所有事件记录到 SQLite,并将关键事件记录到 HMAC 审计链中。
- 在 HOLD/干扰条件下抑制 mesh 传输,同时保留本地日志。
- 添加轻量级的 DARKSPACE 模块:psutil 网络异常采样和日志熵扫描。
- 包含 Pi 引导程序、systemd 单元、BOM、接线文档和验证脚本。
## 从这里开始
| 文档 | 目的 |
|----------|---------|
| [`validation/published/RESULTS.md`](validation/published/RESULTS.md) | 完整的验证证据包 |
| [`docs/system_datasheet.md`](docs/system_datasheet.md) | 完整的系统规格、功耗计算、RF 说明、输出 |
| [`docs/build_assembly.md`](docs/build_assembly.md) | 物理组装和 GPIO 接线 |
| [`docs/pi_deployment.md`](docs/pi_deployment.md) | Pi 安装和服务设置 |
| [`docs/BUILD_STAGE.md`](docs/BUILD_STAGE.md) | 构建关卡和放行/中止规则 |
| [`configs/procurement_bom.json`](configs/procurement_bom.json) | 生产级 4 节点 BOM |
| [`SECURITY.md`](SECURITY.md) | 漏洞报告 |
| [`CONTRIBUTING.md`](CONTRIBUTING.md) | 贡献规则 |
## 快速开始
```
cd implementation
pip install -e ".[dev]"
pytest tests --cov=sentry --cov-fail-under=100 -q -k "not gpu"
mypy src/sentry
cd ..
python validation/build_readiness.py
python run_complete_audit.py
```
## 架构
```
flowchart LR
Sensors[PIR Acoustic RF Tamper Passive Monitors] --> Fusion[Sensor Fusion]
Fusion --> Scoring[Threat Scoring]
Scoring --> Guardian[Guardian State Machine]
Guardian --> SQLite[SQLite Event Store]
Guardian --> Audit[HMAC Audit Chain]
Guardian --> Mesh[LoRa Alert Relay]
```
## 重要限制
- RTL-SDR Blog V4 不是原生的 2.4 GHz 或 5.8 GHz 接收器。在添加合适的前端之前,请将 2.4 GHz 视为经台式验证的转换路径,将 5.8 GHz 视为合成路径。
- 在 G1-G5 硬件测试完成之前,实际环境的误报率和漏报率无法被验证。
- Mesh 接收目前是一个保守的缓冲/手动集成路径。
- `tamper_response.dry_run` 默认为 `true`;破坏性擦除行为必须显式启用。
## 许可证
MIT。见 [`LICENSE`](LICENSE)。
标签:Python, Raspberry Pi, 传感器网络, 内存执行, 安全规则引擎, 无后门, 物理安全, 物联网, 边缘计算, 逆向工具