SQ AUTHORIZATION SYSTEM · v1.0.0 · WINDOWS 10 / 11

把软件授权, 做成一条 可审计的闭环。

四端程序、密钥生命周期、设备绑定、离线激活、邮箱账号、告警规则与多渠道通知。 单机 SQLite 部署,数据留在自己手里。

4
独立程序
7
告警指标
5
通知渠道
3
层完整性校验
FastAPI + SQLite PySide6 四端 HMAC-SHA256 请求签名 Ed25519 离线 / 响应签名 PBKDF2-SHA256 600,000 次 onefile exe · 免 Python
01

四端产品,各司其职

四个独立程序共用同一个授权服务:服务端负责签发与校验,管理端负责运营,主控端负责系统管理,验证端面向最终用户。

本地服务器 · 授权核心

FastAPI + SQLite 的授权服务:签发与校验密钥、管理数据库、执行告警规则、投递通知。

  • REST API,默认监听 127.0.0.1:8765,可无界面(headless)运行
  • 密钥签发、状态机、批次统计与离线激活码签发
  • 告警规则引擎:7 类指标、阈值、冷却与事件状态
  • SMTP 邮件队列 + Webhook / 钉钉 / 企微 / 飞书通道投递
  • 发布白名单(release_hashes / release_meta)与 attest 校验
  • 数据库一键备份与恢复,含完整性校验
server_config.json运行中
host / port127.0.0.1:8765
attest_modeauto
SMTPsmtp.example.com:587 · STARTTLS
白名单4 个应用哈希 · 1 个 release_id
已导入发布清单:4 个应用哈希
email worker:sent 128 · failed 0 · dead 0
alert engine:evaluated 7 rules · fired 1

管理端 · 密钥运营

面向日常运营:批量发行与全生命周期管理,查看统计、告警与审计。

  • 批量生成时长卡 / 激活次数卡,支持版本与备注
  • 吊销、恢复、冻结、解冻、续期、删除、解绑
  • 批次聚合统计、整批吊销 / 恢复、跨页批量操作
  • 告警中心:规则配置、事件确认、通知渠道管理
  • 用户管理:搜索、启用 / 禁用、强制脱绑
  • 审计日志筛选、分页与 CSV 导出
密钥管理12,480 条
GSQ-82K4-****-7F1A有效
GSQ-39MN-****-8AB0冻结
GSQ-77XT-****-4E62未使用
GSQ-14PL-****-9D3C已吊销
批量吊销批量续期导出 CSV

主控端 · 系统管理

最高权限:管理员账号、邮箱与找回密码、系统级设置与发布白名单。

  • 管理员创建、启停、重置密码与角色管理
  • 管理员邮箱绑定、验证码验证与找回密码
  • 系统设置:监听地址、数据库、SMTP、AI 助手
  • 发布白名单导入(release_manifest + 签名)
  • 主控账号保护与强制改密闸门
  • 与运营端导航区分:系统管理 / 密钥运营
管理员管理系统管理
admin已绑定邮箱
ops-01已验证
ops-02未验证
设置邮箱发送验证码重置密码

验证端 · 最终用户

邮箱账号或激活码双模式:联网校验、离线激活、心跳保活与资料管理。

  • 邮箱注册 / 登录 / 找回密码,一个邮箱同时绑定一个密钥
  • 激活码模式 + 离线激活码(LICACT1 请求码 / 激活码)
  • 心跳带随机抖动,断网可回退离线授权
  • 个人资料:显示名、头像(PNG / JPG / WebP ≤256KB)
  • 续费请求、失效后自助脱绑;有效期内脱绑需管理员
  • 可脱离发布文件独立运行,也可作为 Python SDK 嵌入第三方软件
验证端已激活
邮箱登录激活码
账号user@example.com
绑定密钥GSQ-82K4-****-7F1A
到期时间2027-03-18 · 剩余 132 天
心跳正常 · 下次间隔 23s
02

全功能矩阵

