一种照片视频云端加密存储方法与流程

文档序号:16671440发布日期:2019-01-18 23:36阅读:535来源:国知局
一种照片视频云端加密存储方法与流程

本发明涉及云端数据安全存储,特别是照片视频的加密技术,具体是一种照片视频云端加密存储方法。



背景技术:

云存储是近年来工业界和学术界研究的热点,其中的安全问题受到了多方瞩目。云存储作为一种新兴的服务形式以其弹性配置、按需购买、易于维护等优点成为众多组织的存储选择。然而在云存储模式下,数据脱离了用户的控制范围,这引起了用户对服务器可靠性以及数据安全性的担忧。

当前大部分产品所提供的云存储服务,用户数据文件基本都是明文存储,数据在传输过程中随时都有被窃取的可能,这无疑是将用户的隐私暴露在外界,从而造成用户敏感信息的泄露。所以对文件进行安全加密显然已成为对文件安全保护最有效的技术手段。



技术实现要素:

为了解决现有技术中存在的上述技术问题,本发明提供了一种照片视频云端加密存储方法,采用改进的aes加密算法,该改进的aes加密算法包括:一、密钥扩展;二、s盒置换和逆s盒置换;三、行移位变换与逆向行移位变换;四、列混合变换和逆列混合变换;五、轮密钥加。

进一步的,所述密钥扩展包括:

按照列优先的方式将种子密钥排列成4*4矩阵,矩阵每一列称为一个32bit的字,将种子密钥从4个字节扩展成44个字,每一轮加密需要4个字;假设第一个字为w[0],第二个字为w[1]···依次类推,最后一个字为w[43];

前4个字用种子密钥初始化,然后,对数组w扩充40个新字;递归方式:

⑴若i不是4的倍数,那么w[i]=w[i-4]^w[i-1];

⑵若i是4的倍数,那么w[i]=w[i-4]^t(w[i-1]);其中t是一个函数。

函数t由3个部分组成:字循环、字节代换与轮常量异或;

⑶字循环:将一个字中的4个字节分别向左移动一个字节;即[x0,x1,x2,x3]变换为[x1,x2,x3,x0];

⑷字节代换:即s盒置换;

⑸轮常量异或:将前两步的结果与轮常量rcon[j]进行异或。

进一步的,所述s盒置换和逆s盒置换具体如下:

正s盒(sbox),逆s盒(invsbox)提前计算存储在代码中,字节代换简化成一个简单的查表操作;通过下标取出对应的值来映射操作,s盒置换使用正s盒,逆s盒置换使用逆s盒。

进一步的,所述行移位变换与逆向行移位变换具体如下:

行移位将字节矩阵通过简单的左循环移位操作;当密钥长为128bit,状态矩阵的第i行左移i个字节;逆行移位是还原行移位,状态矩阵向右循环移位,状态矩阵的第i行右移i个字节。

进一步的,所述列混合变换和逆列混合变换具体如下:

列混合算法使用gf()域算术特性替代

根据矩阵的乘法可知,在列混淆过程中,每个字节对应的值只与该列的4个值有关系;此处的乘法和加法都定义在gf(28)有限域上:

⑴将某个字节的值乘2,即该值的二进制位左移一位,如果该值的最高位为1,则还需要将移位后的结果异或00011011;

⑵乘法对加法满足分配率;

⑶各个值在相加时使用的是模2加法;

逆列混合操作同样使用gf()域上算术特性替换。

进一步的,所述轮密钥加具体为:

将128位轮密钥与状态矩阵中的数据进行异或操作。

进一步的,当需要处理待处理数据不是分组数据的整数倍时,采取密文挪用的方法,设分组长度为blen;待加密/解密处理的数据为d,长度为dlen;待处理剩余的数据为rd,长度为rdlen,已经处理数据s;加密过程如下:

步骤(1)当rdlen>=blen,即剩余数据大于分组长度,转步骤(2);否则,转步骤(3);

步骤(2)从rd的头部取大小为blen的数据作加密操作,所得数据拼接到s尾部,转步骤(1);

步骤(3)若rdlen>0,即剩余数据不够一个分组。在已经加密的数据s末尾取出大小为blen-rdlen的数据与rd拼接构成一个长度为blen的分组数据块,对其加密并将结果拼接到已经加密数据后,转步骤(4);

步骤(4)若rdlen==0,所有数据加密完成,结束加密。

进一步的,解密过程如下:

step1:当rdlen>2*blen,转step2;否则,转step3。

