基于DWT密文域图像双水印算法①

2022-01-06 08:05张爱娈李子臣
计算机系统应用 2021年11期
关键词:密文加密载体

张爱娈, 李子臣

1(北京印刷学院 信息工程学院, 北京 102600)

2(北京印刷学院 数字版权保护技术研究中心, 北京 102600)

1 引言

随着信息社会的不断发展, 双水印[1]应用非常广泛, 比如多方验证, 为了保证一个数字合同的有效性与不可否认性, 需要同时嵌入甲方、乙方的水印信息, 只有提取并验证通过双方的水印信息才能确定该合同为有效合同, 同时合同中嵌入了双方的水印信息, 可以防止任何一方否认合同.网络安全交易[2]中, 为了防止Buyer恶意的传输拷贝购买的数字内容, 以及防止当Buyer发现数字内容的质量问题追溯到Seller时, Seller否认交易的现象发生, 交易过程中选择将Seller和Buyer的ID信息同时嵌入到数字内容中, 一旦发现交易中任何一方的不法行为都可以定位到双方的身份并进行仲裁处理.

数字水印研究的历史过程中, 单水印算法[3,4]是主要研究内容, 单水印算法功能明确, 但同时也存在功能单一的不足, 无法满足用户的多功能需求.双水印算法[5]因此产生.另外变换域水印算法是水印算法中研究重点之一, 嵌入水印时并不是直接对载体图像的像素值进行操作, 而是利用选定的变换方法, 对变换后的系数进行操作.因此, 变换域双水印[6]是数字水印算法的研究热点, 在现实中应用广泛.

2016 年Frattolillo提出了基于云计算平台多方水印算法[7], 文章中设计了一个安全的交易流程, 将水印嵌入的工作交由云计算平台来完成, 云平台利用公钥密码体制的加法同态性质对密文操作来嵌入水印, 这样可以防止半可信的第三方恶意的篡改载体信息与水印信息, 保障了数字内容的安全.但是公钥密码体制对数字内容加密解密, 效率不高, 影响交易效率.

基于小波变换的数字水印算法, 在嵌入水印之前,首先对载体图像进行小波变换, 小波变换之后图像的小波系数集分为低频系数与高频系数.其中, 低频信息[8]是图片的主要信息, 低频系数的改变对图像的影响很大; 高频信息[9]是图片的细节信息.小波系数一般较小,水印在这部分嵌入会很大程度地改变图像的小波系数,因此会影响嵌入水印后的图像质量.

基于以上的问题, 本文利用SM4分组密码[10]、Paillier公钥密码[11,12]以及DWT数字水印算法[13], 设计了一个新的数字图像双水印算法.首先将载体图像进行三层小波变换, 根据频带系数特性将各个频带系数集分为加密部分和水印部分, 加密部分利用SM4进行加密, 水印部分利用Paillier同态性质进行加密与水印嵌入, 与以往的完全用同态密码[7]进行加密的水印算法相比, 很好地规避了公钥密码算法低速性的缺点.

在水印嵌入时, 本文的算法将第一个用户的水印信息嵌入到第3层的HL3位置, 另一个用户的水印信息嵌入到LH3位置.嵌入水印时利用Paillier密码对LH3、HL3以及水印信息进行加密, 利用LSB水印算法[14]来嵌入水印, 将加密后的密文重组输出含双水印的密文图像.本文中将水印信息嵌入到中高频HL3和LH3的位置可以减少水印嵌入后对载体图像质量的影响, 同时结合LSB水印算法可以增加水印的不可见性.

在水印提取时, 可以在密文中分别提取第1个水印和第2个水印, 由于Paillier具有加法同态特性, 也可以在解密后的明文中分别提取第1个水印和第2个水印, 实现了解密和提取水印的交换.

实验结果表明, 相比其他双水印算法, 本文提出的算法在保证提取水印信息正确的前提下, 加解密速度快, 嵌入水印后的图像对水印的不可见性好.