从密钥发行到告警投递的完整能力清单,共 8 个模块。

01

密钥发行

  • 时长卡:分钟 / 小时 / 天 / 周 / 月 / 季 / 年,支持自定义单位
  • 激活次数卡:1 ~ 100000 次,同一机器重复激活不重复计数
  • 次数用尽自动吊销,无法恢复 / 续期,状态显示「已用尽」
  • 版本(edition)、备注、自定义前缀,支持一次批量生成
  • 密钥列表 CSV 导出,导出内容做公式注入防护
02

批次与状态机

  • 批次号聚合生成量与激活量,支持关键词筛选
  • 整批吊销、整批恢复、跨页批量操作与进度提示
  • 状态:未使用 / 有效 / 冻结 / 吊销 / 过期 / 次数用尽
  • 冻结指定时长后自动恢复;吊销可恢复,全程可追溯
  • 续期同步更新设备绑定到期时间
03

设备与席位

  • 硬件指纹:MachineGuid + 磁盘卷序列 + MAC + 处理器特征
  • max_devices 在事务内原子占用,并发激活不超卖
  • 支持解绑换机,绑定历史与操作来源可查
  • 心跳带随机抖动,服务端按时间窗统计在线并发
  • 同一机器重复激活幂等,不重复扣减次数
04

激活方式

  • 联网激活:HMAC-SHA256 请求签名 + nonce 防重放 + 时间窗
  • 离线激活:Ed25519 签名码(LICREQ1 请求码 → LICACT1 激活码)
  • 激活次数卡强制联网激活,保证次数扣减准确
  • 验证端 standalone 模式:可脱离发布文件独立运行
  • Python SDK 可嵌入第三方软件,自动心跳与离线码校验
05

安全体系

  • 请求 HMAC-SHA256、响应 Ed25519 固定公钥,双向签名
  • PBKDF2-SHA256 600,000 次迭代,改密后旧令牌全部失效
  • 会话密钥 AES-GCM 落库加密,单独拷库无法伪造签名
  • EXE 发布清单 + Ed25519 签名 + 目录完整性校验
  • release_id 与 manifest 哈希校验 + 服务端 attest 白名单
  • 登录 / 验证失败锁定、来源 IP 限流、恒定时间口令校验
06

账号与用户

  • 管理员邮箱绑定、验证码验证与邮箱找回密码
  • 验证端邮箱注册 / 登录 / 找回密码,一人一号
  • 一个邮箱同时只绑定一个密钥;失效后可自助脱绑
  • 个人资料:显示名、头像(PNG / JPG / WebP ≤256KB)
  • 用户管理:搜索、启用 / 禁用、强制脱绑
  • 记住账号 / 记住密码,Windows 下 DPAPI 加密保存
07

告警与通知

  • 7 类指标:激活率、在线并发、过期率、7 天内到期、激活失败、风控事件、完整性告警
  • 规则:运算符、阈值、统计窗口、级别、冷却时间、渠道与启停
  • 事件三态:触发中 / 已确认 / 已处理;指标恢复自动 resolved
  • 内置风控:新硬件码冻结、IP 跳动告警、完整性失败告警
  • SMTP 邮件队列 + Webhook / 钉钉 / 企微 / 飞书,失败指数退避重试
  • 投递记录可查,Webhook 带 HMAC 签名,钉钉 / 飞书支持加签
08

运维与扩展

  • 审计日志:关键词 / 类型 / 时间筛选、分页、CSV 导出、按保留期清理
  • 数据库一键备份与恢复,恢复前做结构与完整性校验
  • 统计结果缓存、过期扫描节流、热点索引,服务端不卡顿
  • REST API 全量开放;Python SDK 直接嵌入第三方程序
  • 发布包卫生检查:只分发 release_package(exe + 清单 + 签名)
  • 首次运行引导、强制改密、控制台隐藏与深色模式适配

适用场景

同一套授权内核,覆盖自研软件、内网离线、客户端订阅与渠道分发。

