Skip to Content

密码学算法

概述

unitarylab_algorithms.cryptology 包含三个量子密码学算法,展示了量子计算在数论与隐藏周期问题上相对于经典方法的优势:

算法求解问题
Shor 质因数分解算法ShorAlgorithm合数 的质因数分解
离散对数算法DiscreteLogAlgorithm求解
Simon 周期掩码算法SimonAlgorithm 中找隐藏掩码

Shor 质因数分解算法

背景

Shor 算法以多项式时间复杂度将合数 分解为质因数。经典最优算法(如通用数域筛法)需要次指数时间,而 Shor 算法在量子计算机上可在 时间内完成。

该算法结合了:

  1. 基于量子傅里叶变换(QFT)的量子周期查找
  2. 从周期中提取质因数的经典后处理

导入

from unitarylab_algorithms.cryptology.shor.algorithm import ShorAlgorithm

.run() 参数

参数类型默认值说明
Nint待分解的合数(如 1521
methodstr'matrix'求解方法:'matrix''operator'
max_retriesint15最大重试次数(每次重试重新采样基底)

返回值

{ 'status': 'ok', 'circuit_path': '/path/to/shor_circuit.svg', 'plot': [{'format': 'txt', 'filename': 'shor_result.txt'}] }

示例

from unitarylab_algorithms.cryptology.shor.algorithm import ShorAlgorithm algo = ShorAlgorithm() result = algo.run(N=15) print(result['status']) # 'ok'

快速演示

from unitarylab_algorithms.cryptology.shor.algorithm import test test(N=15, method='matrix', max_retries=15)

注意事项

  • N 必须是具有至少两个不同质因子的合数。传入质数或 1 将导致算法失败。
  • 'matrix' 方法对小 通常更快;'operator' 方法更适用于较大线路。
  • 算法在单次 .run() 调用中会对基底 最多重采样 max_retries 次,直到成功提取周期。

离散对数算法

背景

离散对数问题:给定 ,求 使得 。这是许多经典密码系统(如 Diffie–Hellman、DSA)的安全基础。量子算法利用量子相位估计和连分数后处理高效求解。

导入

from unitarylab_algorithms.cryptology.discrete_log.algorithm import DiscreteLogAlgorithm

.run() 参数

参数类型说明
gint幂运算的底数
yint目标值
Pint模数(通常为质数)

返回值

{ 'status': 'ok', 'circuit_path': '/path/to/discrete_log_circuit.svg', 'plot': [{'format': 'txt', 'filename': 'discrete_log_result.txt'}] }

示例

from unitarylab_algorithms.cryptology.discrete_log.algorithm import DiscreteLogAlgorithm # 求解 3^x ≡ 6 (mod 7),答案为 x = 3 algo = DiscreteLogAlgorithm() result = algo.run(g=3, y=6, P=7) print(result['status']) # 'ok'

快速演示

from unitarylab_algorithms.cryptology.discrete_log.algorithm import test test(g=3, y=6, P=7)

Simon 周期掩码算法

背景

Simon 问题:给定函数 ,已知存在隐藏掩码 满足 ,求 。经典算法需要指数级查询次数,而 Simon 算法仅需 次量子查询加上经典高斯消元即可求解。

导入

from unitarylab_algorithms.cryptology.simon.algorithm import SimonAlgorithm

.run() 参数

参数类型默认值说明
sstr'1010'表示待查找隐藏掩码的二进制字符串

返回值

{ 'status': 'ok', 'circuit_path': '/path/to/simon_circuit.svg', 'plot': [{'format': 'txt', 'filename': 'simon_result.txt'}] }

示例

from unitarylab_algorithms.cryptology.simon.algorithm import SimonAlgorithm algo = SimonAlgorithm() result = algo.run(s='1101') print(result['status']) # 'ok'

快速演示

from unitarylab_algorithms.cryptology.simon.algorithm import test test(s='1101')

注意事项

  • s 必须是长度为 的二进制字符串(如 '1010' 对应 )。
  • 全零字符串 '0000' 是退化情形( 为单射),算法仍可运行,但结果无实际意义。
最后更新于