2 双水印算法的分析研究

2.1 双水印概念

双水印的应用场景广泛, 下面根据双水印在本方案中的应用对其进行定义.本方案中双水印是在保证载体信息安全的前提下, 用户双方各自嵌入不同的水印信息到载体图像中.嵌入水印相当于在载体中设下标识, 用来表示载体的归属.

如图1所示, 在双水印嵌入模型中, 两个用户分两次嵌入水印信息w1和w2, 得到嵌入水印的图像.对嵌入水印的图像提取水印, 得到水印信息w1和w2.

图1 双水印模型

其中E为加密函数,I表示载体图像,w1与w2表示两个水印信息.用户1在密文中向载体图像I嵌入水印信息w1, 得到I1=E1(I,w1), 用户2在密文中向载体图像I1中嵌入水印信息w2, 得到Iw=E2(I1,w2).双水印模型可以形式化表示为:

该模型中, 水印嵌入过程是对载体图像的密文信息操作的, 用户不能有目的性的篡改载体图像的信息,保证了载体图像的安全.

2.2 Paillier同态加密算法

密钥生成: 首先选取两个大素数p和q, 计算n=p×q.然后随机选取参数g, 其中g满足g∈且n|ordn2(g).最后生成公钥为: (n,g), 私钥为:λ或者(p,q).

加密算法: 对任意的明文m(m∈Zn)加密后得到密文:

解密算法: 利用上述私钥对密文C解密得到明文:

对载体信息m1与水印信息w1, 分别加密后可得:

对加密后的两个密文信息E(m1)、E(w1)相乘得到:

由式(6), 两个密文相乘再解密可以得到:D(E(m1)

由此可得, Paillier密码算法具有加法同态性质, 即明文相加对应密文的相乘, 本文利用Paillier的同态性质来嵌入水印.

3 密文域双水印算法的设计

本方案中, 首先对图像进行小波分解, 小波分解后,根据不同频带系数的特性将各个频带系数块划分成加密部分X与水印部分Y, 其中加密部分X利用SM4密码算法进行加密得到Ek4(X), 水印部分Y利用Paillier同态性质进行水印嵌入得到EpkB(Y*).将分块加密的密文和嵌入水印的密文进行重组以及小波逆变换即可得到嵌入双水印的密文图像Epk,kB4(I*).用户利用SM4的密钥k4与Paillier的私钥skB对图像进行解密, 得到嵌入双水印的图像I*.第三方机构根据水印算法特性通过盲提取得到水印信息.

3.1 数据预处理及加密

本方案中, 需要对载体图像以及水印图像进行预处理之后再嵌入水印, 下面介绍图像预处理的流程.

3.1.1 初始化并生成密钥

初始化SM4密码算法的参数和Paillier密码算法的参数.其中k4为对称加密算法SM4的密钥, 是一个128位二进制的随机密钥; Paillier密码算法的公私钥对为 (pkB,skB), 其中公钥pkB用于加密水印部分Y以及水印信息w1和w2, 私钥skB用于解密嵌入水印的密文信息.每次事务中生成一套固有的公私钥, 将生成的密钥保存到文件里, 每次用到密钥时直接从文件中读取,这样保证了一次事务中加解密共用一套公私钥.

3.1.2 分块加密

首先对图像进行如图2的三层小波变换, 得到10个频带系数集{LL3,LH3,HL3,HH3,LH2,HL2,HH2,LH1,HL1,HH1}, 根据不同频带系数集的频带特性, 将子频带划分为两个部分: 图片中灰色的部分为加密部分记为X, 白色部分为水印部分记为Y={Y1,Y2}.其中水印部分Y1为水平高频, 水印部分Y2为垂直高频.利用分组密码SM4的高速加密性对X进行加密,利用Paillier密码算法对水印部分Y加密.分块加密的细节流程如下:

图2 三层小波分解

(1)将图像进行三重小波分解, 得到系数集合{LL3,LH3,HL3,HH3,LH2,HL2,HH2,LH1,HL1,HH1}.

(2)由上图可以得知, 加密部分X的频带集为{LL3,HH3,LH2,HL2,HH2,LH1,HL1,HH1}.

1)将频带系数集{LL3,HH3,LH2,HL2,HH2,LH1,HL1,HH1}拼接成为一个向量X.

