# 信息安全系统测评 **Repository Path**: cloud-lumiere/cryptography-evaluation ## Basic Information - **Project Name**: 信息安全系统测评 - **Description**: 基于 Flask 的密码算法安全性与性能综合测评 Web 平台。支持正确性、结构性、随机性、性能四类测试,预置 SM3/SM4/ZUC算法,支持注册自定义算法。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-06 - **Last Updated**: 2026-06-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 密码方案测评平台 基于 Flask 的密码算法安全性与性能综合测评 Web 平台。支持正确性、结构性、随机性、性能四类测试,预置 SM3/SM4/ZUC 算法,支持注册自定义算法。 ## 快速启动 ```bash # 安装依赖 pip install -r requirements.txt # 启动服务 python app.py # 访问 http://127.0.0.1:5000 ``` 启动后在首页选择测试类型,进入对应测试页面后可配置数据量参数(正确性:互逆轮数;结构性:样本量;随机性:比特数),然后选择算法运行测试。 ## 依赖 | 依赖 | 版本 | 用途 | |------|------|------| | Flask | >= 2.0 | Web 框架 | | numpy | >= 1.20 | 数值计算 | | scipy | >= 1.7 | 统计检验 | ## 四类测试 ### 正确性测试 - 已知答案测试 (KAT) — 对比标准测试向量验证加密/解密/密钥流输出 - 加解密互逆性测试 — 随机明文加密后解密,验证一致性,可配置测试轮数 (10~1000轮) - 边界与异常测试 — 空输入、单字节、全0/全1、错误长度密钥/IV 分组密码: 8个等价类(标准随机、零值密钥、全一密钥、零值明文、全一明文、单比特密钥、单比特明文、双零边界) 序列密码: 6个等价类(标准随机、零值密钥、全一密钥、零值IV、全一IV、单比特密钥) ### 结构性测试 - 明密文独立性 — 检验明文与密文之间无统计相关性,可配置样本量 (1千~10万) - 扩散性(雪崩效应) — 翻转明文/密钥单比特,检验密文差异分布 - 密钥/IV 相关性 — 检验密钥流与密钥/IV 的独立性 - 帧相关性 — 检验不同帧密钥流的独立性 ### 随机性测试(NIST 风格) - 单比特频数检测 - 自相关检测 - 扑克检测 - 重叠子序列检测 - 游程检测与游程分布 - 支持 10万~200万 bit 样本量选择 - 总比特数自动分为 10 组样本,每组独立运行全部 7 项检验,逐项计算通过率 - 结果展示通过率汇总条(各测试通过情况 + 百分比进度条),每项测试显示通过率 - 支持高级配置:自定义密钥/IV/明文模式(随机、全零、全一、有序、自定义十六进制),用于检验特殊输入下的随机性表现 - 支持上传 `.txt`(01字符串)或 `.bin`(原始二进制)文件,直接对外部数据进行随机性检测,无需算法参与 ### 性能测试 - 吞吐量 (MB/s) - 平均延迟 (ms) - 每秒操作数 - 覆盖 16B / 256B / 4KB / 64KB 多数据量级 ## 可配置数据量参数 | 测试类型 | 参数 | 可选值 | 默认 | 说明 | |---------|------|--------|------|------| | 正确性测试 | 互逆性测试轮数 | 10 / 50 / 100 / 500 / 1000 | 100 | 更多轮数提高可靠性,增加耗时 | | 结构性测试 | 样本量 | 1千 / 5千 / 1万 / 5万 / 10万 | 5千 | 更大样本量提供更稳定统计结论 | | 随机性测试 | 样本比特数 | 10万 / 20万 / 50万 / 100万 / 200万 | 10万 | 更多比特提供更可靠的随机性评估 | | 随机性测试 | 样本组数 | 5 / 10 / 20 / 50 / 100 | 10 | 总数据量均分为多组,每组独立运行全部检验 | | 随机性测试 | 显著水平 α | 0.001 / 0.01 / 0.05 / 0.1 | 0.01 | P-value < α 视为未通过,α 越小通过标准越严格 | | 随机性测试 | 输入数据模式 | 随机 / 全零 / 全一 / 有序 / 自定义hex | 随机 | 自定义密钥/IV/明文生成模式,检验特殊输入下的随机性 | | 随机性测试 | 外部数据导入 | .txt(01字符串) / .bin(原始二进制) | — | 上传外部比特数据直接检测,无需算法参与 | 使用NIST推荐的通过阈值:threshold = n × (1 - α - 3 × √(α×(1-α)/n)) ## 预置算法 | 算法 | 类型 | 标准 | |------|------|------| | SM3 | 哈希函数 | GB/T 32905-2016 | | SM4 | 分组密码 | GB/T 32907-2016 | | ZUC | 序列密码 | GB/T 33133-2016 | ## 注册新算法 符合**GM/T 0018 和 GM/T 0019 标准** ### 接口要求 所有算法需实现一个类,类名与注册名称一致,并实现以下方法: **通用方法(必须):** ```python def get_info(self) -> dict: return { "name": "算法名称", # 字符串 "type": "block", # "block" / "stream" / "hash" "block_size": 128, # 块大小(位),分组密码填写 "key_size": 128, # 密钥大小(位) "iv_size": 0, # IV大小(位),序列密码填写 "description": "算法描述", } ``` **分组密码(type=block):** ```python def encrypt(self, plaintext: bytes, key: bytes) -> bytes: """加密单个块,plaintext/key 均为块大小/密钥大小对应字节数""" def decrypt(self, ciphertext: bytes, key: bytes) -> bytes: """解密单个块,建议实现;未实现时使用 SM4 兼容适配器""" ``` **序列密码(type=stream):** ```python def generate_keystream(self, key: bytes, iv: bytes, length: int) -> bytes: """生成指定字节长度的密钥流""" ``` **哈希函数(type=hash):** ```python def hash(self, message: bytes) -> bytes: """计算消息摘要,返回 32 字节""" ``` ### 注册方式 访问 `/register` 页面,支持: 1. 上传 `.py` 文件 2. 粘贴代码 3. 选择算法类型 ## 标准测试向量 ### 导入方法 1. 进入正确性测试页 `/tests/correctness` 2. 点击算法对应的「管理向量」 3. 粘贴 JSON 或上传 `.json` 文件 ### 格式说明 **分组密码:** ```json [ { "key": "000102030405060708090a0b0c0d0e0f", "plaintext": "00112233445566778899aabbccddeeff", "ciphertext": "69c4e0d86a7b0430d8cdb78070b4c55a" } ] ``` **序列密码:** ```json [ { "key": "000102030405060708090a0b0c0d0e0f", "iv": "000102030405060708090a0b0c0d0e0f", "length": 32, "keystream": "14b6c4..." } ] ``` 所有 hex 字段为小写十六进制字符串,`length` 为密钥流字节数。 ## 项目结构 ``` testsuite/ ├── app.py # Flask 主应用(路由、测试适配、任务引擎、向量管理、重置) ├── correct_test.py # 正确性测试框架(KAT、互逆、边界、压力) ├── structural_tests.py # 结构性测试框架(独立性、扩散、相关性) ├── randomness_tests.py # 随机性测试框架(NIST风格统计检验) ├── performance_test.py # 性能测试模块(吞吐量/延迟基准) ├── sm3.py # SM3 哈希算法插件 ├── sm4.py # SM4 分组密码插件 ├── zuc.py # ZUC 序列密码插件 ├── aes_128.py # AES-128 分组密码样例 ├── requirements.txt # Python 依赖 ├── templates/ # Jinja2 模板文件 │ ├── base.html # 基础布局 + 导航 │ ├── index.html # 首页(四类测试入口卡片) │ ├── test_hub.html # 测试页面(选算法→运行→进度→结果→导出) │ ├── algorithm.html # 算法信息页 │ ├── vectors.html # 测试向量管理页 │ ├── register.html # 注册新算法 │ ├── history.html # 测试历史记录 + 重置 │ └── about.html # 平台说明与接口文档 ├── data/ # 持久化数据 │ ├── algorithms.json # 用户注册算法记录 │ ├── test_history.json # 测试历史记录 │ └── test_vectors/ # 各算法标准测试向量 └── user_algos/ # 用户上传算法源码 ``` ## 页面路由 | 路由 | 功能 | |------|------| | `/` | 首页,四类测试入口卡片 | | `/tests/` | 测试页面,选择算法并运行测试 | | `/algorithm/` | 算法信息页 | | `/vectors/` | 测试向量管理(上传/查看/删除) | | `/register` | 注册新算法 | | `/history` | 测试历史记录,含重置按钮 | | `/about` | 平台说明、接口规范、联系方式 | ## API 端点 | 方法 | 路径 | 说明 | |------|------|------| | POST | `/api/test/start` | 启动异步测试任务,返回 task_id | | GET | `/api/task/` | 轮询任务状态、进度、结果 | | GET | `/api/task//export?format=json\|txt` | 查看报告 | | GET | `/api/task//download?format=json\|txt` | 下载报告文件 | | GET | `/api/algorithms` | 列出所有已注册算法 | | GET | `/api/history` | 获取测试历史 | | GET/POST/DELETE | `/api/vectors/` | 管理测试向量 | | POST | `/api/reset` | 重置平台数据(仅保留 SM3/SM4/ZUC) | ## 任务流程 ``` 前端点击「运行测试」 → POST /api/test/start 创建任务 → 后台线程执行测试(带进度回调) → 前端每 500ms 轮询 GET /api/task/ → 显示进度条、耗时、当前步骤 → 任务完成后展示结果表格 → 可导出/下载 JSON 或 TXT 格式报告 ``` ## 报告导出 支持两种格式: - **JSON** — 结构化数据,含测试类型、算法名、耗时、逐项结果 - **TXT** — 可读文本,含分隔线和详细状态 ## 重置 点击历史记录页的「重置平台数据」按钮,将: - 清除所有测试历史记录 - 删除所有用户注册算法 - 删除所有导入的测试向量 - 恢复为预置算法 SM3 / SM4 / ZUC