step2:rd的头部取出blen长的数据作解密操作,结果拼接到s尾部,转step1。

step3:当rdlen=2*blen,转step4;否则,转step5。

step4:取出rdlen数据解密。直到rdlen==0;结果拼接到s尾部,转step6。

step5:取出剩余数据rd末尾blen大小的数据块并作解密操作,剩余的rd-blen大小数据块记作rd’,得到数据块data2;对剩余的待解密数据rd’与data2的头部blen-rd’len的数据进行拼接、解密,得到data3;顺序拼接s,data3,data2的末尾rd’len个位数据,得到完整解密数据,转step6;

step6:所有密文均被解密成原文,结束解密。

进一步的,系统主进程实现加密解密操作,读文件操作由文件读进程实现,写文件操作由文件写进程实现;待处理数据和待写入文件数据缓冲区使用循环队列实现,主进程直接在缓存区读取数据,并将数据存入写缓冲区。

10.如权利要求1所述的照片视频云端加密存储方法,其特征在于:还包括对数据库加密,采用基于字段的加密方式。

本发明基于文件的数据流加解密技术,将用户资源在客户端进行加密后再传输至云端,用户访问数据资源时,又在客户端进行解密。也就是说云端存储的是加密的数据文件,不存在传输过程中数据明文的泄露。通过数据加密,有效的保证了个人数据的安全,以及在通信线路上的内容不被泄露。同时系统采用改进对称加密技术,对资源进行加密的同时,对数据库中的数据项也进行加密,双重加密更加保证了资源的安全性传输。

附图说明

图1是加密和解密原理图;

图2是aes加密算法加密流程图;

图3是字节代换示意图;

图4是行移位示意图;

图5是加密实现过程示意图;

图6是解密实现过程示意图;

图7是文件处理过程示意图;

图8是在协议层为高层协议提供基本的安全服务示意图;

图9是es加解密流程图;

图10是s盒示意图;

图11是s-1示意图;

图12是正向行移位示意图;

图13是正向列混淆原理图;

图14是逆向列混淆原理图;

图15是种子密钥排列格式示意图;

图16是函数g的流程图。

具体实施方式

下面结合附图对本发明作进一步说明。

本发明对文件加密和解密,保证数据安全。信息或数据经过加密变换后,将明文变成密文形式,表面上无法识别,只有那些经过授权的合法用户,掌握独有的秘密密钥,才能通过解密算法将密文还原成明文;而未授权的用户则无法获得明文。本发明采用如下措施:1、对信息进行加密。采用加密算法对信息进行加密存储和传输,使非法用户难以破解,不至于泄露保密内容。2、对数据库进行加密。

分组密码技术:对于文件加密,加密算法是整个系统的核心,其选择的依据一半根据系统的安全性要求进行确定,在满足安全性要求的前提下,尽可能选用速度快的加密算法。加密算法经历了rsa、des、3des发展到美国国家标准技术局发布的高级加密标准aes。aes作为des算法的替代者将成为未来数十年最重要的对称密码算法,是一个对称分组密码算法,分组长度和密钥长度均能分别被指定为128位、192位或256位。该算法具有以下特性:对所有已知的攻击具有免疫性;在各种平台上,其执行速度快而且代码紧凑。

在密码学中,需要通过加密加以保护而进行变换的原报文称为明文。明文经过变换成为一种不可直接辨读的隐蔽形式称为密文。

明文与密文的关系:

c=ek(m),

m=dk(c)。

其中:c是密文,m是明文,参数k叫做密钥。

e是加密或加密过程:完成明文到密文的变换过程。

d是解密或解密过程:是加密的逆过程,即由密文恢复出明文的过程。

对明文进行加密时所采用的映射函数或变换规则称作加密算法。

对密文进行解密时所采用的的(逆)映射函数或(逆)变换规则称作解密算法。加密和解密操作通常在密钥的控制下进行,在近代密码体系中加密密钥和解密密钥可以是不同的。其原理如图1所示。

对称加密技术,也称为分组密码技术,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来,而在大多数的对称算法中,加密密钥和解密密钥是相同的。

这种技术要求发送方用户和接收方用户在安全通信之前,商定一个密钥。这样发送方用户和接收方用户使用相同的密钥对信息进行加密和解密。