自研软件厂商

给桌面软件发卡、绑定设备、控制版本与有效期,发行与回收全程有记录。

内网 / 离线环境

无外网也能完成授权:请求码加签名激活码,离线校验不依赖网络。

客户端订阅产品

邮箱账号登录加心跳在线;到期数量进入告警指标,续费请求直达运营。

渠道与分销

按批次生成与分发密钥,核销与激活状态可追溯,整批吊销随时兜底。

03

安全体系:三层裁决

本地自检负责快速拒绝,发布白名单负责最终裁决,会话与传输负责全程防篡改。

L1

客户端自校验

构建期生成 release_manifest.json 与 Ed25519 签名,逐文件记录 SHA-256 与大小,并绑定 release_id。

  • EXE 自身哈希 / 大小与目录完整性校验
  • 缺失、多出、改动文件一律拒绝启动
  • 失败时弹窗 + 本地日志 + 上报服务端
L2

服务端 attest 白名单

已发布版本进入 release_hashes / release_meta,attest 通过后签发短期 token。

  • activate / verify / heartbeat 强制携带 X-Attest-Token
  • release_id 与 manifest 哈希一并校验,混用清单判 release_mismatch
  • attest_mode:auto(默认)/ strict / off
L3

会话与传输

请求与响应双向签名,会话密钥加密落库,口令高成本哈希。

  • HMAC-SHA256 覆盖方法 / 路径 / 查询串 / 时间戳 / nonce / 请求体摘要
  • Ed25519 响应签名固定公钥;会话密钥 AES-GCM 加密存储
  • PBKDF2-SHA256 600,000 次;远程部署要求 HTTPS
attest 校验
POST /api/client/attest
body { release_id, manifest_sha256, exe_hash, machine_code }
 
403 客户端完整性校验未通过,已拒绝访问
     code = unknown_build | release_mismatch
 
→ 写入 tamper_events
→ 触发告警规则(完整性告警 ≥ 1)
→ 邮件 / Webhook / 钉钉 / 企微 / 飞书 通知
04

告警与通知

把授权数据变成可执行的运营信号:阈值可配、事件可追踪、通知多渠道。

指标口径
激活率窗口内创建的许可证中已激活占比
在线并发心跳时间窗内的活跃设备数
过期率窗口内到期许可证中已过期的占比
7 天内到期有效许可证即将到期的数量
激活失败窗口内「激活失败」审计记录数
风控事件窗口内新增风险事件数
完整性告警窗口内新增 tamper_events 数

新硬件码

设备位已满仍出现新硬件码,判定为克隆或共用:冻结密钥 + 高等级告警,主控可解冻 / 换绑。

IP 跳动

同一密钥在时间窗内出现多个 IP 网段,超过阈值触发告警;窗口与阈值可配置。

完整性失败

未知版本、清单不匹配、目录被改动,全部写入完整性告警并通知管理员与绑定邮箱。

邮件SMTP 队列 · 指数退避重试
WebhookJSON 回调 · X-SQ-Signature HMAC
钉钉Markdown 消息 · 官方加签
企业微信Markdown 消息 · 错误码校验
飞书文本消息 · 时间戳加签
05

账号与用户

管理员与终端用户各有一套账号体系:邮箱验证、密码找回、一人一号、资料与用户管理。

  1. 01注册

    邮箱 + 验证码创建账号,邮箱即登录名。

  2. 02登录

    密码登录,支持记住账号 / 记住密码(DPAPI 加密)。

  3. 03绑定密钥

    一个邮箱同时绑定一个 Key,建立绑定历史。

  4. 04激活设备

    提交硬件码,事务内占用设备位,幂等不重复计数。

  5. 05校验心跳

    会话签名校验与抖动心跳,维持在线与授权状态。

  6. 06续费 / 脱绑

    发起续费请求;失效后可自助脱绑,有效期内需管理员处理。

