1. 引言
随着互联网的发展,越来越多的公司注重数据的安全。通常只会采用加密的方式保护数据,但是并没有密钥进行保护。因此,可以采取秘密共享的方式保护密钥安全。Shamir [1]首次提出了基于多项式的秘密共享方案,利用一个t − 1多项式生成n个秘密共享数据。收集至少t个秘密共享数据,最后利用拉格朗日多项式恢复秘密。Thien等[2]首次利用多项式用于图像领域的秘密共享,由于选取的大质数未能大于所有的像数值,导致丢失一部分数据,未能做到无损恢复。荣辉桂等[3]提出了基于Shamir的秘密共享,通过引入影子秘密的线性组合,也即拉格朗日因子来恢复秘密,将其扩展成为了一个多秘密共享方案。秘密信息同样是放在常数项的位置,生成的份额同样没有利用到。Chen等[4]利用Shamir的加法同态特性和插值扩展算法[5]进行了秘密信息的嵌入,将秘密图像的像数值作为多项式系数。Wu等[6]提出了一个基于Shamir秘密共享的图像加密算法,采用差值扩展和差值直方图平移的方式在共享份额中嵌入秘密信息。秘密图像的恢复和秘密信息的提取两者之间的独立性较差。Chen等[7]利用Shamir对秘密图像共享之后,通过数据隐藏器在生成的份额中隐藏数据,仅利用了多项式的常数项和一次项系数,同样没有利用全部的系数进行隐藏数据。
周能等[8]利用Shamir的同态特性,在秘密共享的过程中隐藏信息。该文献仅利用了二次多项式的常数项隐藏秘密图像,利用Shamir的同态特性隐藏秘密信息,但是未在共享份额中隐藏额外的数据。王泽曦等[9]利用二次多项式的常数项隐藏秘密图像,一次项系数和二次项系数隐藏秘密信息,利用到了二次多项式的全部系数,但是生成的份额同样没有隐藏额外的数据,而且秘密图像和秘密信息的提取的独立性较差。温文媖等[10]利用Shamir对秘密医疗图像共享,共享生成的份额的低四位基于随机网格的可视化秘密共享理论再次共享。通过两次共享生成最终的份额,从而实现秘密图像的共享和共享份额的认证,同时也做到了对单个份额的验证。但是对于多项式的系数,也只利用了常数项。Ding [11]利用Shamir对秘密半色调图像共享,将加密后的半色调图像的数据隐藏在常数项,秘密信息则是隐藏在生成的共享份额上。秘密图像和秘密信息的提取可分离性好,但对于多项式的系数,同样也只是利用了常数项。
文献[12] [13]于1983年提出了基于CRT的(t, n)门限秘密共享方案。闫伟齐等[14]首次利用中国剩余定理将图像生成共享份额,但是共享份额不能隐藏额外的数据。Ke等[15]提出了一个基于中国剩余定理的可分离的RDH-ED方案,使用了两种嵌入信息的方法。秘密信息一种在图像重建中提取,一种则是在图像份额中重建提取。陈维启等[16]、Xiong等[17]和Li等[18]利用中国剩余定理共享,将秘密图像生成共享份额,但是共享份额不能隐藏额外的数据。
基于以上出现的只将信息隐藏在了多项式的常数项,或者隐藏在了全部系数但并未利用共享份额,只利用了常数项和共享份额隐藏数据等问题,本文提出了一个基于Shamir(t, n)门限方案的可逆信息隐藏方案。本文算法既能利用多项式的全部系数,同时又能利用秘密共享生成的份额隐藏秘密信息,并且秘密图像和秘密信息的独立性强,无需其他额外数据就能恢复出秘密图像和秘密信息。
2. 基础知识
2.1. 秘密共享
1979年,Shamir [1]提出了基于多项式的拉格朗日插值(t, n)门限的秘密共享方案。选取一个素数p,秘密
,参与秘密共享的成员有n个,需要t个成员秘密共享份额才能共享。构建一个t − 1次多项式,在GF(p)范围中选取t − 1个系数分别为
,构建的多项式如公式(1)所示:
(1)
其中,st − 1不为0,
,
。利用多项式生成n个不同的有效(x, y)的分发n个成员。恢复秘密s的时候,从n个成员中任意选取t个成员,从中得到对应的(x, y)对。利用拉格朗日多项式进行恢复,公式如公式(2)所示:
(2)
令x = 0,可以恢复出秘密s,也即s = f(0)。当选取的成员数量m小于t时,需要假设出t − m的插值点,也即需要穷举pt − m种情况。所以恢复s变成了一个计算上的困难问题。
2.2. 秘密共享中的信息隐藏
这里先定义一个函数,用于计算长度为8的二进制字符串中1个的个数,函数名为countBits,输入是二进制字符串,输出是二进制字符串中1的个数。
Ding [11]利用Shamir共享秘密图像,通过共享份额的奇偶关系隐藏额外数据。先利用祖冲之加密算法加密半色调图像。再利用共享数据中的奇偶关系隐藏数据。额外数据先利用数据隐藏的密钥加密,再利用共享数据份额中的奇偶隐藏。用Shamir(3, 4)举例,其中秘密为0,也即常数项系数为0。每一张共享图像都隐藏相同的信息。
例如,多项式取y = s(x) = x2,素数p取17。当x = 0时,s(0) = 0。x对应的4位二进制数为(0000)2,s(0)对应的4位二进制数为(0000)2。两个4位二进制数拼接之后的结果为(0000 0000)2。拼接之后的二进制字符串的中1,含有的个数为0。规定含有1的个数为偶数隐藏0,含有1的个数为奇数则隐藏0,公式如公式(3)所示。公式(3)中的res表示x、y对应的两个二进制数拼接之后的结果。例如x = 0和s(0) = 0组成的份额,能隐藏0。通过这种方式隐藏额外数据,最终需要生成4张共享图像。因此,对于多项式s(x) = x2找到至少4个能隐藏0的份额和4个能隐藏1的份额,从而能保证最终4张共享图像同时隐藏0或者同时隐藏1。
(3)
秘密恢复从4张共享图像中任意选取3张,从3张共享图像中对应位置选取3个共享份额,利用公式(1)得到原始的多项式,令x = 0,即可得到秘密f(0)。对所有位置的份额进行同样操作,就可以恢复出秘密图像。额外信息通过对共享份额图中的份额,依次提取信息进行恢复。
2.3. 利用Shamir秘密共享系数的信息隐藏
王泽曦等[9]提出了一种基于图像秘密共享的密文域可逆信息隐藏算法。为了方便描述,这里用具体的数据描述。图像所有者先将图像的原始像素对加密,最后得到密文像素对。密文像素对通过合并得到新的像素值。从秘密信息中选取16比特,加密处理后得到2个8比特的数据。秘密信息和密文像素多项式生成二次多项式
,其中新的像素值作为常数,2个8比特的数据分别作为二次项系数和一次项系数。参与者的每人拥有一个固定的身份,即固定的x。通过固定的身份可以得到对应的f(x),再将得到的f(x)进行分割得到携密密文像素对,最后保存的是携密密文像素对。
秘密像素恢复只需要任选3个携密密文像素对,并利用公式(2)恢复。秘密信息同样是任选3个携密密文像素对,并利用公式(2)进行恢复。
3. 主要组成部分
本章节用于介绍独立高容量半色调图像信息隐藏算法中涉及的重难点核心模块。
3.1. 参数选取
本算法使用Shamir(t, n)做秘密共享,并在秘密共享的同时,隐藏额外信息。公式如公式(4)所示:
(4)
其中,p是素数,x,y,
,
。
3.2. 数据集的筛选
数据集的筛选需要进行用到具体的值。因此,这里素数p取17。
1) 秘密共享份额预处理
初步处理秘密共享份额的数据范围,以便进行下一步的处理。由于x、y作为秘密共享份额,需要被保存到图像中。s是选取相邻的4个比特数据作为秘密。为了保持与s的取值范围一致,x、y、b、c舍弃16,也即x,y,b,
。
2) 筛选条件
秘密图像隐藏在多项式b、c位置。除了秘密图像的信息之外的数据称为额外信息。额外信息根据隐藏的位置不同,又分为额外数据1和额外数据2。额外数据1利用x与y的关系隐藏数据。额外数据2利用a与7的大小关系隐藏数据。基于Shamir(t, n)和3个隐藏位置,可以得到对于每一对确定(b, c)有2个筛选条件。2个筛选条件分别针对二次项系数和共享份额。
筛选条件1,将a划分成两部分
和
用于隐藏额外数据1,如公式(5)所示,其中invalid表示无效。每一部分分别利用筛选条件2进行筛选,筛选出至少1个满足条件的a。
(5)
筛选条件2,则是利用x与y的关系隐藏额外数据2。x与y组合之后的z转化为8位二进制数的1个数,用bitCount表示。将z转换为8位二进制数利用公式(3)信息数据。利用Shamir(t, n)共享时,为保证n个秘密共享份额不同,bitCount为奇偶的个数分别要大于等于n。x、y和z的关系如公式(6)所示:
(6)
对a的处理,以
为例,从256对(b, c)对中,依次选取(b, c)对。256对(b, c)对的具体数据如表1所示。
Table 1. 256 (b, c) pairs
表1. 256对(b, c)对
序号 |
b |
c |
1 |
0 |
0 |
2 |
0 |
1 |
… |
… |
… |
255 |
15 |
14 |
256 |
15 |
15 |
从a的范围中选取一个值,生成(x, y)对,统计所有的(x, y)的bitCount。a满足筛选条件2,则完成筛选,也即bitCount为奇偶的个数分别要大于等于n。最后得到256个多项式,将多项式的(x, y)放入数据集中。数据集存放每一对(b, c)对筛选出的a及其对应的(x, y)对。对
处理之后同样能得到256个多项式。筛选过程如图1所示。
Figure 1. Data set filtering graph
图1. 数据集筛选图
以(b, c)对(0, 0),
为例,筛选出的a为1。数据集用a、b、c做索引存放(x, y)对。在数据集存放的数据形式如表2所示。
Table 2. Data set single record structure
表2. 数据集单条记录结构
偶数 |
奇数 |
1 |
0000 |
0000 |
1 |
0101 |
1000 |
2 |
0001 |
0001 |
2 |
0110 |
0010 |
3 |
0010 |
0100 |
3 |
0111 |
1111 |
4 |
0011 |
1001 |
4 |
1001 |
1101 |
5 |
1000 |
1101 |
5 |
1100 |
1000 |
6 |
1010 |
1111 |
6 |
1110 |
1001 |
7 |
1011 |
0010 |
7 |
1111 |
0100 |
3) 结果
利用筛选条件1和2,对256对不同的(b, c)对进行筛选,最终得到数据集。
4. 算法设计
独立高容量半色调图像信息隐藏算法的设计思路是先读取秘密图像和作为额外信息的图像,接着处理原始数据,然后利用这里的份额共享秘密图像和隐藏额外信息的图像,最后保存图像数据。算法秘密共享与信息隐藏的整体框图如图2所示。秘密恢复与信息提取的流程和图2类似,不同的只有数据处理后是秘密恢复与信息提取。
Figure 2. Overall algorithm block diagram
图2. 算法整体框图
4.1. 数据读取
读取的数据按隐藏位置分为三大类,分别是秘密图像、额外数据1和额外数据2。额外数据1和秘密数据2以下统称为秘密信息,简称为信息。
1) 秘密图像
秘密图像采用大小为W × H的二值图,其中W和H都为4的倍数。其数据隐藏在多项式的b、c系数中。将图像分成两部分,前W/2列数据用s1表示,后W/2列数据用s2表示。
2) 额外数据1
额外数据1存放用户信息,采用n张不同的大小为(W/4) × (H/2)的二值图。也可以使用完全相同的n张二值图。n张二值图分别用ei表示,i取1,2,……,n。
3) 额外数据2
额外数据2存放版权信息,采用1张大小为(W/4) × (H/2)的二值图,用e'表示。
4.2. 数据处理
1) 对读取的数据进行处理
对二值图的数据按照从左往右、从上往下的顺序,选取相邻的4个比特数据作为d,如图3所示。相邻的4个比特用di表示,i取1,2,3,4。数据d与d1、d2、d3和d4转换公式如下公式(7)所示。
Figure 3. Data sorting graph
图3. 数据排序图
由公式(7)得到d的取值范围,
。秘密图像s1和s2的数据利用公式(7)处理之后进行共享。
(7)
2) 对秘密共享份额进行处理
秘密图像s1和秘密图像s2的大小相同,在使用公式(7)处理之后,将对应位置的数据当成一组数据,用g表示。gi则表示第i组数据。例如s1和s2最开始的4个比特数据分别是(0001)2、(0010)2,则g1 = [1, 2]。
秘密共享采用二次多项式,结构如公式(4)所示。二次多项式根据当前的gi确定。将当前正在进行共享的gi的2个元素分别放在b、c的位置。确定了b、c,接着只需确定a的系数,就能得到所需的多项式。
额外信息2也即e'利用了二次项的系数隐藏数据。因此,a至少有两个,并且至少有一个
和至少有一个
。为了简化处理,这里只取两个a。两个范围分别取a1和a2。其中
,
。a1和a2的产生过程相同。
a1的选取需要满足1个条件,也即筛选条件2。从a1的范围中选取一个值,二次多项式的系数a、b、c都已经确定。根据
,计算对应的y。对于y等于16的情况,直接舍弃。对于有效的(x, y)对,利用公式(6)转换成对应的z。统计所有z的bitCount (2.2节中有定义)。bitCount为奇数的个数和为偶数的个数都要大于等于n才满足要求。筛选出了合适的a1之后,按照同样的步骤筛选出a2。gi的组合最多256种,对于每一种都进行类似的处理。将所有的情况的结果存放到数据集中。具体系数选取处理在第2节的数据集的筛选。
4.3. 秘密共享与信息隐藏
信息隐藏在秘密共享份额选取的同时进行。数据的隐藏位置如图4所示。
Figure 4. Shared image
图4. 共享图像
在共享秘密图像和隐藏额外数据时,需要先确定当前第i组的gi,再获取到对应的e',对应的e'为0,则
,e'为1,则
。对应e1为0,则选取的(x, y)对的bitCount为偶数,对应e1为0,则选取的x、y的bitCount为奇数。对应的
操作与对e1的操作一样。经过上述操作,可以得到n组(x, y)对。处理所有的g之后,可以得到n组的(x, y)对集合,将其保存到图像中,存放位置同gi的位置相对应。最终得到n张大小为m × m的共享份额二值图像。
分别隐藏在共享图像1,共享图像2,……,共享图像n中。
4.4. 秘密恢复与信息提取
秘密图像的恢复过程,额外数据1的提取和额外数据2的提取过程都是相互独立。数据的提取均按照从左往右、从上往下的顺序提取。秘密信息和额外数据1恢复的框图如图5所示。
Figure 5. Share image recovery block diagram
图5. 共享图像恢复框图
1) 秘密图像的恢复
任意选取t张共享图像恢复秘密图像。每一个秘密,需要t个(x, y)对才能恢复出来。对t张共享图像,对应位置依次取8比特数据,得到t个(x, y)对。利用拉格朗日多项式的公式,求出f(x)的表达式。利用一次项系数和常数项系数,恢复出s1和s2。s1和s2拼接恢复出s。
2) 额外数据1的提取
额外数据
的恢复方式一致。以e1的恢复为例,选取共享图像1,按照顺序提取8比特数据,统计1的个数。个数为奇数,则隐藏的数据为1;个数为偶数,则隐藏的数据为0。最后得到所有数据后,按照提取的顺序和位置得到一张大小为128 × 256的二值图。
3) 额外数据2的提取
任意选取t张共享图像,并在对应位置依次取8比特数据,得到t个(x, y)对。额外数据2的提取同样要用到拉格朗日多项式。利用t个(x, y)对之后得到f(x)。f(x)的二次项系数小于7,则隐藏的数据是0,大于7,则是1。最终按照提取顺序恢复,得到一张大小为(W/4) × (H/2)的二值图,如图6所示。
Figure 6. User information recovery block diagram
图6. 用户信息恢复框图
5. 实验结果
5.1. 实验环境和数据
在Windows 11专业版系统上利用MATLAB R2020b进行实验。实验数据采用1张大小为512 × 512的二值图,5张大小为128 × 256的二值图。图7(a)采用1张大小为512 × 512的二值图作为秘密图像。图7(b)采用1张大小为128 × 256的二值图作为版权信息。图8采用4张大小为128 × 256的二值图作为用户信息。
(a) 秘密图像 (b) 版权信息
Figure 7. Secret image and copyright information
图7. 秘密图像和版权信息
(a) 用户信息1 (b) 用户信息2 (c) 用户信息3 (d) 用户信息4
Figure 8. User information 1~4
图8. 用户信息1~4
5.2. 算法示例
用一个例子说明秘密共享和信息隐藏的细节,如图9所示。秘密图像s1部分隐藏0,秘密图像s2隐藏0。用户1、2、3和4分别隐藏0、0、1和1。版权信息隐藏0。二次项的系数用于隐藏版权信息0,因此a需要小于7。一次项系数b和常数项c分别隐藏秘密图像的s1、s2,因此b和c都为0。根据秘密图像的s1、s2和版权信息,从2.2中筛选出的数据集中,选取一个满足条件的多项式
。根据二次多项式,就可以得到7个bitCount为奇数,7个bitCount为偶数的(x,y)对。用户1、2、3和4分别从偶数、偶数、奇数和奇数的选取x和y的共享份额隐藏信息。最后得到的共享份额1、2、3和4依次得到是(0000 0000)2、(1010 1111)2、(0101 1000)2和(1110 1001)2。对秘密图像,用户信息和版权信息的所有数据重复上述的操作,就可以得到4个大小一样的共享图像。
Figure 9. Secret sharing and information hiding diagram
图9. 秘密共享和信息隐藏图
对于秘密图像的恢复,从共享的份额中任选3个。这里选取(0000 0000)2、(1010 1111)2和(0101 1000)2三个份额。先利用公式(7)转换为(x, y)对,(0, 0)、(10, 15)和(5, 8)。再利用公式(2)恢复多项式
。接着从恢复的多项式根据隐藏的位置可以得到版权信息是0,秘密图像s1和s2是0、0。根据三个份额,计算出bitCount分别是偶数、偶数和奇数。因此,隐藏的数据分别是0、0和1。对共享份额的所有数据进行同样的操作,就能得到秘密图像、版权信息和用户信息。
图10是秘密共享和信息隐藏之后生成的4张大小为512 × 512的共享图像。对于秘密图像的恢复和版权信息的提取只需要从图10中任选取3张共享图像进行恢复。图11(a)是通过图10(a)~(c)恢复出的秘密图像。图11(b)是通过图10(a)~(c)提取出的版权信息。而对于用户信息的提取,每一个用户需要对应的共享图像的信息才能提取。图12(a)~(d)分别是通过图10(a)~(d)提取出来的。
(a) 共享图像1 (b) 共享图像2
(c) 共享图像3 (d) 共享图像4
Figure 10. Sharing images 1~4
图10. 共享图像1~4
(a) 秘密图像 (b) 版权信息
Figure 11. Recovered secret image and copyright information
图11. 恢复出的秘密图像和版权信息
(a) 用户信息1 (b)用户信息2 (c)用户信息3 (d)用户信息4
Figure 12. Recovered user information 1~4
图12. 恢复出的用户信息1~4
5.3. 嵌入率分析
信息嵌入率采用文献[6]定义的嵌入率(Embedding Rate,以下简称ER),单位bpp (bit per pixel)。公式如下,其中k表示总的嵌入比特数(单位bit),p表示总密文像素块数(单位pixel),其中1个像素使用8比特存放。
(8)
根据公式(8)可以推得以下公式:
(9)
以Shamir(3, 3)门限共享为例,t = 3,n = 3。计算出嵌入率ER为3。(t, n)共享方案嵌入率对比结果如表3所示,表格中文献[7]-[9]的数据使用文献[9]的对标准Lena灰度图数据。
Table 3. Comparison of results of (t, n) threshold sharing schemes (unit: bpp)
表3. (t, n)门限共享方案结果对比(单位:bpp)
(t, n)门限分享 |
(3, 3) |
(3, 4) |
(3, 5) |
文献[7] |
- |
1 |
- |
文献[8] |
- |
- |
0.49 |
文献[9] |
5.33 |
4 |
3.2 |
文献[11] |
2 |
2.25 |
2.5 |
本文 |
3 |
3.25 |
3.5 |
结果表明,本文相较于文献[7]、文献[8]和文献[11],嵌入率有了明显的提高。与文献[9]相比,基于(3, 5)门限共享方案,嵌入率已经高于文献[9]。文献[9]相对本文的嵌入率差距较大,是由于文献[9]需要单独存放一个标签(拉格朗日多项式中的x,也即公式(2)中的x)用于恢复数据,而本文无需单独存放。因此,本文相较于文献[9],本文使用了一半的空间存放x,导致本文的嵌入率减半。本文提出的算法嵌入率在拥有的共享份额数量越多,嵌入率就越大。
6. 结论
针对Shamir(t, n)门限方案在秘密共享时,未能充分利用多项式系数和共享份额的问题,本文的秘密图像采用Shamir秘密共享进行共享,并分发给服务器保存,可以提高安全性,同时不失容灾能力。在秘密共享的同时,利用共享份额的关系隐藏版权信息,从而增加嵌入容量。并可以在每一张共享图像中隐藏用户信息,从而具有一定的检验份额真假的能力。当共享图像数量达到门限时,就可以提取出另一种隐藏的信息,从而对多张共享图像具有一定的检验版权能力。并且秘密图像、版权信息和用户信息的提取无需其他数据,各自的提取都可以单独进行。嵌入率在t保持不变的情况,随着n的变化,n越大,嵌入率就越大。对于Shamir(3, 5)门限共享,嵌入率可以达到3.5 bpp。
本方案仍有不足之处,由于信息隐藏的方式较多,导致满足条件的共享份额会很少。因此,能够生成的共享图像数量也会受到限制。未来计划修改信息隐藏的方式,从而在保证嵌入容量不减小的情况下,增加最终的共享图像的数量。
基金项目
国家自然科学基金(61370188);北京市教委科研计划(KM202010015009);北京市教委科研计划资助(No. KM202110015004);北京印刷学院博士启动金项目(27170120003/020);北京印刷学院科研创新团队项目(Eb202101);北京印刷学院校内学科建设项目(21090121021);北京印刷学院重点教改项目(22150121033/009);北京印刷学院科研基础研究一般项目(Ec202201);北京印刷学院博士启动金项目(27170122006);北京印刷学院基础研究一般项目(Ec202201);北京市高等教育学会2022年立项面上课题(MS2022093);北京市教育委员会科学研究计划项目资助(KM202310015002)。