国密级安全
采用 SM2/SM4 国密算法,实现四步密钥协商、端到端加密通信,符合等保 2.0 和密评要求
了解详情
QXJ 项目是 风云四号02批气象卫星工程C星地面系统 MCS信息安全传输控制软件(项目编号:IIE-MCS-ISTCS)的配套技术文档与工程集合,由中国科学院信息工程研究所第二研究室研制,服务于国家卫星气象中心的气象数据安全传输业务。系统围绕三类核心安全场景设计:
系统的核心组成包括:
整个系统以国产商用密码算法(SM2/SM3/SM4)为基础,结合关键资产存储等硬件支撑,构建了从终端设备、网络传输到业务服务的端到端安全防护体系。
| 特性 | 说明 | 状态 |
|---|---|---|
| SM2 密钥协商 | 四步握手,双向认证,前向安全 | 已完成 |
| SM4-GCM 加密通信 | 业务数据端到端加解密与完整性保护 | 已完成 |
| NSP-SM Token | SM2 签名联合令牌,支持业务后台本地验签 | 已完成 |
| 多因子身份认证 | 口令 + 短信验证码(短信通道待测试) | 部分完成 |
| 三级密钥体系 | 主密钥 / 设备密钥 / 会话密钥 | 已完成 |
| 用户与角色管理 | RBAC 权限分配、状态流转与批量操作 | 已完成 |
| 设备全生命周期管理 | 注册、批量管理(挂失 / 年审待完成) | 部分完成 |
| 访问控制策略 | 时间段、区域范围限制(IP 段、冲突检测待实现) | 部分完成 |
| 图像数字水印 | 高鲁棒不可见水印嵌入与提取 | 已完成 |
| L0 数据溯源 | 唯一标识封装解封装与篡改检测 | 已完成 |
| 多标签浏览 | 最多 9 个独立 WebView 并发标签 | 已完成 |
| 国际化与主题 | 多语言跟随、明暗主题切换 | 已完成 |
功能指标与性能指标(SM2 签验签 / SM3 / SM4 吞吐、密码卡进度等)的逐项完成情况,见 指标完成情况。
整个 QXJ 工作区由 Google repo 统一管理(共 10+ 个仓库),首次使用需先初始化再同步。
repo 是 Google 基于 Git 开发的多仓库管理工具:它用一份 manifest(XML 文件)声明多个 Git 仓库的地址、分支与本地路径,只需 repo init + repo sync 两条命令,就能一次性把几十个仓库按统一结构批量拉取下来,后续还能通过 repo forall 在所有仓库中批量执行 Git 命令。不熟悉的同学可以先阅读 repo 官方使用文档(或 中文介绍 中关于 repo 的部分)。
如果本机还没有安装 repo:
# Debian / Ubuntu(WSL 同理)
sudo apt update && sudo apt install -y repo
# 或官方脚本手动安装
mkdir -p ~/.local/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.local/bin/repo
chmod a+rx ~/.local/bin/repo
# 确认 ~/.local/bin 在 PATH 中# 首次初始化(拉取 manifest,使用内网托管的 repo 工具)
repo init \
--repo-url=http://192.168.168.51:3000/qxj-project/git-repo.git \
--repo-rev=v2.67 \
-u http://192.168.168.51:3000/qxj-project/manifest.git
# 备选:使用南京大学镜像的 repo 工具
repo init \
--repo-url=https://mirror.nju.edu.cn/git/git-repo \
-u http://192.168.168.51:3000/qxj-project/manifest.git
# 更新本地 repo 工具到内网版本
sudo cp /home/nsp/Desktop/qxj-project/.repo/repo/repo /usr/bin/repo
repo --version# 同步 all 组(等同于全部仓库)
repo sync -c -j8
repo sync -c -g all -j8
# 只拉取交付项目
repo sync -c -g delivery -j8
# 同步多个组
repo sync -c -g all,frontend -j8
# 排除某个组
repo sync -c -g all,-backend -j8
# 只同步某个项目
repo sync -c qxj-backend-admin -j8
# 同步多个指定项目
repo sync -c qxj-backend-admin qxj-frontend-admin qxj-backend-sdk -j8# 查看项目状态
repo status
# 查看所有项目分支
repo branches
# 在所有项目中执行 git 命令
repo forall -c "git status"
# 在所有项目中拉取最新代码
repo forall -c "git pull"
# 完整更新流程
repo sync -c -j8 && repo forall -c "git pull"
# 换源后重新同步
repo sync -c --force-sync -j8
# 查看帮助
repo help sync# 将 repo 工具本身镜像到内网 Gitea(仅管理员操作一次)
git remote add gitea http://192.168.168.51:3000/qxj-project/git-repo.git
git remote -v
# gitea http://192.168.168.51:3000/qxj-project/git-repo.git (fetch/push)
# origin https://gerrit.googlesource.com/git-repo (fetch/push)
git push --mirror gitea# 查看当前 manifest 内容
cat .repo/manifests/default.xml
# 修改 manifest 后重新同步
cd .repo/manifests && git pull && cd ../..
repo sync -c -j8常用 repo sync 参数:
| 参数 | 说明 |
|---|---|
-c | 只同步当前分支(加快速度) |
-j8 | 8 个并发任务 |
-f | 强制覆盖本地修改 |
-d | 切换回 manifest 指定的 revision |
-g | 指定同步的组 |
-v | 详细输出 |
-n | 只查看不下载(dry run) |
--force-sync | 强制重新同步 |
Manifest 由独立的 manifest 仓库统一维护,后续将按角色拆分为多个文件,不同角色成员拉取不同的组。当前完整内容以仓库中的文件为准,本文档不再罗列具体项目清单(避免与实际不同步):
# 查看当前生效的 manifest
cat .repo/manifests/default.xml仓库地址:manifest
Manifest 的基本结构如下(仅示意,实际项目清单会持续调整):
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<!-- 远程仓库根地址 -->
<remote name="origin" fetch="http://192.168.168.51:3000/" />
<!-- 默认远程与默认分支 -->
<default remote="origin" revision="main" />
<!-- 每个 project 对应一个仓库:name 为仓库路径,path 为本地目录,groups 控制可按组拉取 -->
<project name="qxj-project/<仓库名>.git" path="<本地目录>" groups="all,delivery" />
</manifest>更完整的开发环境搭建说明见 快速开始指南。
系统采用分层架构,自上而下分为客户端层、服务端层、SDK 层,各层职责清晰、通过标准化接口交互:
更详细的架构说明见 整体架构。
系统采用自定义二进制协议帧(64B v2 帧结构,主命令码 + 子命令码 0x01~0x04),在移动设备与 MCS 服务器之间完成基于 SM2 的四步身份认证密钥协商:客户端与服务器各自生成 SM2 临时密钥对,通过 INIT / RESP / ACK 帧交换公钥与随机数,双方独立推导出相同的会话密钥,最后由 TOKEN 帧返回 NSP-SM 签名令牌。每次协商均使用新的临时密钥对,即使长期密钥泄露,历史会话依然安全,具备前向安全性;协商得出的会话密钥随后用于 SM4-GCM 业务加解密。
详见 SM2 密钥协商,协议帧格式与处理流程见 技术总结 · 处理流程与协议。
系统基于 CoAC(基于条件的访问控制)模型构建权限体系,除 RBAC 角色授权外,还支持在用户接入时依次执行时间规则、区域范围(地理围栏)、设备绑定三类条件检查:仅在允许的时间段、指定的地理区域内、使用已注册激活的设备,三者全部通过才允许访问 MCS 业务,任一不满足即拒绝并记录审计日志。策略由管理员在访问控制策略模块统一制定与更新。
详见 访问控制,策略数据结构见 技术总结 · 模块设计。
业务后台对每一个请求执行统一的安全管道:请求首先经过认证中间件,使用后端 SDK 的 verify_access_token 在本地完成 NSP-SM 令牌的 SM2 验签与有效期校验(无需回调鉴权中心);随后进行权限检查,通过后进入业务处理,失败则返回 401 / 403。无论成功与否,登录、认证、加解密等关键操作都会写入安全审计日志,形成完整的操作留痕。
详见 后端架构,错误码与处理对策见 技术总结 · 出错处理。
| 页面 | 内容 |
|---|---|
| 快速开始 | 环境要求、repo 工作区拉取、开发环境搭建全流程 |
| 项目概览 | 项目背景、业务场景与建设目标 |
| 技术栈 | 全栈技术选型与版本一览 |
| 页面 | 内容 |
|---|---|
| 整体架构 | 系统分层、子系统划分与部署拓扑 |
| 后端架构 | Django 工程结构、认证鉴权链路与服务划分 |
| 前端架构 | Vue3 工程结构、路由 / 状态 / 请求层设计 |
| 鸿蒙应用 | 鸿蒙 APP 架构、ArkWeb 与 JSBridge 机制 |
| 部署与服务器配置 | 服务器规划与部署要点 |
| 页面 | 内容 |
|---|---|
| SM2 密钥协商 | 四步握手协议、二进制帧与前向安全 |
| 加密通信 | SM4-GCM 加解密与端到端传输 |
| 访问控制 | 时间规则、区域范围与设备绑定策略 |
| 多标签浏览 | 多标签 WebView 管理 |
| 服务器管理 | 多服务器配置与切换 |
| 国际化 | 多语言支持机制 |
| 主题定制 | 明暗主题与主题色配置 |
| 页面 | 内容 |
|---|---|
| 接口总览 | REST 接口结构与认证方式 |
| Python 后端 SDK | verify_access_token 等服务端接口 |
| JavaScript 前端 SDK | verifyJwt 与 JSBridge 接口 |
| 页面 | 内容 |
|---|---|
| 全景与拓扑 | 全部仓库清单、关系与分组 |
| 鸿蒙浏览器 | Pad 安全浏览器仓 |
| 认证后端 admin / 管理前端 admin | 核心管理前后端仓 |
| 应用商店官网 | APP 分发站 |
| 后端 SDK / 前端 SDK | SDK 两仓 |
| Mock Demo / 辅助工具 | Demo 与工具仓群 |
| 页面 | 内容 |
|---|---|
| 总览与编写指南 | 五份交付文档清单与写作约定 |
| 用户手册 | 安装配置、使用指南与运维 |
| 部署文档 | 11 章部署全流程与配置样例 |
| 验收技术总结 | 技术方案、关键技术与指标完成情况 |
| 接口设计详录 | 160 个接口完整明细 |
| 测试材料 | 测试报告模板与功能 / 性能用例 |
| 页面 | 内容 |
|---|---|
| 开发指南 | 开发环境、规范与协作流程 |
| Markdown 扩展演示 | 本站支持的 Markdown 语法 |
| 语法速查 | Markdown 写作速查表 |
| 站点密码门禁 | 门禁机制说明 |