高新成
(东北石油大学现代教育技术中心,黑龙江 大庆 163318)
王莉利,李苏龙
(东北石油大学计算机与信息技术学院,黑龙江 大庆 163318)
基于RSA算法的图像加密系统设计与实现
高新成
(东北石油大学现代教育技术中心,黑龙江 大庆 163318)
王莉利,李苏龙
(东北石油大学计算机与信息技术学院,黑龙江 大庆 163318)
随着互联网的快速发展,数字图像网络传输的安全问题日益突出。采用RSA非对称的加密体制,提出了一套完整的基于RSA算法的图像加密解决方法,并对多种算法进行优化。试验数据测试表明,该方法具有加密、解密速度快,密钥复杂破译难度大,网络传输安全性高等优点。
RSA;图像加密;算法优化;图像安全
图像数据的获取、传输和处理已经遍及了数字时代的各个角落,图像的安全问题日益严重,尤其是在军事、商业和医疗等特殊领域[1]。RSA是一种目前被公开应用的加密算法,它采用非对称的加密体制[2]。下面,笔者在研究图像加密算法的基础上,将RSA算法应用到图像加密技术中,重点研究了算法优化、密钥生成、密钥分发和文件传输等内容,提出了一套完整的数字图像加密和解密解决方案。
RSA算法采用一种非对称密码加密体制,在整个加密过程中密钥和算法独立分开,使得密钥更能有效的等到分配[3]。其采用大素数因子分解的难度来保障安全性,目前,大素数分解问题仍然没有很好的解决方法[4]。
RSA算法加密的基本步骤如下:
Step1 选取不同的2个大素数a,b,然后计算2个数乘积m=a×b。
Step2 选取大整数加密密钥d,要求d与(a-1)×(b-1)互质。
Step3 求解密密钥e,e×d =1 mod(a -1)×(b -1)。
Step4 将明文P加密为密文C(C=Pdmod m),密文C解密为明文P(P=Cemod m)。
根据以上步骤可以看出,只知道m和d不能计算出解密密钥e,可见,任何人都可以对明文P进行加密,但只有获得授权许可后才能对密文C进行解密。
RSA图像加密流程设计是先对图像进行读取并转化成十六进制数据流;然后生成RSA算法所需密钥,将密钥与图像进行幂乘及取模运算,生成十进制数据;最后将数据转换为字符串数据流进行保存。其中,最重要的是密钥的生成[5,6],其决定最后图像加密效果。密钥的生成过程包括自动生成大素数并存储、对大素数进行算术运算、大数幂模与乘模运算和素数的自动生成4部分,具体加密流程如图1所示。
根据RSA图像加密流程,设计图像加密功能,主要包括RSA图像加密、解密和密钥生成等功能。系统功能模块如图2所示。
图1 RSA图像加密流程图
1)数字图像加密。对数字图像进行字节流的读取并转换为十六进制流,应用RSA算法对十六进制流进行加密,将加密后的数据转化为文本输出。
2)数字图像解密。加载加密后图像文件,利用密钥对其进行解密,对加密的图像进行还原。
图2 系统功能模块图
3)加密解密预览。在数字图像加密解密过程中,确保待加密及解密后的数字图像可视化。
4)密钥自动生成。RSA算法需要用户自定义输入2个大素数,主要实现自动生成大素数及密钥以减少用户操作,并能确保密钥使用的素数足够大。
5)密钥长度设定。用户可根据不同情况设定密钥的长度,能够灵活控制加密和解密速度。
6)密钥文件导出。以文件形式导出密钥文件,确保传输或存储过程的安全性。
7)密钥文件导入。对导出的密钥文件进行读入,具有识别功能。可以识别本软件导出的密钥文件,并对内容检查,确保导入文件安全。
8)密钥输入。解密时支持手动输入加密处理的密钥串,确保解密操作安全。
9)文件打印。实现对密钥文件的打印,可以更好的保存私钥。
10)文件传输。实现加密后的文件及图像直接传输,方便快捷且能更好的确保安全。
4.1 RSA密钥的大数存储
RSA算法生成密钥需要2个大素数为21024或更大比较安全[7]。但编程语言中unsigned int类型最多存储2个字节,远远小于RSA安全密钥长度。笔者设计单元线性数组实现大素数存储,解决编程中大素数的存储问题。首先设置一个以unsigned为单元的线性数组用来存储大素数,定义2个无符号整数z和 n来控制存储单元数,z是分配空间的单元数,如果大素数的长度超过unsigned数组的预定义数组长度,z会随着数字变大不断增大;n表示当前存储大素数已占用单元数。每个大素数最大可以达到232*占用单元数满足RSA的各种运算。
4.2 RSA密钥的大数运算
由于生成的大素数超过21024,原有数据运算方式不再适用。在大数存储基础上采用类间派生与关联方式实现大数运算。定义flex_unit派生得到vlong_value类实现新的运算函数,将原vlong_value类关联到新类vlong中,在新vlong类实现运算符重载。本类运算是按一定数制对数字的计算,乘除和取余也都按照竖式运算的原理实现。加运算的核心代码如下:
vlong operator +( const vlong& x, const vlong& y )
{ vlong result = x;
result += y;
return result; }
4.3 大素数幂模与乘模运算优化
幂模运算是RSA 算法中比重最大的计算,其主要决定生成最后的公钥和私钥,直接地决定了RSA 算法的性能[8]。依据乘模的性质 ,把幂模运算转换成乘模运算,实现思想是指数不断的对分,具体流程如图3所示。
图3 幂模转换乘模运算流程图
乘模运算能够提高运算速度,通常对于千位以上的二进制整数n,利用普通除法求模运算速度很慢[9]。笔者采用Montgomery算法[10]实现幂乘运算的优化来提高加密速度,改进思想是先选取与模数m互素的基数Y(Y=2k),m为奇数满足2k-1≤m<2k,再选取Y-1(0< Y-1 4.4 算法中素数自动生成及优化 笔者采用Eratosthenes筛选法[11]对素数筛选进行优化,优化策略是对各小素数因子求模,得到当前a在素数搜索范围内的最小倍数在b[]中的对应位置,继续后移a个位置,直到将a在搜索范围内的所有倍数全部找到;在完成对所有小素数因子的类似操作后,其倍数在搜索范围内的位置标记b[r]被全部标记为0。其流程如图4所示。 图4 素数搜索除去小素数因子倍数流程图 笔者采用费马小定理[12]对素数测试进行优化,化策略是选取一个整数P,要求与a互素,并满足关系式为Pa-1mod a=1,输入大整数a满足关系式可能不是素数,需要改变P完成多次测试,测试后这个数很大概率为素数。 系统设计采用分层结构,上层界面设计采用C#语言,底层加密算法开发采用C++语言,通过调用RSA算法的C++类库和封装的DLL组件以及引用DLL的.NET类等,逐步实现完成系统中各项功能与界面。 图像加密操作过程:首选将待加密图像载入,其次读取并存储为二进制List和转换为十六进制数据,然后调用前面自动生成的密钥进行幂模运算,最后输出加密后文本。具体图像加密过程和加密效果如图5和图6所示。 图5 图像加密操作界面 图6 加密后记事本打开效果 图像解密操作过程如下:首选载入待解密文件,然后导入加密过程密钥,最后输出解密后文件。 6.1 密钥生成试验结果与分析 1)底数A对密钥生成时间影响。在底数A的试验测试中,n取512位和1024位,小素数因子个数NP取值300,A值选取4到6个,测试结果如表1所示。 表1 底数A对密钥生成时间的影响 表1结果表明,采用512bit密钥对随机密钥的产生时间影响不大,而采用1024bit密钥生成时间有着明显差距,A取6个值时生成随机密钥的时间比取4个值时长大很多。为保证密钥生成速度和素数的准确程度,在实际使用时取A为5个值。 2)n的位数对密钥生成时间影响。在加密位数n的试验测试中,A取值2、3、5、7,NP取300,n值自动改变,进行5次随机密钥生成,测试结果如表2所示。 表2 加密位数n密钥生成时间的影响 表2结果表明,随着加密位数的增加,密钥生成需要的时间显著增加,并且每一行中的最大最小值差距也呈增长趋势。 3)小素数因子个数NP对密钥生成时间影响。在小素数因子个数NP的测试中,A取值2、3、5、7、11,n取512位和1024位,测试结果如表3所示。 表3 小素数因子NP对密钥生成时间的影响 通过表3结果发现,NP为300、n为1024bit时与表2中A为2、3、5、7、11,n为1024bit中一行参数设置完全一致,但平均耗时相差6.5s。可见对于长密钥,同一种情况测试5个数据取均值并不能精确的说明问题。 6.2 加密解密试验结果与分析 1)加密文件大小与消耗时间影响分析。选取大小为50、100、150、200和250Byte这5种图像数据文件,随机生成2组长度512bit和1024bit的密钥。用同样的密钥对大小不同的文件完成公钥加密和私钥解密试验,记录加密文件大小与消耗时间的关系,如表4所示。 表4 加密文件与消耗时间关系 表4结果表明,对于使用同一公钥加密文件时,文件越大加密过程中使用时间越长。对于一定的加密位数,私钥解密所需要的时间比公钥加密时间长;对于一定大小的文件,密钥长度越长,私钥解密与公钥加密的耗时比越大。 2)加密字节步长对效率的影响分析。选取一个480Byte长的文件作为加密对象,分别对512bit完成公钥加密和私钥解密试验,记录加密和解密使用的时间,如表5所示。 表5 加密字节步长对效率的影响 表5结果表明,加密步长设置越大,加密和解密运算速度越快,加密后生成的文件体积越小。所以在使用RSA加密时,设置使用合适的数据分块也是提高加密速度的关键。 6.3 系统运行效率分析 通过试验发现系统运算消耗的时间大部分集中在C++类库,表现在幂模运算和寻找素数对时间的消耗最大,笔者通过对幂模运算和素数筛选等相关算法进行优化,运算效率有了较大提高,同时,对文件进行加密解密时,先将文件按一定的数据结构读入内存,然后从内存中读取运算数据进行加密或解密操作,大大减少了图像输入和输出的执行时间。 重点研究了RSA算法在图像加密和解密中的关键技术,提出了一种高效的基于RSA算法的图像加密方法,同时对素数筛选、求模等关键算法进行优化,进一步提升加密准确性和加密速度。通过对密钥生成和加密解密试验数据的对比分析,该方法不仅提高了加密速度,增加了破译难度,增强了网络传输安全性,而且还适用于任意二进制和文本文件等各种数据,有良好的推广应用价值。 [1]王秋红. 密码学基本原理综述[J]. 科技资讯, 2011(33) :52~53. [2]吉胜军. 基于信息隐藏的软件加密方案[J].大众科技, 2010(8): 38~39. [3]Sarkar S,Maitra S. Cryptanalysis of RSA with two decryption exponents[J]. Information Processing Letters,2009 (5):1235~1238. [4]杨昔阳,李志伟. 基于RSA的数字图像加密算法[J]. 福建师范大学学报(自然科学版), 2009(6):28~32. [5]邓从政,罗永超.一种基于RSA的数字图象加密技术及其快速实现[J]. 通信技术, 2009(12):67~69. [6]Brier E,Chevallier-Mames B,Ciet M,et al.Why One Should Also Secure RSA Public Key Elements. Lecture Notes in Computer Science,2006. [7]Fouque P A,Guillermin N,Leresteux D,et al. Attacking RSA-CRT signatures with faults on montgomery multiplication[J]. Journal of Cryptographic Engineering, 2013(1) :1021~1024. [8]刘平,赵焕平. 改进RSA算法的分析研究[J]. 计算机与现代化, 2013(7):76~79. [9]姚霁. RSA算法中大素数硬件生成方法研究与设计[J]. 科学技术与工程,2013(1):212~214. [10]曾为民,刘晶晶, 陈光化,等. 基于Montgomery算法的RSA密码协处理器设计[J]. 微电子学与计算机,2015(8):115~119. [11]孙东雪. 基于Eratosthenes算法快速求解质数的程序设计[J]. 科技传播,2014(6):245~247. [12]黄嘉威. 多项式除法解高次同余[J]. 数学学习与研究,2015(9):104~106. [编辑] 张涛 2016-06-27 国家自然科学基金项目(41574117) ;黑龙江省教育科学规划重点课题(GJB1215013, GJB1215018);黑龙江省高教学会教育科研课题(16G154,16G160, 16Q117)。 高新成(1979-),男,博士,副教授,现主要从事数据处理与信息安全等方面研究工作;E-mail:gxc@nepu.edu.cn。 TP399 A 1673-1409(2016)25-0014-06 [引著格式]高新成,王莉利,李苏龙.基于RSA算法的图像加密系统设计与实现[J].长江大学学报(自科版),2015,13(25):14~19.5 系统实现界面
6 试验测试与系统分析
7 结语