2) (SM4加密)使用密钥k4对向量X进行加密, 得到密文Ek4(X).

(3)加密水印部分Y1(LH3).

1)将子频带系数集LH3拼接成一个向量V={v1,v2,···,vn}.

2)对向量V中的元素进行预处理.由于Paillier密码算法只能对正整数进行加密解密, 然而进行小波分解后的频带系数为浮点型小数.为了加密小波系数, 本方案中需要对各个频带系数预处理成正整数, 过程如下:

① 遍历向量集V中的元素, 将集合中的每一个元素进行四舍五入保留小数点后a位(其中a的取值不同得出的水印效果不同, 在实验阶段进行了分析).通过这样的操作, 集合V中的元素, 都统一成为小数点后位数相同的元素.

② 将集合中元素的正负情况保存到集合pnflag1中.

如果vi<0,那么pnflag1(i)=-1;

如果vi>0,那么pnflag1(i)=1.

③ 将向量V中的系数处理成正整数向量Pre_LH3, 对于每一个元素Pre_LH3(i), 计算Pre_LH3(i)=pnflag1(i)×vi×10a, 将元素vi乘以pnflag1(i)×10a后, 得到的每一个Pre_LH3(i)元素变成正整数.

④ 遍历向量集Pre_LH3中的元素, 将Pre_LH3中的元素处理成偶数.

如果Pre_LH3(i)为奇数,Pre_LH3(i)=Pre_LH3(i)-1.

如果Pre_LH3(i)为偶数,Pre_LH3(i)=Pre_LH3(i).

3)使用Paillier算法, 利用公钥pkB, 对预处理后的水印部分Pre_LH3进行加密, 得到密文EpkB(Pre_LH3).

(4)加密水印部分Y2.最后得到加密后的密文EpkB(Pre_HL3)和系数集pnflag2 (处理过程与步骤(3)相同).

(5)加密水印信息: 利用密钥pkB, 对水印信息w1、w2加密得到EpkB(w1)、EpkB(w2).

(6) 输出:{Ek4(X),EpkB(Pre_LH3),EpkB(Pre_HL3),pnflag1,pnflag2,EpkB(w1),EpkB(w2),a}.

3.2 水印嵌入

对数据预处理以及加密完成后, 用户A得到{EpkB(w1),EpkB(Pre_LH3)}, 并利用Paillier同态性质将水印信息w1嵌入到LH3中.用户B得到EpkB(w2)、EpkB(Pre_HL3)后将水印信息w2嵌入到HL3中.整体的水印嵌入过程如图3所示.

图3 水印嵌入过程

(1) 用户A嵌水印

加密后载体图像的密文:

密文水印信息:

水印嵌入的过程如下:

① 如果Eem_LH3(i)为奇数, 则嵌入水印w1(i)=1.

② 如果Eem_LH3(i)为偶数, 则嵌入水印w1(i)=0.

(2) 用户B嵌水印

嵌入过程同上, 水印嵌入过程:

其中, 将载体图像的密文EpkB(Pre_HL3(i))与水印信息的密文EpkB(w2(i))对应相乘得到的结果相当于对载体明文Pre_HL3(i)与水印信息w2(i)相加再加密, 最终可以得到嵌入水印的密文图像EpkB(Eem_HL3).

(3) 输出嵌入水印后的图像

得到密文Ek4(X)、EpkB(Eem_LH3)、EpkB(Eem_HL3)后分别使用密钥进行解密, 得到嵌入水印后的明文图像I*.具体过程如下:

① 解密Ek4(X): 使用SM4的密钥k4对Ek4(X)解密, 得到明文系数向量U, 将向量U还原成小波系数集合{LL3,HH3,LH2,HL2,HH2,LH1,HL1,HH1}.

③ 将嵌入水印后的频带集Eem_LH3恢复到原来的量级:Eem_LH3(i)=pnflag1(i)×Eem_LH3(i)×(1/10)a.

⑤ 将嵌入水印后的频带集Eem_HL3恢复到原来的量级:Eem_HL3(i)=pnflag2(i)×Eem_HL3(i)×(1/10)a.

⑥ 将{X,Eem_LH3,Eem_HL3}小波系数按照原来的顺序格式组合在一起, 然后使用离散小波逆变换(IDWT)将其还原成嵌入双水印的图像I*.

3.3 水印提取

由上述的水印嵌入算法可以看出, 本文的水印嵌入过程在密文中进行, 而水印提取是对明文进行操作,因此本文的水印算法具有可交换性.水印提取的过程如下:

(1)对I*进行三层小波分解(只需要对嵌入水印的部分:Eem_LH3、Eem_HL3操作提取水印即可).

(2)对Eem_LH3部分进行水印提取:

1)遍历系数集合Eem_LH3中的元素, 将每一个元素进行四舍五入保留小数点后a位;

2)对Eem_LH3中的每个元素操作完之后, 对每个元素Eem_LH3(i)进行奇偶性判断:

① 若Eem_LH3(i)为奇数, 则水印信息为:w1(i)=1,i∈[1,n];

② 若Eem_LH3(i)为偶数, 则水印信息为:w1(i)=0,i∈[1,n];

3)输出水印图像w1.

(3)对Eem_HL3部分进行水印提取(过程同上),输出水印图像w2.

4 实验结果与分析

本算法在Matlab R2020a[15,16], IntelliJ IDEA 2017.3.2,Windows 10操作系统下进行仿真测试.实验过程中使用经典的灰度图进行测试, 并从加密参数、不可见性、时间负载的角度来说明算法的性能.

4.1 参数测试

嵌入率用来衡量水印嵌入比例, 其计算公式如下:

选取3幅经典的灰度图Lena、Baboon、Camera,在嵌入容量为0.031 25 bpp时, 对尺度参数a进行测试.选取6个不同的参数a时, 嵌入水印后, 含水印图像的PSNR值见表1.

表1 不同a时含水印图像PSNR值

表1中展示了3个不同的载体图像, 在a的取值不同时, PSNR值的变化规律.从表中可以发现在a值相同的情况下, 3个不同的载体图像Lena, Baboon,Camera的PSNR值相差很小; 对于同一副载体图像,a的值越大, 嵌入水印后图像的PSNR值越高.

实验数据分析: 本方案中参数a, 用于预处理过程中对频带系数的倍数扩张,a的取值越大, 水印的不可见性越好.

表2为在a的取值不同时, 提取出的两个水印信息的NC值变换规律.表中的每个数据代表提取出的两个水印信息的NC值.从数据中可以看出, 随着参数a增大, 提取的水印的NC值起初比较稳定, 但是当a取13时, NC值大幅下降.

表2 不同a时提取水印图像的NC值

实验数据分析: 小波变换后, 小波系数为浮点型,并且小数点后的位置并不能确定, 当a值超越大部分小波系数的小数位数时, 提取水印时容易将水印信息过滤掉, 因此当a值过大时, 不能很好地提取出水印图像.

经过表1与表2中的数据,a在[-1,12]区间内的值PSNR值与NC值都比较高.实际应用中可根据应用需求选择具体的a值.

与其他的密文域双水印算法[17,18]的性能进行比较,结果见表3.下面各项性能数据是在参数a=1, 嵌入容量为0.031 25 bpp时取得的.

表3 本文算法与其他算法的性能比较

