# sk **Repository Path**: wlkukumalu/sk ## Basic Information - **Project Name**: sk - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-14 - **Last Updated**: 2026-09-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SnifferX 授权状态文件(签名发布点) 本仓库只做一件事:**托管 SnifferX「授权版」设备端的签名状态文件**。 设备每 12 小时拉取一次自己那一份,验签通过后据此续期或吊销。 > 这个仓库是**公开**的,但里面没有任何秘密 —— 每个文件都用离线私钥做过 > RSA-2048 / PKCS#1 v1.5 签名,**改一个字节设备就会拒收**。第三方即使拿到文件, > 也只能原样转发,伪造不了任何授权指令。**私钥从不进入本仓库、也不进入任何云平台。** ## 文件约定 ``` state/<设备指纹>.json ← 每台设备一份,文件名 = 该设备的 32 位 hex 指纹 ``` 设备端按模板取自己的那份,`{fp}` 会被替换成设备指纹: ``` SNIFFERX_L4_STATIC_URLS=https://raw.giteeusercontent.com/<用户名>/<仓库名>/raw/master/{fp}.json ``` ## 字段速查 | 字段 | 含义 | |---|---| | `ok` | 是否放行(`status=revoked` 时为 false) | | `status` | `active` / `revoked` | | `expires` | 下发到期日(`YYYY-MM-DD`)。设备取 **max(许可内到期日, 本值)**,所以**只能延长、不能缩短** | | `grace_days` | 到期后的宽限天数 | | `device_fp` | 绑定的设备指纹。与设备不符 → 拒收(防止文件被挪用到别的设备) | | `doc_seq` | **单调递增**的文档版本号。设备记住见过的最大值,比它小的直接拒收 | | `nonce` | 静态通道恒为空(静态文件无法做请求-响应绑定) | ### 为什么必须有 `doc_seq` 静态文件是"死"的,做不到像在线服务端那样把本次请求的 nonce 绑进被签名的响应。 于是唯一的攻击面是 **拿旧版本文件重放**:先被吊销,再把吊销之前那一版放回去, 设备就以为授权还在。 `doc_seq` 单调性把这条路堵死。**因此每台设备的 seq 只能增不能减** —— 签发工具 `publish_state.py` 会在每次状态变化时自动 +1,请不要手工改它。 ## 怎么续期 / 怎么吊销 在**持有私钥的那台电脑**上(`D:\SSWiFi\SnifferX\license\`)执行: ```bash # 续期一年(自动把 seq +1) python tools/publish_state.py renew --fp e9addc --days 365 # 吊销(立即生效,重放旧文件也回滚不了) python tools/publish_state.py revoke --fp e9addc --reason "逾期未付款" # 解除吊销 python tools/publish_state.py unrevoke --fp e9addc # 生成签字文件到 state/ python tools/publish_state.py publish # 推上去 cd state && git add -A && git commit -m "state seq N" && git push ``` 改完推送后,设备**下一次轮询(默认 12 小时)**就会拿到新状态。 > ⚠️ 紧急吊销想让它更快生效?把 `next_interval` 调小(单独给这台设备下发一次), > 或在设备侧临时把 `SNIFFERX_L4_INTERVAL` 调短。 ## 安全边界(如实说明) - ✅ **能做到**:续期、吊销、解绑(`device_fp` 不符即拒收)、防重放(`doc_seq`)、防篡改(RSA 验签) - ⚠️ **做不到**:**提前**收回授权。设备端刻意取 `max(许可内到期日, 下发到期日)`, 所以下发一个更早的日期**不会**生效 —— 这是为了防止网络抖动/攻击者重放把到期日缩短。 **要提前收回,只能用 `revoke`。** - ⚠️ 静态通道**没有遥测**(不知道设备是否在线、流量多少)。要这个就得保留在线通道。 - ⚠️ 生效有延迟,等于设备的轮询周期。