National-Grade Crypto Security
Adopts SM2/SM4 national cryptographic algorithms with four-step key agreement and end-to-end encrypted communication, compliant with MLPS 2.0 and cryptography evaluation requirements
Learn more
An authentication solution based on Chinese national cryptographic algorithms, featuring end-to-end encrypted communication, fine-grained access control, and all-scenario device adaptation
The QXJ project is the companion technical documentation and engineering collection for the FY-4 02-Batch Meteorological Satellite Program C-Satellite Ground System — MCS Information Secure Transmission Control Software (project code: IIE-MCS-ISTCS), developed by the Second Research Division of the Institute of Information Engineering, Chinese Academy of Sciences, serving the secure meteorological data transmission business of the National Satellite Meteorological Center. The system is designed around three core security scenarios:
The core components of the system include:
Built on Chinese commercial cryptographic algorithms (SM2/SM3/SM4) and hardware support such as key asset storage, the system establishes an end-to-end security protection system spanning terminal devices, network transmission, and business services.
| Feature | Description | Status |
|---|---|---|
| SM2 Key Agreement | Four-step handshake, mutual authentication, forward secrecy | Completed |
| SM4-GCM Encrypted Communication | End-to-end encryption and integrity protection for business data | Completed |
| NSP-SM Token | SM2-signed joint token, supporting local verification by business backends | Completed |
| Multi-Factor Authentication | Password + SMS code (SMS channel pending testing) | Partially completed |
| Three-Tier Key Hierarchy | Master key / device key / session key | Completed |
| User & Role Management | RBAC permission assignment, state transitions, and batch operations | Completed |
| Full Device Lifecycle Management | Registration, batch management (loss-reporting / annual review pending) | Partially completed |
| Access Control Policies | Time-window and region-scope restrictions (IP ranges, conflict detection pending) | Partially completed |
| Image Digital Watermarking | Highly robust invisible watermark embedding and extraction | Completed |
| L0 Data Traceability | Unique identifier encapsulation/decapsulation and tamper detection | Completed |
| Multi-Tab Browsing | Up to 9 independent concurrent WebView tabs | Completed |
| I18n & Theming | Multi-language following, light/dark theme switching | Completed |
For item-by-item completion of functional and performance indicators (SM2 sign/verify, SM3, SM4 throughput, cryptographic card progress, etc.), see Indicator Completion Status.
The entire QXJ workspace is managed by Google repo (10+ repositories). On first use, initialize and then sync.
repo is a multi-repository management tool developed by Google on top of Git: it uses a manifest (XML file) to declare the address, branch, and local path of multiple Git repositories. With just repo init + repo sync, dozens of repositories are pulled in one go with a unified layout; afterwards, repo forall can run Git commands in batch across all repositories. If you're new to it, read the official repo documentation first.
If repo is not installed on your machine:
# Debian / Ubuntu (same for WSL)
sudo apt update && sudo apt install -y repo
# Or manual installation via the official script
mkdir -p ~/.local/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.local/bin/repo
chmod a+rx ~/.local/bin/repo
# Make sure ~/.local/bin is in PATH# First-time initialization (pull the manifest, using the intranet-hosted repo tool)
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
# Alternative: use the Nanjing University mirror of the repo tool
repo init \
--repo-url=https://mirror.nju.edu.cn/git/git-repo \
-u http://192.168.168.51:3000/qxj-project/manifest.git
# Update the local repo tool to the intranet version
sudo cp /home/nsp/Desktop/qxj-project/.repo/repo/repo /usr/bin/repo
repo --version# Sync the all group (equivalent to every repository)
repo sync -c -j8
repo sync -c -g all -j8
# Pull only delivery projects
repo sync -c -g delivery -j8
# Sync multiple groups
repo sync -c -g all,frontend -j8
# Exclude a group
repo sync -c -g all,-backend -j8
# Sync a single project
repo sync -c qxj-backend-admin -j8
# Sync multiple specified projects
repo sync -c qxj-backend-admin qxj-frontend-admin qxj-backend-sdk -j8# Show project status
repo status
# Show branches of all projects
repo branches
# Run a git command in every project
repo forall -c "git status"
# Pull the latest code in every project
repo forall -c "git pull"
# Full update workflow
repo sync -c -j8 && repo forall -c "git pull"
# Re-sync after switching remotes
repo sync -c --force-sync -j8
# Show help
repo help sync# Mirror the repo tool itself to the intranet Gitea (admin only, one-time)
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# Show the current manifest
cat .repo/manifests/default.xml
# Re-sync after modifying the manifest
cd .repo/manifests && git pull && cd ../..
repo sync -c -j8Common repo sync parameters:
| Parameter | Description |
|---|---|
-c | Sync only the current branch (faster) |
-j8 | 8 concurrent jobs |
-f | Force-overwrite local modifications |
-d | Switch back to the revision specified by the manifest |
-g | Specify the groups to sync |
-v | Verbose output |
-n | Show only, do not download (dry run) |
--force-sync | Force a full re-sync |
The manifest is maintained centrally in the standalone manifest repository and will later be split into multiple files by role, so members with different roles pull different groups. The authoritative content is the file in the repository; this page intentionally does not enumerate the project list (to avoid drifting out of sync):
# Show the effective manifest
cat .repo/manifests/default.xmlRepository: manifest
The basic structure of a manifest (illustrative only; the actual project list evolves over time):
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<!-- Root URL of the remote -->
<remote name="origin" fetch="http://192.168.168.51:3000/" />
<!-- Default remote and default branch -->
<default remote="origin" revision="main" />
<!-- Each project maps to one repository: name = repo path, path = local directory, groups = pull-by-group -->
<project name="qxj-project/<repo-name>.git" path="<local-dir>" groups="all,delivery" />
</manifest>For a more complete development environment setup guide, see Getting Started.
The system adopts a layered architecture — client layer, server layer, and SDK layer — with clear responsibilities and standardized interfaces:
For a more detailed architecture description, see Overall Architecture.
The system uses a custom binary protocol frame (64B v2 frame structure, major command code + sub-command codes 0x01~0x04) to complete SM2-based four-step authenticated key agreement between mobile devices and the MCS server: client and server each generate an ephemeral SM2 key pair, exchange public keys and random numbers via INIT / RESP / ACK frames, independently derive the same session key, and finally receive the NSP-SM signed token via the TOKEN frame. Each negotiation uses a fresh ephemeral key pair, so even if long-term keys leak, past sessions remain secure — providing forward secrecy. The negotiated session key is then used for SM4-GCM business encryption.
See SM2 Key Agreement for details; for frame formats and processing flow, see Technical Summary · Processing Flow & Protocols.
The permission system is built on the CoAC (Condition-based Access Control) model. Beyond RBAC role authorization, three conditional checks — time rules, region scope (geofencing), and device binding — are executed in sequence when a user connects: access to MCS business is granted only when the access occurs within an allowed time window, inside a specified geographic region, and from a registered, activated device; any failure rejects the request and records an audit log. Policies are centrally defined and updated by administrators in the access control policy module.
See Access Control for details; for policy data structures, see Technical Summary · Module Design.
The business backend applies a unified security pipeline to every request: the request first passes through the authentication middleware, where the backend SDK's verify_access_token locally completes SM2 signature verification and validity checks of the NSP-SM token (no callback to the auth center required); then a permission check runs — on success the request proceeds to business handling, otherwise 401 / 403 is returned. Regardless of outcome, key operations such as login, authentication, and encryption/decryption are written to the security audit log, forming a complete operation trail.
See Backend Architecture for details; for error codes and handling, see Technical Summary · Error Handling.
| Page | Content |
|---|---|
| Getting Started | Environment requirements, repo workspace pull, full development environment setup |
| Project Overview | Project background, business scenarios, and construction goals |
| Tech Stack | Full-stack technology selection and versions |
| Page | Content |
|---|---|
| Overall Architecture | System layering, subsystem division, and deployment topology |
| Backend Architecture | Django project structure, auth chain, and service division |
| Frontend Architecture | Vue3 project structure, routing / state / request layer design |
| HarmonyOS App | HarmonyOS app architecture, ArkWeb and JSBridge mechanisms |
| Deployment & Server Configuration | Server planning and deployment essentials |
| Page | Content |
|---|---|
| SM2 Key Agreement | Four-step handshake protocol, binary frames, and forward secrecy |
| Encrypted Communication | SM4-GCM encryption and end-to-end transmission |
| Access Control | Time rules, region scopes, and device binding policies |
| Multi-Tab Browsing | Multi-tab WebView management |
| Server Management | Multi-server configuration and switching |
| Internationalization | Multi-language support mechanism |
| Theme Customization | Light/dark themes and theme color configuration |
| Page | Content |
|---|---|
| API Overview | REST API structure and authentication methods |
| Python Backend SDK | Server-side interfaces such as verify_access_token |
| JavaScript Frontend SDK | verifyJwt and JSBridge interfaces |
| Page | Content |
|---|---|
| Panorama & Topology | Full repository list, relationships, and grouping |
| HarmonyOS Browser | Pad secure browser repo |
| Auth Backend admin / Admin Frontend admin | Core management frontend & backend repos |
| App Store Site | App distribution site |
| Backend SDK / Frontend SDK | The two SDK repos |
| Mock Demo / Auxiliary Tools | Demo and tooling repos |
| Page | Content |
|---|---|
| Overview & Writing Guide | List of five delivery documents and writing conventions |
| User Manual | Installation, configuration, usage guide, and operations |
| Deployment Document | 11-chapter full deployment process with configuration samples |
| Acceptance Technical Summary | Technical solution, key technologies, and indicator completion |
| Interface Design Details | Complete details of 160 interfaces |
| Testing Materials | Test report templates and functional / performance cases |
| Page | Content |
|---|---|
| Development Guide | Development environment, conventions, and collaboration workflow |
| Markdown Extensions Demo | Markdown syntax supported by this site |
| Syntax Cheatsheet | Markdown writing quick reference |
| Site Password Gate | Password gate mechanism |