从表3中可以看出, 本文的PSNR值明显优于文献[17,18]的算法, 原因分析, 本文的水印嵌入算法是利用LSB思想对小波变换后的系数进行操作来嵌入水印, 嵌入水印信息后对载体图像的影响很小, 因此PSNR值较高.由此可见, 本文算法更加适用于对数字内容质量要求较高的应用场景中.

4.2 实验结果

上述的实验结果为载体图像为512×512的Lena图, 水印图像为2个64×64的二值图像, 且参数a=1时的实验结果.其中在密文中嵌入水印的实验结果见图4,明文中提取水印的实验结果见图5.此水印算法满足一定的交换性, 即在密文中嵌入水印, 明文中提取水印.

图4 密文域水印实验结果

图5 双水印提取实验结果

4.3 时间负载

本文的实验使用的环境是在Matlab R2020a,IntelliJ IDEA 2017.3.2, Windows 10操作系统下进行仿真测试, 在商业环境中为了增加方案的执行效率, 会将部分计算任务交由云计算平台[19]来完成, 从而提高执行效率.下面对本文算法的时间负载特性进行分析.

从图6中可以看出, 同一个载体图像的总消耗时间随着嵌入水印的增大而增大; 同一水印图像的总消耗的时间随着载体图像的增大而增大.但是从图中可以发现同一大小的水印图像嵌入到不同大小的载体图像的时间消耗差别很小, 而同一载体图像嵌入不同大小的水印图像时间消耗的变化幅度很大.因此可以得出, 嵌入的水印图像的大小是影响总消耗时间的主要因素, 即利用公钥密码Paillier加密以及嵌入水印的时间消耗大, 而利用SM4分组密码加密的时间消耗非常小.

图6 时间消耗

图7为本文算法与文献[7]中的加密域水印算法的时间负载对比图.图中的实验结果为嵌入水印图像大小是64×64时, 不同大小的载体图像对应的加密以及嵌入水印的总时间消耗.由图7可以看出, 在嵌入水印图像大小固定的情况下, 本方案中不同的载体图像的大小, 对加密以及嵌入水印的时间影响较小, 而文献[7]中的水印算法的总时间消耗随着载体图像大小的增加而大幅增加.从图中可以看出, 在嵌入水印大小固定时,本方案的水印算法相较于方案[7], 时间消耗更少.

图7 本算法与文献[7]算法时间消耗比较

原因分析, 文献[7]中的水印嵌入方法是对整幅图像利用公钥密码的同态性质嵌入水印, 在水印嵌入的过程中, 需要对整幅图像用同态密码进行加密.而本方案将图像分为加密部分与水印部分, 只有水印部分需要利用同态性质嵌入水印, 加密部分利用对称密码SM4进行加密.对称密码的加解密速度高于公钥密码, 因此本方案的效率更高.

5 结束语

本文基于Paillier同态加密算法、SM4加密算法以及DWT小波变换水印算法, 构造了一种新的密文域双水印算法.与其他水印算法相比, 本文的水印算法既可以保障嵌入水印后的图片质量高, 水印信息提取正确, 也可以保证高效的计算速率.实验数据表明, 本方案中的水印嵌入方法具有较高的峰值信噪比, 提取出的水印质量好, 以及时间消耗少, 因此本文的算法具有一定的研究意义和参考性.

下一步的研究可以寻求一种更高效的水印嵌入方法, 来提高密文域双水印算法的鲁棒性, 从而进一步改善算法的性能.

猜你喜欢
密文加密载体
创新举措强载体 为侨服务加速跑
以几何画板为载体,探究等腰三角形的存在性问题
坚持以活动为载体有效拓展港澳台海外统战工作
保护数据按需创建多种加密磁盘
一种新的密文策略的属性基加密方案研究
密码分类和攻击类型
谷歌禁止加密货币应用程序
一种抗攻击的网络加密算法研究
创新代表履职载体 充分发挥代表作用
加密与解密