验证端资料

  • 显示名、头像(PNG / JPG / WebP,≤256KB)、邮箱
  • 头像可上传 / 移除,加载失败回退默认图标
  • 管理员邮箱支持验证码绑定与邮箱找回密码

用户管理

  • 按邮箱 / 显示名搜索,按状态筛选
  • 查看绑定 Key、许可证状态、到期时间与最后登录
  • 启用 / 禁用账号(禁用后旧令牌立即失效)
  • 管理员强制脱绑,释放设备并写入历史
06

部署与运维

单机即可运行,也可放到服务器远程部署;运维有备份、有审计、有性能兜底。

单机部署

FastAPI + SQLite,默认监听 127.0.0.1:8765;无需额外数据库服务。

免 Python

四个程序均为 onefile 单文件 exe,Windows 10 / 11 双击即用。

备份恢复

一键备份数据库并做完整性校验,恢复前校验表结构,避免残缺文件覆盖线上库。

性能兜底

统计结果缓存、过期扫描节流、热点索引、空队列不抢写锁,心跳高峰不卡顿。

远程部署

远程部署必须使用 HTTPS 并固定服务端响应公钥;明文 HTTP 会被客户端拒绝。

发布规范

构建产物 release_package 只含 exe + 清单 + 签名,自动做卫生检查,防止密钥 / 数据库外泄。

命令行
# 无界面启动本地服务器
python server/main.py --headless

# 导出客户端需要固定的服务端公钥
python server/main.py --print-public-key

# 忘记主控密码(保留全部授权数据)
python server/main.py --reset-master-password
07

接入与扩展

REST 接口就是协议边界;Python SDK 可直接嵌入第三方软件。

POST/api/client/activate设备激活与席位占用
POST/api/client/verify会话签名校验
POST/api/client/heartbeat心跳与在线口径
POST/api/portal/login邮箱账号登录
POST/api/alerts/rules配置告警规则
POST/api/channels配置通知渠道
POST/api/release/import导入发布白名单
GET/api/email/outbox邮件投递记录
Python SDK · sdk.LicenseClient
from sdk import LicenseClient

client = LicenseClient(
    "https://license.example.com",
    RESPONSE_PUBLIC_KEY,      # 服务端响应公钥,固定写死
)

result = client.activate("GSQ-XXXXX-XXXXX-XXXXX-XXXXX")
print(result["ok"], result["remaining"])

# 自动心跳与请求签名由 SDK 处理;
# 离线码可用 client.verify_offline(code) 校验。
attest_modeauto / strict / off
sdk_attest_exemptSDK 宿主白名单豁免开关
require_manifest_hash强制校验 manifest 哈希
channel_allow_private_hosts允许内网通知地址
08

常见问题

部署与使用中最常被问到的几个问题。

运行 exe 需要安装 Python 吗?

不需要。四个程序均为 onefile 单文件打包,双击即可运行。

忘记主控密码怎么办?

不要删除数据库。停止服务器后执行 本地服务器.exe --reset-master-password,会为 admin 重新生成一次性密码并保留全部授权数据,登录后需立即改密。

可以放到服务器上远程部署吗?

可以,但必须配置 HTTPS / 受信证书,并把 --print-public-key 导出的服务端响应公钥固定到客户端配置;明文 HTTP 会被客户端拒绝。

验证端提示连接失败?

确认本地服务器已启动、8765 端口未被占用且未被防火墙拦截;远程地址需勾选允许连接受信 HTTPS 服务端。

第三方软件能不能内嵌授权校验?

可以。使用 sdk.LicenseClient,把 core/ 与 sdk/ 随程序分发即可;SDK 不读取配置文件、不依赖发布清单,响应验签与设备绑定仍然生效。

发布文件怎么对外分发?

只分发构建生成的 release_package 目录(四个 exe + release_manifest.json + 签名 + releases 副本)。不要分发整个 dist,避免把配置或数据库带出去。

把授权链路握在自己手里。

单机部署、离线可用、客户端可自校验;异常有告警,操作有审计。