对称加密技术由于双方拥有相同的密钥具有易于实现和速度快的优点,所以广泛应用于通信和存储数据的加密和解密。另外,如何安全地将加密解密所使用的密钥传送给对方,也是一个必须考虑的问题。因此,对称加密技术的安全性依赖于密钥,泄露密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信安全至关重要。先阶段在电子商务中常用的对称加密算法有美国数据加密标准des(dataencryptionstandard)和高级加密标准aes(adcancedencryptionstandard)。

分组密码体制具有简捷、快速的特点,并且容易标准化,使其成为软硬件加密标准的主流。本发明主要针对文件级的加解密,故鉴于上述优点采用分组加密技术的aes高级加密算法。

aes高级加密算法流程:

aes加密算法的处理单元是分组,分组的128bit数据(16字节)会按照顺序复制到4*4的状态矩阵(stat)中,所有变换都是基于状态矩阵完成的。aes变换是多轮迭代的轮变换实现的,迭代次数与密钥长度有关。轮变换包括4步变换,包括字节变换、行变换、列混合和密钥加。通过非线性变换、混合函数变换,将字节代换运算产生的非线性扩散,达到重复混合,使得加密完成后的分组扩散更均匀。轮密钥扩展将原始密码扩展成11组,每轮迭代使用不同的密钥。加密流程如图2所示。

算法实现:

①密钥扩展

按照列优先的方式将种子密钥排列成4*4矩阵,矩阵每一列就可以称为一个32bit的字。密钥扩展的目的就是将种子密钥有4个字节扩展成44个字,每一轮加密需要4个字。假设第一个字为w[0],第二个字为w[1]···依次类推,最后一个字为w[43]。

前4个字可以用种子密钥初始化,然后,对数组w扩充40个新字。递归方式:

⑴若i不是4的倍数,那么w[i]=w[i-4]^w[i-1]。

⑵若i是4的倍数,那么w[i]=w[i-4]^t(w[i-1]);其中t是一个函数。

函数t由3个部分组成:字循环、字节代换与轮常量异或。

⑶字循环:将一个字中的4个字节分别向左移动一个字节。即[x0,x1,x2,x3]变换为[x1,x2,x3,x0]

⑷字节代换:即s盒置换。

⑸轮常量异或:将前两步的结果与轮常量rcon[j]进行异或。

②s盒置换和逆s盒置换

如图3所示,s盒置换又称字节代换。正s盒(sbox),逆s盒(invsbox)提前计算存储在代码中,字节代换可以简化成一个简单的查表操作。通过下标取出对应的值就是这个映射操作,如图所示。s盒置换使用正s盒,逆s盒置换使用逆s盒。

③行移位变换与逆向行移位变换如图4所示,行移位的功能是将字节矩阵通过简单的左循环移位操作。当密钥长为128bit,状态矩阵的第i行左移i个字节。逆行移位就是还原行移位,状态矩阵向右循环移位,状态矩阵的第i行右移i个字节。

④列混合变换和逆列混合变换列混合算法:使用gf()域算术特性替代

根据矩阵的乘法可知,在列混淆过程中,每个字节对应的值只与该列的4个值有关系。此处的乘法和加法都定义在gf(28)有限域上。需要注意如下几点:

⑴将某个字节的值乘2,即该值的二进制位左移一位,如果该值的最高位为1(即该数值不小于128),则还需要将移位后的结果异或00011011。

⑵乘法对加法满足分配率,例如:

⑶此处矩阵乘法与矩阵的乘法不同,各个值在相加时使用的是模2加法(相当于异或运算)。

逆列混合操作同样使用gf()域上算术特性替换,只是多项式c(x)不同。

⑤轮密钥加

将128位轮密钥与状态矩阵中的数据进行异或操作。因为异或操作的逆操作即是本身,所以解密轮密钥加也是本身。

优化设计:

①密文挪用

aes算法是分组加密算法,所以需要处理待处理数据不是分组数据的整数倍的问题。如果不处理这部分数据,那么加密解密以后得到的原始信息将在最后一个分组多出一部分错误信息,而没有被赋值的数据往往就是内存中的垃圾,从而影响正确信息的可读性。采取“密文挪用”的方法,设分组长度为blen;待处理(加密/解密)的数据为d,长度为dlen;待处理剩余的数据为rd,长度为rdlen。已经处理数据s。加密实现过程如图5所示。

步骤(1)当rdlen>=blen,即剩余数据大于分组长度,转步骤(2);否则,转步骤(3)。

步骤(2)从rd的头部取大小为blen的数据作加密操作,所得数据拼接到s尾部,转步骤(1)。

