本发明涉及信息安全技术领域,特别是指一种基于国密和图片隐写的图片版权保护系统及保护方法。
背景技术:
随着互联网的不断发展,数字媒体已经成为了知识产权的重要载体,如视频、图片、电视剧、电影等。数字媒体在互联网中的传播给人们的生活带来了极大的便利,具有易复制,易使用的特点。但是互联网是一把双刃剑,在丰富和便利人们生活的同时,也给数字媒体的创作者带来了很大的版权纠纷问题。目前针对数字媒体的版权问题,普遍的处理方法在图片视频等文件中添加可见水印,但是这严重影响了图片和视频的观看体验,并且很大一部分会被专业人员使用技术手段去除。
技术实现要素:
针对上述背景技术中存在的不足,本发明提出了一种基于国密和图片隐写的图片版权保护系统及保护方法,解决了数字媒体版权问题中的图片版权纠纷的技术问题。
本发明的技术方案是这样实现的:
一种基于国密和图片隐写的图片版权保护系统,包括用户注册模块、图片签名模块和签名验证模块;用户注册模块分别与图片签名模块和签名验证模块相连接,图片签名模块与签名验证模块相连接;
所述用户注册模块采用sm3密码杂凑算法和随机数发生器生成与用户注册的用户名对应的唯一的密钥对;
所述数字签名模块采用sm2数字签名算法和lsb算法将用户名和用户签名写入图片以获得签名后的图片;
所述签名验证模块采用lsb算法和sm2数字签名算法对签名后的图片进行验证以判断图片的著作者是否为注册用户。
一种基于国密和图片隐写的图片版权保护系统的保护方法,其步骤如下:
s1、读取用户注册时填写的用户名,使用sm3密码杂凑算法将用户名处理成数字摘要,根据数字摘要使用随机数发生器生成与用户名相关的fp上椭圆曲线系统参数,使用fp上椭圆曲线系统参数生成与用户名对应的密钥对,其中,密钥对包括私钥和公钥;
s2、使用sm2数字签名算法与步骤s1中生成的私钥相结合对用户名进行数字签名得到信息签名,将用户名和信息签名拼接成版权字符串,使用lsb算法将版权字符串写入图片,得到签名后的图片;
s3、使用lsb算法提取签名后的图片中的版权字符串,使用sm2数字签名算法与步骤s1中生成的公钥相结合对提取后的版权字符串进行验证,验证签名后的图片中的著作者是否为注册用户。
所述根据数字摘要使用随机数发生器生成与用户名相关的fp上椭圆曲线系统参数的方法为:
s1.1、使用随机参数生成器生成素数p,且p>3;
s1.2、读取用户的用户名记为m;
s1.3、使用sm3密码杂凑算法对用户名m进行处理得到数字摘要mh;
s1.4、将数字摘要mh转换成长度为256的比特串seed;
s1.5、使用sm3密码杂凑算法计算比特串seed的杂凑值记为h,并记h=(h255,h254,…hi,…,h0);
s1.6、置
s1.7、置r=rmodp;
s1.8、任意选择fp上的元素a和b,使r·b2≡a3(modp);
s1.9、若(4a3+27b2)modp=0,则置m=mh并转步骤s1.2;
s1.10、根据步骤s1.2至s1.9得到fp上的椭圆曲线e为:y2=x3+ax+b;
s1.11、输出(seed,a,b);
s1.12、使用随机数生成器生成随机点xg,根据椭圆曲线e计算yg,组成基点g;
s1.13、置n为基点g的阶,n满足的条件为:n>2191且n>4p(1/2)。
所述使用fp上椭圆曲线系统参数生成与用户名对应的密钥对的方法为:
s1.14、使用随机数发生器产生一个整数d,且d∈[1,n-2];
s1.15、根据整数d和基点g计算p=(xp,yp)=[d]g;
s1.16、将d作为私钥,p作为公钥,则密钥对为(d,p)。
所述使用sm2数字签名算法与步骤s1中生成的私钥相结合对用户名进行数字签名得到信息签名的方法为:
s2.1、置id为用户名,entlen为id的长度,entl为entlen转换后的两个字节;
s2.2、置z=h256(entl||id||a||b||xg||yg||xp||yp),其中,h256()为sm3密码杂凑函数;
s2.3、计算
s2.4、使用随机数发生器产生随机数k,且k∈[1,n-1];
s2.5、计算椭圆曲线点(x1,y1)=[k]g,并将x1转换为整数;
s2.6、计算r=(e+x1)modn,若r=0或r+k=n,返回步骤s2.5;
s2.7、计算s=((1+d)-1·(k-r·d))modn,若s=0,返回步骤s2.5;
s2.8、将(r,s)的数据类型转换为字符串,输出用户名m的信息签名s为(r,s)。
所述将用户名和信息签名拼接成版权字符串的方法为:利用ascii编码方法将用户名m转换成的比特串长度为mlen,将mlen转换成的两个字节记为mlen;利用ascii编码方法将信息签名s转换成的比特串长度为slen,将slen转换成的两个字节记为slen,则版权字符串为cr=mlen||slen||m||s。
所述使用lsb算法将版权字符串写入图片的方法为:
s2.9、从待数字签名的图片中提取像素矩阵mat,并将像素矩阵mat的行数记为x,列数记为y;
s2.10、置sum为版权字符串cr的长度,sum为sum转换而成的两个字节;
s2.11、置mes=sum||cr,利用ascii编码方法将mes转换成比特串得到mesb,记比特串mesb的长度为z;
s2.12、对像素矩阵mat进行以下迭代:
s2.13、将像素矩阵mat转换成指定格式的图片并输出,得到签名后的图片。
所述使用lsb算法提取签名后的图片中的版权字符串的方法为:
s3.1、从签名后的图片中提取像素矩阵mat′,并将像素矩阵mat′的行数记为x′,列数记为y′;
s3.2、对像素矩阵mat′进行以下迭代:
s3.3、记c为比特串count转换成的两个字节的整数,再次对像素矩阵mat′进行如下迭代:
s3.4、利用ascii编码方法对比特串crb′进行反编码,得到版权字符串cr′。
所述使用sm2数字签名算法与步骤s1中生成的公钥相结合对提取后的版权字符串进行验证的方法为:
s3.5、截取版权字符串cr′的前两个字节的整数记为mlen′,截取版权字符串cr′的第三和第四个字节的整数记为slen′,然后对像素矩阵mat′进行以下迭代:
s3.5、利用ascii编码方法对比特串mb′进行反编码得到用户名m′,利用ascii编码方法对比特串sb′进行反编码得到签名s′=(r′,s′);
s3.6、检验r′∈[1,n-1]是否成立,若不成立则验证不通过,否则,执行步骤s3.7;
s3.7、检验s′∈[1,n-1]是否成立,若不成立则验证不通过,否则,执行步骤s3.8;
s3.8、置m′=z||m′;
s3.9、计算e′=h256(m′),
s3.10、计算t=(r′+s′)modn,若t=0,则验证不通过,否则,执行步骤s3.11;
s3.11、计算椭圆曲线点(x′1,y′1)=[s′]g+[t]p;
s3.12、计算r=(e′+x′1)modn,检验r=r′是否成立,若成立则验证通过;否则验证不通过。
所述sm3密码杂凑算法的实现方法为:
a)填充过程:利用ascii编码方法将用户名m转换成长度为l的比特串m,将比特“1”添加到比特串m的末尾,再添加k个比特“0”,再添加一个64位比特串l′,比特串l′是长度为l的二进制数,填充后的消息m′的比特长度为512的倍数,其中,l<264,k是满足l+1+k≡448mod512的最小非负整数;
b)迭代过程:将填充后的消息m′按512比特进行分组:m′=b(0)b(1)···b(n-1),其中,n=(l+k+65)/512,对消息m′按以下方式迭代:
fori1=0ton-1
endfor
其中,cf()是压缩函数,v(0)为256比特的初始值iv,
c)消息扩展:将消息分组
将消息分组
d)压缩函数:令a、b、c、d、e、f、g、h为字寄存器,ss1、ss2、tt1、tt2为中间变量,压缩函数
输出结果为256比特杂凑值:abcdefgh。
与现有技术相比,本发明产生的有益效果为:本发明使用sm3密码杂凑算法把用户名处理成数字摘要,接着根据数字摘要生成fp上椭圆曲线,然后结合随机发生器生成fp上椭圆曲线系统参数,进而生成相关的公钥和私钥。在对图片进行数字签名的过程中,首先需要使用sm2数字签名算法结合用户的私钥对用户名进行处理获得签名信息,然后使用lsb算法将签名信息写入图片中,获得了签名后的图片。再需要对图片版权进行验证,使用lsb算法将写入图片的版权信息提取出来,然后使用sm2签名算法结合用户的公钥对提取出来的签名信息进行验证,由此证明图片的著作权。本发明可以对bmp和png格式的无损压缩的位图片进行签名,由此来保护图片创作者的著作权;具有很高的便捷性和可靠性,在进行签名时大大降低了对原图片内容的修改。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的系统架构图。
图2为本发明的fp上椭圆曲线生成流程图。
图3为本发明的数字签名生成算法流程图。
图4为本发明的数字签名验证算法流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1,如图1所示,一种基于国密和图片隐写的图片版权保护系统,包括用户注册模块、图片签名模块和签名验证模块;用户注册模块分别与图片签名模块和签名验证模块相连接,图片签名模块与签名验证模块相连接;保护系统输入b/s系统,实施例1系统部署不依赖特殊的硬件设备。最大的优势是使用简单可靠,由于保护系统是b/s系统,用户可以在任何地点使通过浏览器使用该保护系统。
所述用户注册模块采用sm3密码杂凑算法和随机数发生器生成与用户注册的用户名对应的唯一的密钥对;用于用户注册账号,登陆保护系统,使用sm3密码杂凑算法对用户名进行处理生成数字摘要,然后根据数字摘要生成fp上椭圆曲线,接着根据fp上椭圆曲线以及随机数发生器生成的其他fp上椭圆曲线系统参数生成与用户对应的唯一的密钥对。
所述数字签名模块采用sm2数字签名算法和lsb算法将用户名和用户签名写入图片以获得签名后的图片;用于将用户的用户名使用sm2数字签名算法获得数字签名,然后将用户名以及用户签名使用lsb算法写入图片中。
所述签名验证模块采用lsb算法和sm2数字签名算法对签名后的图片进行验证以判断图片的著作者是否为注册用户;用于使用lsb算法从需要进行版权验证的图片中提取出用户名以及数字签名,然后使用需要验证版权的用户的公钥对其进行验证,最后即可判断该图片的著作人是否为该用户。
实施例2,一种基于国密和图片隐写的图片版权保护系统的保护方法,具体步骤如下:
s1、读取用户注册时填写的用户名,使用sm3密码杂凑算法将用户名处理成数字摘要,根据数字摘要使用随机数发生器生成与用户名相关的fp上椭圆曲线系统参数,使用fp上椭圆曲线系统参数生成与用户名对应的密钥对,其中,密钥对包括私钥和公钥;
如图2所示,根据数字摘要使用随机数发生器生成与用户名相关的fp上椭圆曲线系统参数的方法为:
s1.1、使用随机参数生成器生成素数p,且p>3;
p=60275702009245096385686171515219896416297121499402250955537857683885541941187;
s1.2、读取用户的用户名记为m;
m=abc;
s1.3、使用sm3密码杂凑算法对用户名m进行处理得到数字摘要mh;
mh=66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0;
s1.4、将数字摘要mh转换成长度为256的比特串seed;
seed=debe9ff92275b8a138604889c18e5a4d6fdb70e5387e5765293dcba39c0c5732;
s1.5、使用sm3密码杂凑算法计算比特串seed的杂凑值记为h,并记h=(h255,h254,…,h0);
h=(01101011100101101110010010111101111010010010001001110101010110100001010000100110100001100000010001000010000100101100000101000011100101010100100011010110011110110101011011100000111001010011010000111011100101011101100101001001001001101101011000101101010001101001011000000011000101011100110010);
s1.6、置
r=115792089237316195423570985008687907853269984665640564039457584007913129640191;
s1.7、置r=rmodp;
r=55516387228071099037884813493468011436972863166238313083919726324027587698782;
s1.8、任意选择fp上的元素a和b,使r·b2≡a3(modp);
a=1791373391545332505434008460760175645280721611710921823177461738664612270171288;
b=1782064523953351065954990282115820499030925905503711836688255613992067414697114;
s1.9、若(4a3+27b2)modp=0,则置m=mh并转步骤s1.2;
(4a3+27b2)modp=1383113995734484452178028130307774218246864549173635632465631041120338327327140;
s1.10、根据步骤s1.2至s1.9得到fp上的椭圆曲线为e:y2=x3+ax+b;
e:y2=x3+
1791373391545332505434008460760175645280721611710921823177461738664612270171288*x+
1782064523953351065954990282115820499030925905503711836688255613992067414697114;
s1.11、输出(seed,a,b);
s1.12、使用随机数生成器生成随机点xg,根据椭圆曲线e计算yg,组成基点g;
xg=29905514254078361236418469080477708234343499662916671209092838329800180225085;
yg=2940593737975541915790390447892157254280677083040126061230851964063234001314;
s1.13、置n为基点g的阶,n满足的条件为:n>2191且n>4p(1/2);
n=60275702009245096385686171515219896415919644698453424055561665251330296281527。
所述使用fp上椭圆曲线系统参数生成与用户名对应的密钥对的方法为:
s1.14、使用随机数发生器产生一个整数d,且d∈[1,n-2];
s1.15、根据整数d和基点g计算p=(xp,yp)=[d]g;
s1.16、将d作为私钥,p作为公钥,则密钥对为(d,p)。
所述sm3密码杂凑算法的实现方法为:
a)填充过程:利用ascii编码方法将用户名m转换成长度为l的比特串m,将比特“1”添加到比特串m的末尾,再添加k个比特“0”,再添加一个64位比特串l′,比特串l′是长度为l的二进制数,填充后的消息m′的比特长度为512的倍数,其中,l<264,k是满足l+1+k≡448mod512的最小非负整数;
b)迭代过程:将填充后的消息m′按512比特进行分组:m′=b(0)b(1)···b(n-1),其中,n=(l+k+65)/512,对消息m′按以下方式迭代:
fori1=0ton-1
endfor
其中,cf()是压缩函数,v(0)为256比特的初始值iv,
c)消息扩展:将消息分组
将消息分组
d)压缩函数:令a、b、c、d、e、f、g、h为字寄存器,ss1、ss2、tt1、tt2为中间变量,压缩函数
输出结果为256比特杂凑值:abcdefgh。
s2、使用sm2数字签名算法与步骤s1中生成的私钥相结合对用户名进行数字签名得到信息签名,将用户名和信息签名拼接成版权字符串,使用lsb算法将版权字符串写入图片,得到签名后的图片;
如图3所示,使用sm2数字签名算法与步骤s1中生成的私钥相结合对用户名进行数字签名得到信息签名的方法为:
s2.1、置id为用户名,entlen为id的长度,entl为entlen转换后的两个字节;
id=6d65737361676520646967657374;
entl=0x0090;
s2.2、置z=h256(entl||id||a||b||xg||yg||xp||yp),其中,h256()为sm3密码杂凑函数;
z=f4a38489e32b45b6f876e3ac2168ca392362dc8f23459c1d1146fc3dbfb7bc9a;
s2.3、计算
e=b524f552cd82b8b028476e005c377fb19a87e6fc682d48bb5d42e3d9b9effe76;
s2.4、使用随机数发生器产生随机数k,且k∈[1,n-1];
k=6cb28d99385c175c94f94e934817663fc176d925dd72b727260dbaae1fb2f96f;
s2.5、计算椭圆曲线点(x1,y1)=[k]g,并将x1转换为整数;
x1=110fcda57615705d5e7b9324ac4b856d23e6d9188b2ae47759514657ce25d112;
y1=1c65d68a4a08601df24b431e0cab4ebe084772b3817e85811a8510b2df7eca1a;
s2.6、计算r=(e+x1)modn,若r=0或r+k=n,返回步骤s2.5;
s2.7、计算s=((1+d)-1·(k-r·d))modn,若s=0,返回步骤s2.5;
s2.8、将(r,s)的数据类型转换为字符串,输出用户名m的信息签名s为(r,s)。
s=(40f1ec59f793d9f49e09dcef49130d4194f79fb1eed2caa55bacdb49c4e755d1,6fc6dac32c5d5cf10c77dfb20f7c2eb667a457872fb09ec56327a67ec7deebe7)。
所述将用户名和信息签名拼接成版权字符串的方法为:利用ascii编码方法将用户名m转换成的比特串长度为mlen,将mlen转换成的两个字节记为mlen;利用ascii编码方法将信息签名s转换成的比特串长度为slen,将slen转换成的两个字节记为slen,则版权字符串为cr=mlen||slen||m||s。
所述使用lsb算法将版权字符串写入图片的方法为:
s2.9、从待数字签名的图片中提取像素矩阵mat,并将像素矩阵mat的大小记为(x,y);
s2.10、置sum为版权字符串cr的长度,sum为sum转换而成的两个字节;
s2.11、置mes=sum||cr,利用ascii编码方法将mes转换成比特串得到mesb,记比特串mesb的长度为z;
s2.12、对像素矩阵mat进行以下迭代:
s2.13、将像素矩阵mat转换成指定格式的图片并输出,得到签名后的图片。
s3、使用lsb算法提取签名后的图片中的版权字符串,使用sm2数字签名算法与步骤s1中生成的公钥相结合对提取后的版权字符串进行验证,验证签名后的图片中的著作者是否为注册用户。
使用lsb算法提取签名后的图片中的版权字符串的方法为:
s3.1、从签名后的图片中提取像素矩阵mat′,并将像素矩阵mat′的大小记为(x′,y′);
s3.2、对像素矩阵mat′进行以下迭代:
s3.3、记c为比特串count转换成的两个字节的整数,再次对mat′进行如下迭代:
s3.4、利用ascii编码方法对比特串crb′进行反编码,得到版权字符串cr′。
如图4所示,使用sm2数字签名算法与步骤s1中生成的公钥相结合对提取后的版权字符串进行验证的方法为:
s3.5、截取版权字符串cr′的前两个字节的整数记为mlen′,截取版权字符串cr′的第三和第四个字节的整数记为slen′,然后对像素矩阵mat′进行以下迭代:
s3.5、利用ascii编码方法对比特串mb′进行反编码得到用户名m′,利用ascii编码方法对比特串sb′进行反编码得到签名s′=(r′,s′);
m′=10531250d113132334052505213d3c2e434f4d;
s=(40f1ec59f793d9f49e09dcef49130d4194f79fb1eed2caa55bacdb49c4e755d1,6fc6dac32c5d5cf10c77dfb20f7c2eb667a457872fb09ec56327a67ec7deebe7)。
s3.6、检验r′∈[1,n-1]是否成立,若不成立则验证不通过,否则,执行步骤s3.7;
r′=40f1ec59f793d9f49e09dcef49130d4194f79fb1eed2caa55bacdb49c4e755d1;
s3.7、检验s′∈[1,n-1]是否成立,若不成立则验证不通过,否则,执行步骤s3.8;
s′=6fc6dac32c5d5cf10c77dfb20f7c2eb667a457872fb09ec56327a67ec7deebe7;
s3.8、置m′=z||m′;
s3.9、计算e′=h256(m′);
e′=b524f552cd82b8b028476e005c377fb19a87e6fc682d48bb5d42e3d9b9effe76;
s3.10、计算t=(r′+s′)modn,若t=0,则验证不通过,否则,执行步骤s3.11;
t=2b75f07ed7ece7ccc1c8986b991f441ad324d6d619fe06dd63ed32e0c997c801;
s3.11、计算椭圆曲线点(x′1,y′1)=[s′]g+[t]p;
x′1=110fcda57615705d5e7b9324ac4b856d23e6d9188b2ae47759514657ce25d112;
y′1=1c65d68a4a08601df24b431e0cab4ebe084772b3817e85811a8510b2df7eca1a;
s3.12、计算r=(e′+x′1)modn,检验r=r′是否成立,若成立则验证通过;否则验证不通过。
r=40f1ec59f793d9f49e09dcef49130d4194f79fb1eed2caa55bacdb49c4e755d1。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。