一个面向地理空间数据的企业级安全分发与全链路溯源平台
覆盖矢量(SHP)与栅格(GeoTIFF)数据的完整生命周期管理——从用户申请、双级审批、个性化指纹水印,到安全分发、泄露取证与可验证证据链。
系统当前处于 v3.0 开发主线(最近发布 tag:v2.4.0),交付/取证链路与鲁棒性实验室已合入 main。在地理空间数据的共享与分发场景中,数据泄露溯源和权限管控是核心难题。v3.0 将系统从"二维码水印 + 双级审批"升级为 受控分发 → 个体指纹 → 泄露取证 → 可验证证据 的完整闭环:
- 受控分发:用户提交数据申请 → 管理员双级审批 → 每次授权生成独立的个性化交付物(同一数据集,不同领取者得到不同副本)
- 个体指纹:每份交付物携带 Ed25519 + COSE_Sign1 签名的 QR v2 短载荷(仅含
v / kid / fid / delivery / issued_at,不含任何个人信息)与产物哈希(artifact_root),指纹与交付记录一一绑定 - 泄露取证:上传泄露副本,系统提取指纹并锁定对应交付记录(交付编号),进而确认交付者
- 可验证证据:交付全流程事件写入 append-only 哈希链(canonical CBOR + Ed25519),批次 Merkle 根经 OpenTimestamps 锚定;EVM 第二锚定(AnchorRegistry 合约)测试就绪、待 Sepolia 部署
- 支持矢量数据(SHP)与栅格数据(GeoTIFF)两种主流空间数据格式
| 功能 | 说明 |
|---|---|
| 个性化交付(DownloadDelivery) | 每次授权生成独立交付物,状态机 PENDING → PROCESSING → READY / FAILED;未领取的交付可被复用,用户再次授权则生成新交付与新指纹 |
| 指纹(FID) | 每次交付一个 128-bit 随机指纹(CSPRNG),编入签名的 QR v2 载荷后随水印嵌入产物;旧 v1 文本 QR 保持兼容读取 |
| Ed25519 + COSE_Sign1 | 采用 RFC 9052 标准签名结构与 RFC 8949 canonical CBOR(类型白名单、拒绝浮点);替代旧 64-bit 截断 HMAC |
| 证据链 | 交付全流程事件按交付分链写入 append-only 哈希链(stream + seq 绑定、UTC 整秒规范化);验证可检测篡改并定位断点(broken_at) |
| Merkle 批次锚定 | Merkle 叶节点绑定批次大小与位置,批量快照生成根哈希;锚定记录携带事件数与链头哈希,保证完整性 |
| OpenTimestamps 锚定 | 真实网络客户端(httpx 直连公共 OTS 日历)提交批次根;失败自动降级 pending,不阻塞业务 |
| EVM 第二锚定(演示) | contracts/AnchorRegistry.sol(permissionless,重复锚定 revert)+ EVMAnchorProvider(web3 本地签名);eth-tester 内存链全流程测试(CI 执行;缺 solc 时自动跳过);部署状态:待 Sepolia 部署 |
| CIDv1 内容标识 | 产物根哈希以 CIDv1(multiformats raw codec)写入个性化完成事件 |
| 泄露取证 | 管理端上传泄露副本(SHP / ZIP / 图片,含 zip 炸弹与路径穿越防护)→ 解码 QR 并验签 → 与候选交付指纹比对,锁定对应交付记录(uuid / 交付编号),交付者经溯源接口确认;验证接口不返回 PII |
| 交付台账检索 | 按 用户 / 指纹(前缀)/ 交付编号 / 时间段 四维组合检索(另支持申请 ID);员工仅见本人,管理员全量 |
口径说明:FID 用于唯一标识(并非保密载荷,安全来自签名与服务端绑定);当前方案不承诺抗合谋攻击;OpenTimestamps 证明的是"该证据承诺在某时间之前已存在"。
| 功能 | 说明 |
|---|---|
| 矢量方案对比 | D-QIM(差分域 QIM:载体为边坐标差分,抗平移)vs legacy(绝对坐标域 QIM);同一攻击矩阵下实测对比 |
| 栅格五算法 | LSB / DWT / 直方图平移(三者可逆)+ blind_watermark(盲水印;裁剪后凭宿主模板重对齐恢复)+ IW-DCT(invisible-watermark 风格 DCT 盲提取) |
| 攻击矩阵 | 矢量:平移 / 缩放 / 删点 / 噪声 / 简化;栅格:JPEG / 缩放 / 裁剪 / 旋转 / 噪声 / 模糊(可选) |
| 多试验系统 | 固定种子可复现;矩阵模式 1–10 轮、强度扫描 1–5 轮,成功率与 NC 均值聚合 |
| 强度扫描 | 每类攻击 5 档强度阶梯,前端绘制检出率曲线 |
| 攻击源码可查 | 后端 inspect.getsource 返回真实攻击实现,前端 highlight.js 高亮,行号锚点(#L{n})可分享 |
| 指标词典 | NC / BER / 解码成功率等指标的解释、阈值口径与文档抽屉 |
| 功能 | 说明 |
|---|---|
| 双级审批流程 | 两级管理员依次审批,实时状态追踪,支持批量审批 |
| 二维码水印系统 | 在矢量/栅格数据中生成、嵌入、提取二维码水印(v2 短载荷,兼容 v1) |
| 多算法水印支持 | 矢量:D-QIM / legacy;栅格五种:LSB、DWT、直方图平移(可逆)、blind_watermark、IW-DCT,保留 GeoTIFF 坐标信息 |
| Ed25519 签名 | 密码学签名防止水印伪造与篡改(RFC 9052 COSE_Sign1;旧 v1 HMAC 兼容读取) |
| 申请撤回 | 用户可在审批前撤回已提交的申请 |
| 数据召回投票 | 民主化召回机制,管理员反对比例超过 50% 即触发数据召回(提案人回避) |
| 管理员晋升 | 员工可申请成为管理员,需 66% 现有管理员投票通过 |
| 功能 | 说明 |
|---|---|
| 角色权限控制 | 员工、管理员(adm1/adm2/adm3),分阶段审批权限 |
| JWT 认证 | Access + Refresh Token 双令牌,自动续期 |
| 实时聊天 | 聊天与通知采用 HTTP 轮询准实时更新;后端保留 Socket.IO 实时通道(threading 模式;Windows 下不初始化) |
| 通知系统 | 定向通知 + 全局公告 |
| 操作审计日志 | 关键操作留痕,支持按用户/编号/动作/状态/时间段筛选,并可流式导出 CSV(5 万行上限,截断时响应头标记) |
| 批量嵌入作业 | 管理端多选申请发起后台批量嵌入(≤50 项/作业,单一活动作业),真实进度轮询、失败项一键重跑、僵尸作业自动清扫 |
| 下载统计看板 | 管理端仪表盘内置:7/30/90 天窗口(API 亦接受 14)、逐日趋势、Top10 用户 / 数据、周环比,支持 CSV 导出 |
| 数据看板 | 管理员/员工双视角仪表盘,ECharts 可视化 |
| 中英双语 | 42 个路由页面、2600+ 翻译键,中英键集完全对齐,运行时一键切换 |
| Grafana 监控 | 自动配置 2 块仪表盘(业务概览 11 面板 + 日志 5 面板)与告警规则 |
| 日志聚合 | Loki + Promtail 集中日志查看 |
| 功能 | 说明 |
|---|---|
| 双主题 | 深色(Linear 风 · 靛蓝)+ 浅色(Vercel 风极简)双模式,员工端 / 管理端 / 实验室页面整体覆盖(个别历史页面深色样式仍在收敛);登录、注册等品牌页保持固定品牌视觉 |
| 设计令牌 | L1 色阶 + L2 语义映射的双值架构,一套 token 驱动两种模式;Element Plus 暗色变量品牌化覆写 |
| 动效纪律 | 主题切换过渡窗口、逐组件 reduced-motion 降级(循环动画关闭、骨架屏降频) |
| 辅助体系 | 指标词典(阈值口径解释 + 文档抽屉)、质量看板与鲁棒性实验室首访引导(ElTour)、哈希文本组件、水印图放大预览 |
| 响应式布局 | 全站 42 条路由 390px 移动端可用(侧栏抽屉 / 顶栏可达 / 无静默裁切),桌面端零回归(像素对照) |
| 统一页面骨架 | 共享 PageHeader / ListShell 组件(16 页头部 + 5 页列表壳统一:筛选 / 分页 / 空态) |
| 加载骨架 | 仪表盘高保真骨架屏(几何与真实布局对齐);骨架即加载态(无遮挡遮罩) |
| 无障碍 | axe-core 全站 40 路由审计(main+nav 地标 / 图标钮可访问名 / AA 对比度 / 恰一 h1);EP 上游缺陷采用页内补丁(整体可移除式设计),残余留档项逐条附证据 |
| 侧栏体验 | 折叠丝滑(修复 EP 折叠换装 301ms 兜底卡顿)、激活项自动滚入、折叠态弹出菜单贴齐、折叠状态记忆、菜单联动豁免激活链(打开其它菜单时激活项不移出视野) |
- 双数据库架构 — MySQL 存业务数据,PostgreSQL + PostGIS 存空间数据
- 进程内缓存层 — 内置内存缓存(无外部依赖,Redis 仅作为可选限流存储)
- 准实时消息 — 聊天与通知采用 HTTP 轮询更新;后端保留 Socket.IO 实时通道(threading 模式,Windows 下不初始化)
- Prometheus 指标 — 请求延迟、错误率、业务 KPI 暴露于
/metrics - 分级限流 — 关键接口按 JWT 身份限流,通用入口按 IP 限流(Flask-Limiter)
- 可验证证据链 — canonical CBOR + Ed25519 + Hash Chain + Merkle + OpenTimestamps 外部锚定
- 请求拦截器 — Axios 拦截器自动注入 Token、401 自动刷新
- 路由懒加载 — Dynamic Import 实现代码分割,优化首屏加载
- 构建分块 — vendor 手动分块(element-plus / echarts / vue 独立 chunk),入口包 ≈1.5 MB → 248 kB(gzip 483 → 80 kB)
- 3D 可视化 — Three.js 粒子首屏 + 管理端数据流 3D 地球(three-globe,投递弧线实时来自交付统计)
┌─────────────────────────────────────────────────────┐
│ 前端 (Vue 3) │
│ ┌──────────┐ ┌──────────────┐ ┌───────────┐ │
│ │ Vue 3 │ │ Element Plus │ │ Pinia │ │
│ │ (SFC) │ │ (UI 组件库) │ │ (状态管理) │ │
│ └──────────┘ └──────────────┘ └───────────┘ │
│ ┌──────────┐ ┌──────────────┐ ┌───────────┐ │
│ │vue-router│ │ vue-i18n │ │ HTTP 轮询 │ │
│ │ (懒加载) │ │ (中/英文) │ │ (消息更新) │ │
│ └──────────┘ └──────────────┘ └───────────┘ │
└───────────────────────┬─────────────────────────────┘
│ HTTP (JWT)
▼
┌─────────────────────────────────────────────────────┐
│ 后端 (Flask) │
│ ┌──────────────┐ ┌──────────────┐ ┌─────────────┐ │
│ │ Flask-RESTful│ │ Flask-JWT │ │Flask-SocketIO│ │
│ │ (API) │ │ (认证) │ │ (WebSocket) │ │
│ └──────────────┘ └──────────────┘ └─────────────┘ │
│ ┌──────────────┐ ┌──────────────┐ ┌─────────────┐ │
│ │ SQLAlchemy │ │ Cache │ │ Prometheus │ │
│ │ (ORM) │ │ (进程内缓存) │ │ (指标采集) │ │
│ └──────────────┘ └──────────────┘ └─────────────┘ │
│ ┌──────────────┐ ┌──────────────┐ ┌─────────────┐ │
│ │ Flask-Limiter│ │ rasterio │ │ 水印算法 │ │
│ │ (接口限流) │ │ (瓦片切片) │ │ (矢量+栅格) │ │
│ └──────────────┘ └──────────────┘ │ 证据链 │ │
└───────────┬─────────────────────────┴─────────────┘
│
┌────────────────────┼────────────────────┐
▼ ▼ ▼
┌───────────────────┐ ┌──────────────┐ ┌───────────────────┐
│ MySQL 8.0 │ │ Redis 7 │ │ PostgreSQL+PostGIS │
│ 用户/申请/日志 │ │ 可选限流存储 │ │ 矢量/栅格空间数据 │
└───────────────────┘ └──────────────┘ └───────────────────┘
监控栈:
┌──────────────┐ ┌──────────────┐ ┌──────────────────┐
│ Prometheus │───▶│ Grafana │◀───│ Loki + Promtail │
│ (指标采集) │ │ (可视化+告警) │ │ (日志聚合) │
└──────────────┘ └──────────────┘ └──────────────────┘
v3.0 交付与取证链路:
申请获批 ─▶ 个性化交付物 ─┬─ FID:128-bit 随机指纹(每次交付唯一)
├─ QR v2:Ed25519 + COSE_Sign1 签名(不含个人信息)
├─ 水印嵌入:矢量 D-QIM / 栅格 LSB 等
└─ artifact_root:SHA-256 产物哈希
│
▼ 授权下载
证据链事件流 ─▶ Hash Chain ─▶ 批次 Merkle Root ─┬─▶ OpenTimestamps(Bitcoin)
└─▶ EVM AnchorRegistry(演示·待部署)
泄露副本 ─▶ 取证上传 ─▶ 指纹比对 ─▶ 锁定交付记录(编号)→ 确认交付者 ─▶ 证据链核查
| 层级 | 技术 | 用途 |
|---|---|---|
| 前端 | Vue 3 + Composition API | 响应式 UI 框架 |
| Element Plus | 企业级 UI 组件库 | |
| Pinia | 状态管理 | |
| Vue Router | 路由守卫 + 懒加载 | |
| vue-i18n | 中英文国际化 | |
| Axios | HTTP 客户端 + 拦截器 | |
| Socket.IO Client | 实时通道客户端(当前未启用,消息走轮询) | |
| Leaflet | 地图渲染与瓦片加载 | |
| ECharts (vue-echarts) | 数据看板图表 | |
| three.js + three-globe | 3D 粒子首屏与数据流地球 | |
| 后端 | Flask + Flask-RESTful | REST API 框架 |
| Flask-JWT-Extended | JWT 认证 | |
| Flask-SocketIO | WebSocket 实时通道(threading 模式;Windows 下不启用) | |
| SQLAlchemy | ORM 双数据库绑定 | |
| Flask-Limiter | API 限流 | |
| rasterio / geopandas | 空间数据处理 | |
| qrcode / pyzbar | 二维码生成/提取 | |
| cryptography / cbor2 | Ed25519 + COSE_Sign1 / canonical CBOR | |
| blind_watermark | 盲水印算法(DWT-DCT-SVD) | |
| web3.py / eth-tester 可选 | EVM 锚定与合约测试 | |
| prometheus_client | 指标采集 | |
| 合约 | Solidity 0.8 | AnchorRegistry 锚定合约(演示 · 待 Sepolia 部署) |
| 数据库 | MySQL 8.0 | 业务数据 |
| PostgreSQL + PostGIS | 空间数据 | |
| Redis 7(可选) | 限流存储(缓存为进程内实现) | |
| 运维 | Docker + docker-compose | 容器化部署(可选,9 个服务) |
| Prometheus + Grafana | 监控 + 告警 + 可视化(2 块仪表盘) | |
| Loki + Promtail | 日志聚合 | |
| GitHub Actions | CI 四 job(含 a11y)+ CodeQL + gitleaks | |
| Ruff + ESLint + pre-commit | 代码规范与 Git Hooks |
- Python 3.11+
- Node.js 18+
- MySQL 8.0
- PostgreSQL(需启用 PostGIS 扩展)
- Redis(可选:仅用于限流存储;缓存层为进程内实现,无外部依赖)
cd testrealend
python -m venv .venv
# Windows: .venv\Scripts\activate
# macOS/Linux: source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # 编辑 .env 填写数据库配置
python app.py后端运行于 http://localhost:5003(首次启动自动建表;端口可用环境变量 PORT 覆盖)
cd testrealfrontol
npm install
cp .env.example .env # 默认连接 http://localhost:5003
npm run dev前端运行于 http://localhost:5173(端口被占用时自动顺延)
项目提供了完整的 Docker 编排(
docker-compose.yml、各服务Dockerfile);日常开发推荐在本机直接启动,如需容器化可一键启动全部服务:
docker-compose up -d启动后访问:
- 前端:http://localhost
- 后端 API:http://localhost:5003
- Grafana 监控:http://localhost:3000(账号密码请在部署时通过环境变量覆盖)
GeoData-Security-System/
├── testrealend/ # Flask 后端
│ ├── app.py # 应用入口(统一注册 133 个 API 资源)
│ ├── config.py # 环境配置
│ ├── crypto/ # COSE_Sign1(Ed25519) / canonical CBOR / QR v2 载荷 / 密钥管理
│ ├── delivery/ # 个性化交付(指纹生成、QR v2 渲染、产物哈希与 CIDv1)
│ ├── evidence/ # 证据链(Hash Chain / Merkle / OpenTimestamps / EVM 锚定)
│ ├── extension/
│ │ └── extension.py # Flask 扩展初始化
│ ├── model/ # SQLAlchemy 数据模型(34 个文件)
│ ├── resource/ # API 资源(含 forensics / batch_embed / 日志与统计导出)
│ ├── algorithm/ # 水印算法(矢量 D-QIM/legacy;栅格 5 种;鲁棒性实验引擎)
│ ├── utils/ # 缓存 / 指标 / WebSocket / 限流 / 审计日志工具
│ ├── tests/ # Pytest 测试套件(49 个 test_*.py / 739 个用例)
│ └── Dockerfile
│
├── testrealfrontol/ # Vue 3 前端
│ ├── src/
│ │ ├── main.js # 应用入口
│ │ ├── assets/styles/design-system.css # 双主题令牌体系(L1 色阶 + L2 语义)
│ │ ├── composables/useTheme.js # 主题切换与本地持久化
│ │ ├── locales/ # i18n(zh-CN / en-US,2600+ 键,完全对齐)
│ │ ├── router/index.js # 路由定义 + 守卫
│ │ ├── views/ # 路由视图(42 条路由,含 404 兜底)
│ │ ├── components/ # 通用组件(哈希文本 / 通知中心 / 交付链 / 图像对比…)
│ │ └── api/ # API 服务层(10 个模块)
│ └── Dockerfile
│
├── contracts/ # AnchorRegistry.sol + Sepolia 部署脚本
├── docker-compose.yml # 容器编排(9 个服务)
├── grafana/provisioning/ # Grafana 自动配置(2 块仪表盘 / 数据源 / 告警规则)
├── prometheus.yml # Prometheus 采集配置
├── loki-config.yml # Loki 日志配置
├── promtail-config.yml # Promtail 日志采集
├── .github/workflows/ # CI 四 job(含 a11y)+ CodeQL + gitleaks 等 5 个工作流
├── .pre-commit-config.yaml # Pre-commit Hooks
└── LICENSE
后端提供 RESTful API,主要接口如下:
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/register |
员工注册 |
| POST | /api/login |
登录(员工/管理员) |
| POST | /api/refresh-token |
刷新 Token |
| POST | /api/logout |
退出登录 |
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/submit_application |
提交数据申请 |
| GET | /api/get_applications |
获取申请列表 |
| PUT | /api/applications/{id}/withdraw |
撤回待审申请 |
| POST | /api/adm1_pass |
一级审批 |
| POST | /api/adm2_pass |
二级审批 |
| POST | /api/admin/batch_review |
批量审批 |
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/generate_watermark |
生成二维码水印 |
| POST | /api/embedding_watermark |
栅格水印嵌入(lsb / dwt / histogram / blind / iw_dct) |
| POST | /api/vector/extract |
提取水印 |
| GET | /api/raster_tiles/{id}/{z}/{x}/{y}.png |
栅格瓦片服务 |
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/forensics/verify |
样本验证与指纹定位(上传文件或 qr_text) |
| POST | /api/forensics/trace |
输出二维码溯源链路 |
| GET | /api/forensics/deliveries |
交付台账(四维检索:用户 / 指纹 / 编号 / 时间段) |
| GET | /api/forensics/deliveries/{uuid} |
交付详情(含证据链状态与锚定信息) |
| GET | /api/forensics/deliveries/stats |
交付统计(状态 / 算法 / 锚定桶 / 链健康度) |
| POST | /api/forensics/anchor/build |
构建批次锚定(默认 OpenTimestamps,可选 EVM) |
| GET | /api/forensics/anchors |
锚定批次列表 |
| GET | /api/forensics/keyinfo |
公钥信息(kid → 公钥指纹与 public_key_hex,供独立验签) |
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/watermark/batch_embed_jobs |
创建批量嵌入作业 |
| GET | /api/watermark/batch_embed_jobs |
作业列表 |
| GET | /api/watermark/batch_embed_jobs/{uuid} |
作业进度与逐项结果 |
| GET | /api/admin/logs/export |
审计日志 CSV 导出 |
| GET | /api/admin/download_stats |
下载统计(看板数据源) |
| GET | /api/admin/download_stats/export |
下载统计 CSV 导出 |
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/robustness/run |
运行实验(矩阵 / 强度扫描,矢量或栅格) |
| GET | /api/robustness/runs |
历史运行列表 |
| GET | /api/robustness/runs/{id} |
运行详情(含汇总与强度档位) |
| GET | /api/robustness/attacks/meta |
攻击实现源码(供前端源码抽屉) |
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/health |
健康检查(探测数据库连接) |
| GET | /metrics |
Prometheus 指标 |
| GET | /api/admin/dashboard |
管理员数据看板 |
| GET | /api/admin/logs |
操作审计日志 |
| POST | /api/recall/create |
创建数据召回提案 |
| POST | /api/recall/{id}/vote |
召回投票 |
正常安装依赖后即可在
/apidocs/查看交互式 Swagger API 文档(依赖缺失时自动跳过)。
-
后端测试:
testrealend/tests/739 个用例(49 个test_*.py;pytest --collect-only实测;基于文件型 SQLite,无需外部数据库),覆盖指纹交付、证据链防篡改、取证定位(3 用户 E2E)、EVM 锚定(eth-tester)等核心链路cd testrealend python -m pytest -
CI 流水线(GitHub Actions):
backend(Ruff + 全量 Pytest 硬门禁,失败即红)、frontend(ESLint--max-warnings 0硬门禁 + 构建)、docker(镜像构建 + 容器冒烟:app factory 路由装配 / gunicorn/api/health/nginx -t)、a11y(Playwright + axe-core 无障碍门禁,critical/serious 违规即红)四个 job -
安全扫描:CodeQL(Python / JavaScript / TypeScript)+ gitleaks 密钥扫描 + OpenSSF Scorecard
-
无障碍审计:axe-core 全站 40 路由自动化审计(main+nav 地标 / 图标钮可访问名 / AA 对比度 / 恰一 h1);critical 清零,全站仅余 1 处带证据链的留档项(
information_add上传列表,EP 上游 DOM 结构缺陷) -
视觉与动效验证方法学:像素级 diff / rAF 帧剖面 / 几何断言——骨架屏、侧栏、主题令牌升级均按此验证
-
规范与钩子:Ruff(lint + format)、ESLint、pre-commit hooks
- 后端:容器镜像使用 Gunicorn 托管(完整命令见
testrealend/Dockerfile);也可直接python app.py运行(内置线程化服务器,适合单机/演示环境) - 前端:
npm run build后将dist/交给 Nginx 托管;仓库 Compose 中的前端容器已内置该配置(/api反向代理到后端) - 消息通道说明:前端当前使用 HTTP 轮询(聊天/通知);后端 Socket.IO 采用 threading 模式、Windows 下不初始化——如后续启用多进程实时通道,需外接消息队列(当前未内置)
docker-compose up -d --build # 启动全部服务
docker-compose logs -f backend # 查看后端日志
docker-compose down # 停止全部服务- Fork 本仓库
- 创建功能分支:
git checkout -b feature/你的功能 - 提交更改:
git commit -m 'feat: 添加某个功能' - 推送分支:
git push origin feature/你的功能 - 提交 Pull Request
建议先安装 pre-commit 钩子(配置见
.pre-commit-config.yaml):pip install pre-commit && pre-commit install
本项目基于 MIT License 开源。
为地理空间数据安全而生