步骤(3)若rdlen>0,即剩余数据不够一个分组。在已经加密的数据s末尾取出大小为blen-rdlen的数据与rd拼接构成一个长度为blen的分组数据块,对其加密并将结果拼接到已经加密数据(除被取出的blen-rdlen的数据)后,转步骤(4)。

步骤(4)若rdlen==0,所有数据加密完成,结束加密。s为密文。

原文被分成n个组,第n个分组不足一个分组长度。前面n-2个分组直接加密即可,第n-1分组加密后要借给n分组然后对n分组加密。解密实现过程如图6所示。

step1:当rdlen>2*blen,转step2;否则,转step3。

step2:rd的头部取出blen长的数据作解密操作,结果拼接到s尾部,转step1。

step3:当rdlen=2*blen,转step4;否则,转step5。

step4:取出rdlen数据解密。直到rdlen==0;结果拼接到s尾部,转step6。

step5:取出剩余数据rd末尾blen大小的数据块(剩余的rd-blen大小数据块记作rd’)并作解密操作,得到数据块data2;对剩余的待解密数据rd’与data2的头部blen-rd’len的数据进行拼接、解密,得到data3。顺序拼接s,data3,data2,的末尾rd’len个位数据,得到完整解密数据,转step6。

step6:所有密文均被解密成原文。结束解密。

说明:密文被分成n个分组,前n-2分组直接解密。结尾部分,先取出后面一个分组,然后n-1分组和解密完的前面部分组成一个分组解密,然后拼接起来。

②多线程i/o优化

文件读取和加解密处理的速度是不匹配的,如每次处理一个分组就读写文件一次显然会处于空等状态,而且多次打开关闭文件相当费时间,而待加密的文件也是可大可小的,可能是几k的文本,也有可能遇到几个g的图像视频等,全部读取到内存中也是不可能的。考虑到以上问题,设置缓冲区。

文件处理过程如图7所示,系统主进程实现加密解密操作,读文件操作由文件读进程实现,写文件操作由文件写进程实现。待处理数据和待写入文件数据缓冲区使用循环队列实现,主进程直接在缓存区读取数据,并将数据存入写缓冲区。二、加密数据库技术。

数字经济时代,文件加密系统最重要的资源不仅包括有价值的数据,还包括存贮这些关键数据的地方—数据库。数据库安全保护是指保护数据库中的数据,防止无关人员或非授权人员对数据库中数据的窃取、篡改和破坏。数据库的突出特点是数据的集中存放和共享,保护这些数据不被窃取、破坏是非常重要的。现有的数据库系统已经采取了相关的安全措施,例如用户管理及口令控制、存储控制、视图机制、存储过程、触发器机制来保证数据的安全性和完整性。因此,在加密方式问题上,比较明智的做法是只对关键信息所在字段加密,即数据项加密,而对非关键性字段,则继续保留其原有的明文形式。本发明所涉及的数据库加密机制就是建立在这种基于字段的加密方式之上的。

一个字段唯一地被一个数据密钥进行加密解密,同样地,一个数据密钥也只能用来对一个字段的数据进行加密。这样的加密方式,就称之为基于字段的加密方式。对表中的某个字段中的数据进行加密之后,要想通过sqlserver服务器得到数据并浏览文件,必须通过密钥才能解密字段。

这样就形成了在内层,数据库方面,存储文件的字段被加密,万一文件泄露,外部人员在没有密钥的情况下也无法得到有价值的信息;在外层,所有文件全部经过高级加密算法作加密处理后在存入云端数据库,只有拥有解密密钥的合法用户能用与其相关的密钥成功解密密文数据得到有用的文件。

aes加密数据块分组长度必须为128比特,密钥长度可以是128比特、192比特、256比特中的任意一个(如果数据块及密钥长度不足时,会补齐)。

aes共有ecb、cbc、cfb、ofb、ctr五种模式。

1、aes是基于数据块的加密方式,也就是说,每次处理的数据是一块(16字节),当数据不是16字节的倍数时填充,这就是所谓的分组密码(区别于基于比特位的流密码),16字节是分组长度。

2、分组加密的几种方式

ecb:是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。

cbc:是一种循环模式,前一个分组的密文和当前分组的明文异或操作后再加密,这样做的目的是增强破解难度。

cfb/ofb实际上是一种反馈模式,目的也是增强破解的难度。

ecb和cbc的加密结果是不一样的,两者的模式不同,而且cbc会在第一个密码块运算时加入一个初始化向量。

