国密レベルのセキュリティ
SM2/SM4 国密アルゴリズムを採用し、4 ステップ鍵合意とエンドツーエンド暗号化通信を実現。等保 2.0 および暗号評価要件に準拠
詳細を見る
QXJ プロジェクトは、風雲四号 02 次期気象衛星工程 C 星地上システム MCS 情報セキュア伝送制御ソフトウェア(プロジェクト番号:IIE-MCS-ISTCS)の付帯技術ドキュメントおよび工程コレクションであり、中国科学院信息工程研究所第二研究室が開発し、国家衛星気象センターの気象データセキュア伝送業務にサービスを提供します。システムは 3 つのコアセキュリティシナリオを中心に設計されています:
システムのコアコンポーネント:
システム全体は中国商用暗号アルゴリズム(SM2/SM3/SM4)を基盤とし、重要資産ストレージなどのハードウェアサポートと組み合わせて、端末デバイス、ネットワーク伝送、業務サービスにまたがるエンドツーエンドのセキュリティ保護体系を構築しています。
| 機能 | 説明 | 状態 |
|---|---|---|
| SM2 鍵合意 | 4 ステップハンドシェイク、双方向認証、前方秘匿性 | 完了 |
| SM4-GCM 暗号化通信 | 業務データのエンドツーエンド暗号化・復号と完全性保護 | 完了 |
| NSP-SM トークン | SM2 署名連合トークン。業務バックエンドでのローカル検証をサポート | 完了 |
| 多要素認証 | パスワード + SMS 認証コード(SMS チャネルはテスト待ち) | 一部完了 |
| 3 層鍵体系 | マスターキー / デバイスキー / セッションキー | 完了 |
| ユーザー・ロール管理 | RBAC 権限割当、状態遷移、一括操作 | 完了 |
| デバイス全ライフサイクル管理 | 登録、一括管理(紛失届 / 年次審査は未完了) | 一部完了 |
| アクセス制御ポリシー | 時間帯・区域範囲制限(IP セグメント、競合検出は未実装) | 一部完了 |
| 画像デジタル透かし | 高頑健不可視透かしの埋め込みと抽出 | 完了 |
| L0 データトレーサビリティ | 一意識別子のカプセル化・脱カプセル化と改ざん検出 | 完了 |
| マルチタブブラウジング | 最大 9 つの独立した WebView 同時タブ | 完了 |
| 国際化とテーマ | 多言語追従、明暗テーマ切替 | 完了 |
機能指標と性能指標(SM2 署名・検証 / SM3 / SM4 スループット、暗号カード進捗など)の項目別完了状況については、指標完了状況 を参照してください。
QXJ ワークスペース全体は Google の repo で統一管理されています(合計 10 以上のリポジトリ)。初回使用時は初期化してから同期してください。
repo は Google が Git ベースで開発したマルチリポジトリ管理ツールです:1 つの manifest(XML ファイル)で複数の Git リポジトリのアドレス、ブランチ、ローカルパスを宣言し、repo init + repo sync の 2 コマンドだけで数十のリポジトリを統一構造で一括取得できます。その後も repo forall ですべてのリポジトリで Git コマンドを一括実行できます。不慣れな方はまず 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 にミラー(管理者のみ、1 回限り)
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 が 1 リポジトリに対応:name はリポジトリパス、path はローカルディレクトリ、groups でグループ別取得を制御 -->
<project name="qxj-project/<リポジトリ名>.git" path="<ローカルディレクトリ>" groups="all,delivery" />
</manifest>より完全な開発環境構築の説明は クイックスタートガイド を参照してください。
システムは階層型アーキテクチャを採用し、上からクライアント層、サーバー層、SDK 層に分かれ、各層の責務が明確で標準化されたインターフェースを通じて連携します:
より詳細なアーキテクチャ説明は 全体アーキテクチャ を参照してください。
システムはカスタムバイナリプロトコルフレーム(64B v2 フレーム構造、主コマンドコード + サブコマンドコード 0x01~0x04)を採用し、モバイルデバイスと MCS サーバー間で SM2 ベースの 4 ステップ認証鍵合意を完了します:クライアントとサーバーはそれぞれ SM2 一時鍵ペアを生成し、INIT / RESP / ACK フレームで公開鍵と乱数を交換し、双方が独立して同一のセッションキーを導出し、最後に TOKEN フレームで NSP-SM 署名トークンを返します。各合意で新しい一時鍵ペアを使用するため、長期鍵が漏洩しても過去のセッションは安全であり、前方秘匿性を備えています。合意されたセッションキーはその後 SM4-GCM 業務暗号化・復号に使用されます。
詳細は SM2 鍵合意 を、プロトコルフレーム形式と処理フローは 技術総括 · 処理フローとプロトコル を参照してください。
システムは CoAC(条件ベースアクセス制御)モデルに基づく権限体系を構築しており、RBAC ロール認可に加えて、ユーザー接続時に時間ルール、区域範囲(ジオフェンシング)、デバイスバインディングの 3 つの条件チェックを順次実行します:許可された時間帯、指定された地理区域内、登録・有効化済みのデバイスの 3 つすべてを満たした場合のみ MCS 業務へのアクセスが許可され、いずれか 1 つでも満たさない場合は拒否され監査ログに記録されます。ポリシーは管理者がアクセス制御ポリシーモジュールで一元制定・更新します。
詳細は アクセス制御 を、ポリシーデータ構造は 技術総括 · モジュール設計 を参照してください。
業務バックエンドはすべてのリクエストに対して統一されたセキュリティパイプラインを実行します:リクエストはまず認証ミドルウェアを通過し、バックエンド SDK の verify_access_token を使用して NSP-SM トークンの SM2 署名検証と有効期限チェックをローカルで完了します(認証センターへのコールバック不要)。続いて権限チェックを行い、通過すれば業務処理に進み、失敗すれば 401 / 403 を返します。成否にかかわらず、ログイン、認証、暗号化・復号などの重要な操作はすべてセキュリティ監査ログに書き込まれ、完全な操作記録を形成します。
詳細は バックエンドアーキテクチャ を、エラーコードと対処方法は 技術総括 · エラー処理 を参照してください。
| ページ | 内容 |
|---|---|
| クイックスタート | 環境要件、repo ワークスペース取得、開発環境構築の全フロー |
| プロジェクト概要 | プロジェクト背景、業務シナリオ、建設目標 |
| 技術スタック | フルスタック技術選定とバージョン一覧 |
| ページ | 内容 |
|---|---|
| 全体アーキテクチャ | システム階層、サブシステム分割、デプロイトポロジ |
| バックエンドアーキテクチャ | Django プロジェクト構造、認証・認可チェーン、サービス分割 |
| フロントエンドアーキテクチャ | Vue3 プロジェクト構造、ルーティング / 状態 / リクエスト層設計 |
| HarmonyOS アプリ | HarmonyOS アプリアーキテクチャ、ArkWeb と JSBridge メカニズム |
| デプロイとサーバー設定 | サーバー計画とデプロイの要点 |
| ページ | 内容 |
|---|---|
| SM2 鍵合意 | 4 ステップハンドシェイクプロトコル、バイナリフレーム、前方秘匿性 |
| 暗号化通信 | SM4-GCM 暗号化・復号とエンドツーエンド伝送 |
| アクセス制御 | 時間ルール、区域範囲、デバイスバインディングポリシー |
| マルチタブブラウジング | マルチタブ WebView 管理 |
| サーバー管理 | マルチサーバー設定と切替 |
| 国際化 | 多言語サポートメカニズム |
| テーマカスタマイズ | 明暗テーマとテーマカラー設定 |
| ページ | 内容 |
|---|---|
| API 概要 | REST API 構造と認証方式 |
| Python バックエンド SDK | verify_access_token などのサーバーサイド API |
| JavaScript フロントエンド SDK | verifyJwt と JSBridge API |
| ページ | 内容 |
|---|---|
| 全景とトポロジ | 全リポジトリ一覧、関係、グループ分け |
| HarmonyOS ブラウザ | Pad セキュアブラウザリポジトリ |
| 認証バックエンド admin / 管理フロントエンド admin | コア管理フロントエンド・バックエンドリポジトリ |
| アプリストア公式サイト | アプリ配布サイト |
| バックエンド SDK / フロントエンド SDK | SDK 2 リポジトリ |
| Mock デモ / 補助ツール | デモとツールリポジトリ群 |
| ページ | 内容 |
|---|---|
| 概要と執筆ガイド | 5 つのデリバリードキュメント一覧と執筆規約 |
| ユーザーマニュアル | インストール設定、使用ガイド、運用保守 |
| デプロイドキュメント | 11 章のデプロイ全フローと設定サンプル |
| 検収技術総括 | 技術方案、キー技術、指標完了状況 |
| インターフェース設計詳録 | 160 インターフェースの完全明細 |
| テスト資料 | テストレポートテンプレートと機能 / 性能テストケース |
| ページ | 内容 |
|---|---|
| 開発ガイド | 開発環境、規約、協業フロー |
| Markdown 拡張デモ | 本サイトでサポートされる Markdown 構文 |
| 構文クイックリファレンス | Markdown 執筆クイックリファレンス |
| サイトパスワードゲート | ゲート機構の説明 |