Skip to content

About

曦源项目:Qiskit QRNG 后处理研究,偏置/死时间建模、一阶熵代理、Toeplitz 提取与可审计逐位回放。

Resources

Stars

65 stars

Watchers

0 watching

Forks

Repository files navigation

XiYuan-QRNG · 曦源量子随机数后处理

Tests and Aer replay

基于复旦大学曦源项目「量子真随机数生成」整理的研究代码:从 |+⟩ 测量出发,研究读出偏置与死时间相关性,进行一阶模型估熵、自适应压缩、Toeplitz 提取和统计回归验证。

本仓库重点是让每次后处理都能检查、回放和解释失败原因。默认运行 Qiskit Aer 经典仿真,用来验证算法流程;真实物理熵和密码学安全仍需要设备模型、原始采集证据及独立评估。

实际带噪声仿真结果

快速运行

Python 3.10+;本次在 Windows / Python 3.12 上实际测试。

git clone https://github.com/Yukinodot/XiYuan-QRNG.git
cd XiYuan-QRNG
python -m venv .venv
# Windows PowerShell: .\.venv\Scripts\Activate.ps1
# Linux/macOS: source .venv/bin/activate
python -m pip install -e ".[aer,plots]"

python -m xiyuan_qrng run --source aer-noisy --shots 8192 --simulator-seed 20261013 --detector-seed 20261013 --out runs/noisy --plots
python -m xiyuan_qrng replay runs/noisy

# 理想模式默认不注入死时间
python -m xiyuan_qrng run --source aer-ideal --shots 8192 --simulator-seed 20261013 --out runs/ideal --plots
python -m unittest discover -s tests -v

每次使用新的输出目录。模拟器与死时间种子固定时原始流可复现;提取种子每次由操作系统独立生成,所以重新 run 的输出可能不同。要逐位复现已保存的结果,请用 replay,它无需 Qiskit 或云端账户:

python -m pip install -e .
python -m xiyuan_qrng replay examples/noisy
python -m xiyuan_qrng replay examples/ideal

数据流程

flowchart LR
  A[H门 + Z测量 / 有序文件] --> B[读出偏置 + 可选死时间模型]
  B --> C[按块记录全部输入]
  C --> D[源诊断 + 一阶熵代理]
  D --> E[模型驱动的输出长度]
  E --> F[独立公开种子 / Toeplitz GF2]
  F --> G[保存全部候选输出]
  G --> H[偏置与自相关诊断]
  H --> I[通过诊断的研究输出]
  H --> J[失败隔离 / 无换种子重试]
Loading

原项目与本次整理

内容 来源与范围
偏置/死时间模型、估熵、Toeplitz、统计验证 用户提供的曦源项目 PPT 和原代码
历史阶段结果:8192 → 3575 bits PPT 第 11 张报告;原始比特与当时提取种子未提供,不能逐位重现
原脚本和 README 在 legacy/ 保留原始字节,SHA-256 见 来源记录
模块化、安装入口、单次提取、失败隔离、尾块记录 本次工程整理与修正
保存候选流/公开种子、清单校验、逐位回放、反例测试 本次新增的可复现机制
20 组 Aer 实验和图表 本次实际运行,详见 验证记录

项目材料将个人参与范围描述为数学基础、后处理与统计验证。仓库不据此声称独立完成了硬件随机源。个人面试 PPT 中的其他经历没有作为仓库内容发布。

可以核对的结果

下面是仓库中保存的两组新实验,均为 8192 shots、2048-bit 分块。它们与 PPT 历史结果分开记录,所有候选都保留,没有搜索更好看的提取种子。

本次保存的样例 Raw P(1) Exported P(1) Raw max|ACF| Exported max|ACF| 输出 bits
理想 Aer 0.496338 0.500463 0.020696 0.024791 5405
带噪声 Aer + 死时间 0.18 0.422485 0.492366 0.095836 0.051937 3406

样例输出全部通过所设工程诊断;理想源样例的最大自相关略有增加,有限样本下无需每个指标都单调变好。完整 20 组 CSV 保留全部结果。PPT 的历史结果另见 项目说明。

输出与接口

文件 用途
measurements.npy / raw.npy 逐 shot 测量流 / 注入可选死时间后的有序输入
candidate.npy 全部提取候选,包括诊断失败块
exported.npy / exported.bin 通过工程诊断的研究输出;大端位序,最后一字节补零
seeds.npz 每个提取块的独立公开 Toeplitz 种子
report.json 分块偏移、输入数、源诊断、模型估计、状态、有效输出位数、环境版本
manifest.json 数据和报告的 SHA-256,检查意外改动;不提供数字签名认证
diagnostics.png 从报告生成的统计图,需 --plots

真实设备导出的输入必须是按采集顺序排列的 0/1 一维 .npy。计数直方图不能还原时间相关性。输入文件模式默认不添加人工死时间:

python -m xiyuan_qrng run --source file --input ordered_bits.npy --out runs/device

IBM QPU 接口保留为可选实验路径,需要自己配置 IBM 账户,并同时明确传入 --backend 和 --submit-qpu;它会提交远程作业,可能消耗账户额度。本次未运行或验证真实 QPU。

python -m pip install -e ".[ibm]"
python -m xiyuan_qrng run --source ibm --backend YOUR_BACKEND --submit-qpu --shots 8192 --out runs/ibm

研究边界与继续方向

一阶统计代理无法识别所有高阶依赖。测试中的周期序列 00110011... 可以得到正的一阶估计,但它是确定性的;新增的 1–4 阶确定性转移筛查能识别这一反例,也不能替代通用熵评估。报告始终标记 entropy_certified: false。

独立公开种子适用于 Toeplitz 哈希研究;epsilon 和压缩裕量只是借用了提取器理论形式。没有成立的条件最小熵界,不能把它解释成已实现的安全参数。诊断通过、失败隔离以及输出分布图也不能证明密码学均匀性;隔离策略会改变保留样本的分布。模型与安全边界 解释这些限制。

后续可接入带时间戳的真实探测数据、校准死时间模型、使用条件最小熵分析和 NIST 的非 IID 熵评估,并研究有限样本下的提取率与失败率。

目录

src/xiyuan_qrng/    算法、采集、CLI、保存/回放、作图
tests/             GF(2) 独立对照、周期反例、失败隔离、尾块与完整性测试
scripts/           20 组固定协议实验
examples/          两组完整可回放样例 + 全部实验汇总
docs/              项目来源、数学机制、研究边界、验证记录
legacy/            用户提供的未修改原始材料

参考:Qiskit Aer 逐 shot memory、IBM primitives 输出、Leftover Hashing Against Quantum Side Information、NIST SP 800-90B。

About

曦源项目:Qiskit QRNG 后处理研究,偏置/死时间建模、一阶熵代理、Toeplitz 提取与可审计逐位回放。

Resources

Stars

65 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages