项目参考AAAI Association for the Advancement of Artificial Intelligence
研究背景与意义:
随着信息技术的迅猛发展,图像的传输和存储已经成为现代社会中不可或缺的一部分。然而,随着互联网的普及和信息的快速传播,图像的安全性问题也日益凸显。为了保护图像的机密性和完整性,图像加密解密技术应运而生。
传统的图像加密解密方法主要基于数学算法,如DES、AES等。这些算法在一定程度上能够保护图像的安全性,但是随着计算机技术的发展,这些算法的安全性逐渐受到挑战。因此,研究人员开始寻找更加安全可靠的图像加密解密方法。
混沌算法作为一种新兴的加密解密技术,具有很大的潜力。混沌算法是一种非线性动力学系统,具有高度的敏感性和不可预测性。它的主要特点是初始条件的微小变化会导致系统输出的巨大变化,这使得混沌算法在加密解密领域具有很大的优势。
基于混沌算法的图像加密解密系统具有以下几个方面的意义:
首先,基于混沌算法的图像加密解密系统能够提供更高的安全性。混沌算法的不可预测性使得攻击者很难通过分析加密算法的数学模型来破解加密图像。这样一来,图像的机密性就能够得到更好的保护。
其次,基于混沌算法的图像加密解密系统能够提供更高的效率。混沌算法的并行性和高速性使得加密解密过程可以在较短的时间内完成,从而提高了系统的效率。
此外,基于混沌算法的图像加密解密系统还具有较强的适应性和灵活性。混沌算法可以根据不同的需求和应用场景进行调整和优化,从而实现更加灵活的加密解密方式。
最后,基于混沌算法的图像加密解密系统对于图像信息的传输和存储具有重要的意义。通过使用混沌算法对图像进行加密,可以有效地防止图像在传输和存储过程中被非法获取和篡改,从而保证图像信息的完整性和可靠性。
综上所述,基于混沌算法的图像加密解密系统具有较高的安全性、效率、适应性和灵活性,对于保护图像的机密性和完整性具有重要的意义。随着混沌算法的不断发展和优化,相信基于混沌算法的图像加密解密系统将在信息安全领域发挥越来越重要的作用。
基于混沌算法的图像加密解密系统_哔哩哔哩_bilibili
混沌理论是美国气象学家Lorenz在1963年发表的《确定性非周期流》中提出的。它被看作是一种整个系统看似不确定,然而却有规律可循的伪随机系统。只有在初始条件完全一致的情况下,混沌系统的结果才能得到复现。不过,学术界在很长一段时间里都对它没有一个公认的数学定义。直到1975年,在一篇由李天岩同其导师合作发表的著作中对混沌系统给出了清晰明确的数学上的定义,从此开辟了混沌系统研究的新篇章。混沌系统具备遍历和不可预测等特性,符合密码学对加密算法的要求,能够应用于图像加密等众多加密领域。本节从混沌的定义、特征、判定和常见的混沌系统四个方面介绍关于混沌的相关知识。
对混沌的研究一直处于探索阶段,许多学者通过结合自己的研究方向和领域,对混沌进行了不同角度的解释和定义。目前,在学术界使用较多、认可度高的是Li-Yorke(李天岩-约克)定义l67和Devaney(德瓦尼)定义[68的,两者具体的定义内容如下:
(1) Li-Yorke(李天岩-约克)定义:
1975年,李天岩同其导师合作发表了一篇名为《Period three implies chaos》的论文对混沌给出了较为准确、完整的定义,并被称为Li-Yorke定义且被后续学者广泛使用。该定义具体内容为:若f(x)在闭区间D上连续自映射且满足下列条件:
其中,sup为上确界,inf为下确界。
那么f(x)就是混沌的。
(2)Devaney(德瓦尼)定义:
与Li-Yorke定义方法不同的是,Devaney定义使用了拓扑理论对混沌进行解释和描述。其定义为:若存在度量空间z,当度量空间z上存在一个连续自映射f时,如果f满足下列条件:
混沌系统是一种基于数学原理的伪随机系统,其运动非常复杂,毫无规律可言,具有初值敏感、长期不可预测、内在随机等以下特性:
(1)初值敏感性:当给定的两个系统初始值不同时,即使两个输入的初始值差距极小,通过混沌系统的演化后,两个初始值将产生截然不同的结果,结果值的差距可能很大,这就是所谓的“雪崩效应”。尽管是极微小的初始数值差异,也会引发极大的结果值不同。
(2)长期不可预测性:由于混沌系统的初值敏感性。
class HomomorphicsEncryption:
def __init__(self, alpha, beta, gamma):
"""
图像同态加密
参数:
alpha: 光照增益参数 (浮点数)
beta: 反射系数参数 (浮点数)
gamma: 对数变换参数 (浮点数)
"""
self.alpha = alpha
self.beta = beta
self.gamma = gamma
def decrypt(self, encrypted_image):
"""
解密图像
参数:
encrypted_image: 加密的图像 (NumPy数组)
返回值:
decrypted_image: 解密后的图像 (NumPy数组)
"""
# 将加密图像转换为浮点型
encrypted_image = encrypted_image.astype(np.float32)
# 反转反射系数调整
image = (encrypted_image - self.gamma) / self.alpha
# 对数反变换
log_image = np.log1p(image)
# 傅里叶变换
fft_image = np.fft.fft2(log_image)
# 中心化频谱
shifted_fft = np.fft.fftshift(fft_image)
# 构建高通滤波器
rows, cols = image.shape[:2]
center_row, center_col = rows // 2, cols // 2
filter = np.zeros((rows, cols), dtype=np.float32)
filter[center_row-10:center_row+10, center_col-10:center_col+10] = 1
# 应用滤波器
filtered_fft = shifted_fft * filter
# 逆变换
shifted_ifft = np.fft.ifftshift(filtered_fft)
ifft_image = np.fft.ifft2(shifted_ifft)
# 反对数变换
decrypted_image = np.expm1(np.real(ifft_image))
# 转换为8位无符号整型
decrypted_image = np.clip(decrypted_image, 0, 255).astype(np.uint8)
return decrypted_image
该程序文件名为decrypt_image.py,主要功能是对加密图像进行解密。
程序首先导入了cv2、HomomorphicEncryption和ChaosImageCryptor模块。
HomomorphicsEncryption类的构造函数接收三个参数alpha、beta和gamma,分别表示光照增益参数、反射系数参数和对数变换参数。
decrypt方法接收一个加密的图像作为参数,返回解密后的图像。在解密过程中,首先将加密图像转换为浮点型,然后进行反转反射系数调整,再进行对数反变换,接着进行傅里叶变换,并对频谱进行中心化处理。然后构建一个高通滤波器,应用该滤波器对频谱进行滤波。最后进行逆变换和反对数变换,并将解密后的图像转换为8位无符号整型。
接下来,程序定义了一个key变量,用于加密和解密过程中的密钥。encrypted_image_path和decrypted_image_path分别表示加密图像和解密后的图像的路径。
程序使用cv2模块读取加密图像,并创建了一个ChaosImageCryptor对象cryptor。
然后创建了一个HomomorphicEncryption对象decryptor,使用decrypt方法对加密图像进行解密,并将解密后的图像保存到decrypted_image_path路径。
接着使用cv2模块读取解密后的图像,并调用cryptor对象的decrypt_image方法对图像进行进一步解密。
最后,将最终解密后的图像保存到decrypted_image_path路径。
class HomomorphicsEncryption:
def __init__(self, alpha, beta, gamma):
self.alpha = alpha
self.beta = beta
self.gamma = gamma
def encrypt(self, image):
image = image.astype(np.float32)
log_image = np.log1p(image)
fft_image = np.fft.fft2(log_image)
shifted_fft = np.fft.fftshift(fft_image)
rows, cols = image.shape[:2]
center_row, center_col = rows // 2, cols // 2
filter = np.zeros((rows, cols), dtype=np.float32)
filter[center_row-10:center_row+10, center_col-10:center_col+10] = 1
filtered_fft = shifted_fft * filter
shifted_ifft = np.fft.ifftshift(filtered_fft)
ifft_image = np.fft.ifft2(shifted_ifft)
decrypted_image = np.expm1(np.real(ifft_image))
encrypted_image = self.alpha * image + self.beta * decrypted_image + self.gamma
......
这个程序文件名为encrypt_image.py,它包含了一个名为HomomorphicsEncryption的类和一些其他的函数和变量。
HomomorphicsEncryption类有一个构造函数,它接受三个参数alpha、beta和gamma,用于图像同态加密。类中还有一个encrypt方法,用于对输入的图像进行加密操作。
程序的主要逻辑是:
整个程序的目的是对指定路径的图像进行同态加密,并将加密后的图像保存到指定路径。
class HomomorphicEncryption:
def __init__(self, key):
self.key = key
def encrypt(self, image):
encrypted_image = np.add(image, self.key) % 256
return encrypted_image
def decrypt(self, encrypted_image):
decrypted_image = np.subtract(encrypted_image, self.key) % 256
return decrypted_image
这个程序文件名为homomorphic_encryption.py,它实现了一个名为HomomorphicEncryption的类。该类有一个构造函数__init__,接受一个参数key作为密钥,并将其存储在实例变量self.key中。
该类还有两个方法encrypt和decrypt,用于加密和解密图像。encrypt方法接受一个参数image作为要加密的图像,它将图像的每个像素值与密钥相加,并对结果取模256,然后返回加密后的图像。decrypt方法接受一个参数encrypted_image作为要解密的图像,它将加密图像的每个像素值与密钥相减,并对结果取模256,然后返回解密后的图像。
class PaillierEncryption:
def __init__(self, public_key, private_key=None):
self.public_key = public_key
self.private_key = private_key
def encrypt_image(self, image):
encrypted_image = [[self.public_key.encrypt(int(pixel)) for pixel in row] for row in image]
return encrypted_image
def decrypt_image(self, encrypted_image):
decrypted_image = [[self.private_key.decrypt(pixel) for pixel in row] for row in encrypted_image]
return decrypted_image
这个程序文件名为paillier_encryption.py,它实现了一个PaillierEncryption类。该类的构造函数接受一个公钥(public_key)和一个可选的私钥(private_key)作为参数。
该类有两个方法:
该程序使用phe库中的paillier模块来实现Paillier加密算法。Paillier加密算法是一种公钥加密算法,可以对整数进行加密和解密操作。
整体功能和构架概述:
该图像加密解密系统的整体功能是对图像进行加密和解密操作。系统使用了混沌算法、同态加密和Paillier加密算法来实现图像的安全传输和保护。系统包含了四个主要的程序文件:decrypt_image.py、encrypt_image.py、homomorphic_encryption.py和paillier_encryption.py。其中,decrypt_image.py和encrypt_image.py分别用于图像的解密和加密操作,homomorphic_encryption.py实现了同态加密算法,paillier_encryption.py实现了Paillier加密算法。另外,ui.py是一个用户界面文件,用于提供用户友好的图形界面来操作图像加密解密系统。
下表整理了每个文件的功能:
文件名 | 功能 |
---|---|
decrypt_image.py | 对加密图像进行解密操作 |
encrypt_image.py | 对图像进行加密操作 |
homomorphic_encryption.py | 实现同态加密算法 |
paillier_encryption.py | 实现Paillier加密算法 |
ui.py | 提供用户界面,用于操作图像加密解密系统 |
图像隐写可以追溯到20世纪90年代,当时互联网的使用正在快速增长,数字图像成为当时主要的信息传输方式之一。在这种情况下,图像隐写被广泛应用于隐藏秘密图像信息,以避免被未经授权的人员拦截和访问,提高秘密图像信息的安全性以及保障传输过程的安全性。随着网络安全和信息安全的不断提高,越来越多的学者对其进行深入的研究,图像隐写也变得更加复杂和高级。
图像隐写是一种将秘密图像信息嵌入到载体图像中的技术,同时嵌入秘密信息的载密图像与载体图像在视觉上几乎没区别。隐写术是一种隐藏信息的方法,它不同于加密,加密是将数据转换为不可读或无意义的乱码数据形式,而隐写术是将数据隐藏在其他数据中,以使其在不引起怀疑的情况下传输。图像隐写可以在许多领域得到应用,例如数字水印、安全通信、网络安全等。
图像隐写是一种将秘密图像信息嵌入到数字图像中的技术,以下是一般的图像隐写过程:
图像发送方:
像隐写方案对于输入的秘密图像要求的大小和格式,这个过程中可对秘密图像进行加密:
(2)选择载体图像:从图像库选择一张数字图像作为载体图像,它将被用来隐藏秘密图像;
(3)选择嵌入算法:选择一种图像隐写算法,如LSB、HUGO等,它将根据嵌入算法的规则将秘密图像嵌入到载体图像中,或选择通过神经网络模型作为嵌入模型,如StegGAN、DCGAN、Unet等:
(4)嵌入秘密信息:使用选择的图像隐写算法将秘密信息嵌入到载体图像中。通过这对载体图像的像素进行修改,嵌入秘密图像信息,得到用于传输的载密图像,载密图像仍保留载体图像的视觉效果和质量:
(5)图像发送:将嵌入秘密图像信息的载密图像在公开信道发送给图像接收方。
(1)接收载密图像:从公开信道接收传输过来的载密图像:
(2)提取秘密信息:使用相对应的提取算法将嵌入在载密图像中的秘密图像提取出来。提取算法需要与嵌入算法兼容,以确保获得准确的提取图像:
(3)解密秘密信息:如果在对秘密图像进行嵌入操作前,对秘密图像进行了加密操作,则提取出秘密图像后需要使用相应的密钥对其进行解密,以获得原始的秘密图像;
(4)评估嵌入和提取效果:评估嵌入秘密信息后的载密图像和提取得到的原始秘密图像,以确保秘密图像隐藏可以被正确提取。
当设计出一个图像隐写方案后,为了验证其有效性,需要对所提图像隐写方案进行评价,以下是图像隐写方案常见的主要评价指标:
(1)安全性:图像隐写方案的安全性是评价其优劣的重要指标之一。一个安全的图像隐写方案应该能够抵御各种攻击,例如隐写分析攻击、恶意插入攻击、盲水印攻击等。
(2)容量:图像隐写方案的容量是指能够隐藏在载体图像中的秘密信息量大小。一个好的图像隐写方案应该具有高容量,能够在不影响图像质量的前提下嵌入尽可能多的信息。
(3)隐蔽性:图像隐写方案的隐蔽性是指在图像中嵌入的信息是否能够被发现。一个好的图像隐写方案应该具有高隐蔽性,即嵌入的信息不容易被人发现,并且载密图像在整个传输过程中不容易被发觉。
总的来说,一个好的图像隐写方案应该具有高安全性、高容量、高隐蔽性。评价图像隐写方案的优劣需要从多个方面综合考虑,而不是单一的指标。
本小节提出的混沌系统的递归置乱加密算法是使用混沌系统生成序列,并基于该序列来对图像进行置乱操作。本研究选择的是一维Logistic 混沌系统,混沌系统的原理在第二章有所介绍,这里不再赘述。在这个基于混沌系统的置乱加密过程中引入递归的思想,递归地对图像进行置乱加密操作。
传统的置乱加密算法通常通过同等对待某些级别的数据来加密整个图像,例如位级、两位级(DNA级)、像素级和/或块级数据。重复加密过程,直到所有数据至少被加密一次。众所周知,很多重复的任务都可以通过引入递归的思想来解决。然而,现有的加密算法很少考虑使用这种策略进行加密。在这里,我们提出了一种基于递归思想的图像置乱加密算法。与传统的加密算法相比,基于递归的置乱加密算法可以增加加密的复杂度,通过递归调用,可以在同一个加密算法内部多次对数据进行处理,从而增加加密的复杂度,提高破解的难度;基于递归的置乱加密算法可以实现分层加密,递归加密可以将加密算法分成多层,每层的加密方式不同,从而增加破解的难度。
为了解决秘密图像信息泄露的问题,提高图像隐写模型的安全性。本小节所提的图像隐写方案参考该博客的方案,进行简化,首先将要隐藏的秘密图像通过所提出的基于混沌系统的递归置乱加密算法加密后,将载体图像和经加密后的秘密图像传入上一章节使用的基于Transformer模型架构中,通过该模型架构将经加密后的秘密图像信息嵌入到载体图像中,得到最终用于在公开信道传输的载密图像。接收方收到载密图像后,通过提取网络得到经加密后的秘密图像,再通过图像加密操作的逆操作就可以得到未进行图像加密前的秘密图像。由于秘密图像的内容信息在嵌入到载体图像之前经过了加密,因此秘密图像信息的机密性得到了更好的保护。即使图像隐写模型的过程被破解,攻击者仍需破解本小节所提出的基于混沌系统的递归置乱图像加密才能得到秘密图像信息。将图像加密算法与图像隐写模型结合,进一步提高了图像传输的安全性,保证了图像信息传输的过程和传输的信息,同时增强了图像隐写方案中用于在公开信道传输的载密图像的隐蔽性,即便攻击者截获了载密图像并破解了图像隐写的操作过程,但因为得到的是一张乱码图像,就会觉得自己没有成功破解图像隐写的过程。图显示了本小节提出的基于Transformer和混沌递归加密的图像隐写模型的架构图。
下图完整源码&环境部署视频教程&自定义UI界面
参考博客《基于混沌算法的图像加密解密系统》
[1]谢国波,朱润盈.复合级联混沌的彩色图像加密算法[J].计算机工程与应用.2018,(8).DOI:10.3778/j.issn.1002-8331.1612-0045 .
[2]赵锋,吴成茂.自编码和超混沌映射相结合的图像加密算法[J].计算机辅助设计与图形学学报.2016,(1).DOI:10.3969/j.issn.1003-9775.2016.01.015 .
[3]董虎胜,陆萍,马小虎.基于CNN超混沌系统与扩展ZigZag的图像加密算法[J].计算机应用与软件.2013,(5).DOI:10.3969/j.issn.1000-386x.2013.05.038 .
[4]Cheng-Hung Chuang.A Steganography-Based Optical Image Encryption System Using RGB Channel Integration[J].电子科技学刊.2013,(1).DOI:10.3969/j.issn.1674-862X.2013.01.002 .
[5]Jinyuan Liu,Yong Wang,Qi Han,等.A Sensitive Image Encryption Algorithm Based on a Higher-Dimensional Chaotic Map and Steganography[J].International Journal of Bifurcation & Chaos.2022,32(1).DOI:10.1142/S0218127422500043 .
[6]Meng Lingzhuang,Liu Lianshan,Tian Gang,等.An adaptive reversible watermarking in IWT domain[J].Multimedia tools & applications.2020,80(1).711-735.DOI:10.1007/s11042-020-09686-9 .
[7]Jiming Zheng,Zheng Luo,Zhirui Tang.An Image Encryption Algorithm Based on Multichaotic System and DNA Coding[J].Discrete dynamics in nature & society.2020.2020DOI:10.1155/2020/5982743 .
[8]Xintao Duan,Kai Jia,Baoxia Li,等.Reversible Image Steganography Scheme Based on a U-Net Structure[J].IEEE Access.2019.79314-9323.
[9]Zhang, Ru,Dong, Shiqi,Liu, Jianyi.Invisible steganography via generative adversarial networks[J].Multimedia tools and applications.2019,78(7).8559-8575.DOI:10.1007/s11042-018-6951-z .
[10]Gao, Guangyong,Wan, Xiangdong,Yao, Shimao,等.Reversible data hiding with contrast enhancement and tamper localization for medical images[J].Information Sciences: An International Journal.2017.385/386250-265.DOI:10.1016/j.ins.2017.01.009 .