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, 传感器网络, 内存执行, 安全规则引擎, 无后门, 物理安全, 物联网, 边缘计算, 逆向工具