实施例

如图8所示,在协议层为高层协议提供基本的安全服务,ssl纪录协议针对http协议进行了特别的设计,使得超文本的传输协议http能够在ssl运行。纪录封装各种高层协议,具体实施压缩解压缩、加密解密、计算和校验mac等与安全有关的操作,双重保证了传输的安全性。

aes加密算法涉及4种操作:字节替代(subbytes)、行移位(shiftrows)、列混淆(mixcolumns)和轮密钥加(addroundkey)。图9给出了aes加解密的流程,从图中可以看出:1)解密算法的每一步分别对应加密算法的逆操作,2)加解密所有操作的顺序正好是相反的。正是由于这几点(再加上加密算法与解密算法每步的操作互逆)保证了算法的正确性。加解密中每轮的密钥分别由种子密钥经过密钥扩展算法得到。算法中16字节的明文、密文和轮子密钥都以一个4x4的矩阵表示。

字节代替的主要功能是通过s盒完成一个字节到另外一个字节的映射。。这里直接给出构造好的结果,图10为s盒,图11为s-1(s盒的逆)。s盒用于提供密码算法的混淆性。

s和s-1分别为16x16的矩阵,完成一个8比特输入到8比特输出的映射,输入的高4-bit对应的值作为行标,低4-bit对应的值作为列标。假设输入字节的值为a=a7a6a5a4a3a2a1a0,则输出值为s[a7a6a5a4][a3a2a1a0],s-1的变换也同理。

例如:字节00000000b替换后的值为(s[0][0]=)63h,再通过s-1即可得到替换前的值,(s-1[6][3]=)00h。

行移位是一个4x4的矩阵内部字节之间的置换,用于提供算法的扩散性。

1)正向行移位正向行移位用于加密,其原理如图12所示。其中:第一行保持不变,第二行循环左移8比特,第三行循环左移16比特,第四行循环左移24比特。

假设矩阵的名字为state,用公式表示如下:state’[i][j]=state[i][(j+i)%4];其中i、j属于[0,3]。

2)逆向行移位

逆向行移位即是相反的操作,即:第一行保持不变,第二行循环右移8比特,第三行循环右移16比特,第四行循环右移24比特。

用公式表示如下:state’[i][j]=state[i][(4+j-i)%4];其中i、j属于[0,3]。列混淆:利用gf(28)域上算术特性的一个代替,同样用于提供算法的扩散性。

1)正向列混淆正向列混淆的原理如图13所示:

根据矩阵的乘法可知,在列混淆的过程中,每个字节对应的值只与该列的4个值有关系。此处的乘法和加法都是定义在gf(28)上的,需要注意如下几点:

(1)将某个字节所对应的值乘以2,其结果就是将该值的二进制位左移一位,如果原始值的最高位为1,则还需要将移位后的结果异或00011011;[1];

(2)乘法对加法满足分配率,例如:07·s0,0=(01⊕02⊕04)·s0,0=s0,0⊕(02·s0,0)(04·s0,0);

(3)此处的矩阵乘法与一般意义上矩阵的乘法有所不同,各个值在相加时使用的是模28加法(异或运算)。

下面举一个例子,假设某一列的值如下所示:

运算过程如下:

其中:

01·46=01000110b

01·a6=10100110b

则:

在计算02与c9的乘积时,由于c9对应最左边的比特为1,因此需要将c9左移一位后的值与(00011011)求异或。同理可以求出另外几个值。

2)逆向列混淆逆向列混淆的原理如图14所示。

密钥扩展过程说明:1)将种子密钥按图15的格式排列,其中k0、k1、……、k15依次表示种子密钥的一个字节;排列后用4个32比特的字表示,分别记为w[0]、w[1]、w[2]、w[3];)

2)按照如下方式,依次求解w[j],其中j是整数并且属于[4,43];)

3)若j%4=0,则w[j]=w[j-4]⊕g(w[j-1]),否则w[j]=w[j-4]⊕w[j-1];)

函数g的流程如图16所示。

a)将w循环左移8比特;)

b)分别对每个字节做s盒置换;)

c)与32比特的常量(rc[j/4],0,0,0)进行异或,rc是一个一维数组,其值如下:

rc={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x1b,0x36})。

rc的值只需要有10个,而此处用了11个,实际上rc[0]在运算中没有用到,增加rc[0]是为了便于程序中用数组表示。由于j的最小取值是4,j/4的最小取值则是1,因此不会产生错误。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1