混沌系统在图像加密中的应用(基于量子混沌映射的伪随机数发生器)
前言
量子混沌映射是量子力学中一种重要的现象,它起源于经典混沌理论的研究。经典混沌理论研究的是非线性动力学系统,发现了许多看似随机的现象。然而,量子力学中的数学结构与经典力学存在很大不同,导致经典混沌理论在量子力学中不适用。因此,量子混沌理论的研究成为了量子力学中的一个热门话题。
量子混沌理论的研究不仅在理论物理中有广泛应用,还在量子信息、量子计算、量子物理化学等领域中得到了实际应用。量子混沌映射是量子混沌理论中研究的重点之一,其本质是一种量子系统的动力学演化。量子混沌映射 和 经典混沌映射 的不同之处在于,量子混沌映射考虑了测量和量子干涉等量子效应。
一、伪随机数发生器
伪随机数生成器(PRNG)是一种算法,通过使用确定性算法生成看似随机的数字序列。它基于某个起始数字(种子)和一些算法来生成数字序列。因此,如果我们使用相同的种子和算法,它将生成相同的数字序列。因此,PRNG生成的序列虽然看起来随机,但实际上是可预测的,不是真正的随机数序列。
真随机数生成器(TRNG)是一种硬件设备,它基于真正的物理过程来生成随机数。例如,通过利用热噪声、光子发射或辐射源等不可预测的物理事件,TRNG生成完全随机的数字序列。TRNG生成的序列不受任何算法的影响,因此不可预测和不可重复。
但是许多真随机数生成器相对较慢。一个显而易见的解决方案是使用更安全的PRNG。量子混沌理论似乎是一个可以用来提高伪随机数生成器质量的工具。
二、量子混沌映射
量子 logistic 映射由Goggin等人于1990年提出。在他们大量的工作中,导出了一个耦合到一组振荡器和具有极低阶量子修正的 logistic 映射的踢量子系统。这个混沌映射由以下方程控制:
整个方程组只有两个参数,β 和 r 。
三、python代码仿真
按照公式(1)的差分方程组,我们选取 β=4.5,r=3.8,x0=0.1,y0=0,z0=0。迭代100次,可以看出 x 的时序图符合随机分布。
固定 r ,观察 β-x 的分岔图,可以看出 β > 3 左右就已经让系统进入混沌状态了,代码放下面了。
import matplotlib.pyplot as plt
import matplotlib.pylab as mpl
from math import exp
mpl.rcParams['font.sans-serif'] = ['Times new roman']
def sys(x, y, z, n):
for i in range(n):
x1 = r * (x - abs(x) * abs(x)) - r * y
y1 = (-y * exp(-2 * b) + exp(-b) * r * ((2 - x - x.conjugate()) * y - x * z.conjugate() - x.conjugate() * z))
z1 = (-z * exp(-2 * b) + exp(-b) * r * (2 * (1 - x.conjugate()) * z - 2 * x * y - x))
x = x1
y = y1
z = z1
listx.append(x) # 将结果写入列表
listy.append(y) # 将结果写入列表
listz.append(z) # 将结果写入列表
listt.append(i) # 将结果写入列表
if __name__ == '__main__':
listx = [] # 创建列表存放混沌序列 x
listy = [] # 创建列表存放混沌序列 y
listz = [] # 创建列表存放混沌序列 z
listt = [] # 创建列表存放时间序列
r = 3.8
b = 4.5
x0 = 0.1 # 初值设定
y0 = 0.0 # 初值设定
z0 = 0.0 # 初值设定
sys(x0, y0, z0, 1000) # 初值和迭代次数
# ----------------------------时序图----------------------------------
plt.figure(1) # 创建画布
plt.scatter(listt, listx, c="blue")
plt.xlabel("t")
plt.ylabel("x")
plt.show()
原文地址
对量子混沌感兴趣的读者,可以点击链接下载原文,里面有更加具体的介绍背景