王传俊
(烟台汽车工程职业学院,烟台,265500)
互联网技术的普及和发展使得人们的生活急速进入信息时代,在实现信息和资源共享的同时,数据的安全问题也变得越来越重要。每天有大量的数据通过互联网进行保存、处理和传递,为了保证数据在传输过程中的安全性,需要使用加密技术对数据进行加密和解密,避免数据在传输过程被泄露或篡改。对数据加密技术来说,它的核心是密码算法,通常采用高级语言(如C 语言)编写程序,来实现数据的加密。
根据分组密码学算法按照密钥的分配方式的不同,算法被分为:对称算法和非对称算法。对称加密算法中比较常用的算法包括DES、3DES 和ASE 等算法。非对称算法中比较常用的算法包括RSA、ECC 等算法。
下面就对其中较为典型的两种算法DES 和RSA 使用C 语言进行实现和对比分析。
1.1 DES(Data Encryption Standard 数据加密标准)是一种对称加密算法。对称加密算法是指加密和解密使用相同密钥的加密算法。它要求发送方和接收方在安全通信之前,商定一个密钥,这个密钥是对称算法的安全依赖。加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。因此,DES 算法的特点是算法公开,计算量小,加密速度快,加密效率高,适用于加密大量数据的场合。目前 DES 算法在POS、ATM、磁卡及智能卡(IC 卡)、加油站、高速公路收费站等领域被广泛应用。
DES 算法的原理是用输入64bit 明文对56bit 密钥进行加密,通过16 次迭代输出64bit 密文。由于加密密钥和解密密钥完全相同,明文分组分块加密,在对称加密原理中属于分组加密。
1.2 RSA(三位美国麻生理工学院的科学家:Ron Rivest、AdiShamirh 和 Leonard Adleman,三人姓氏开头字母拼在一起。)是一种非对称加密算法,也就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。在公开密钥密码体制中,加密密钥(即公开密钥)PK 是公开信息,而解密密钥(即秘密密钥)SK 是需要保密的。加密算法E 和解密算法D 也都是公开的。虽然秘密密钥SK 是由公开密钥PK 决定的,但却不能根据PK 计算出SK。RSA 的安全性依赖于大数的因子分解,但目前并没有从理论上证明破译RSA 的难度是否就等于大数分解。在互联网的数字签名和认证中常使用RSA 算法实现数据保护。
DES 算 法 中 只 用 到64 位 明 文 中 的56 位,而 第8、16、24、......64 位这8 个位并未参与DES 运算,而是将这8 位作为奇偶校验位。也就是说DES 的安全性是基于除了8,16,24,……64 位外的其余56 位的组合变化256 种才得以保证的。因此,在实际应用中,通常避开使用第8,16,24,......64 位作为有效数据位,而使用其它的56 位作为有效数据位,才能保证DES 算法安全可靠地发挥作用。
DES 算法常常采用按位置换。明文和密钥都按ASC Ⅱ码标准转化成二进制码,然后进行IP 置换,置换后的明文需要进行S 盒的非线性置换,在置换中将56 位置换成48 位,得到的48 位就是每一次循环中所用的密钥。在C 语言中,可以选择模块化处理:
int DES_SBOX(ElemType data[48]);
加密过程中去除奇偶校验位,将剩下的56 位分成两半。每部分在每一次循环中都左移位一次,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 次循环进行置换,代换,移位,最后输出64 位。生成子密钥C 语言程序实现如下:
RSA 的安全基于大数分解的难度。其公钥和私钥是一对大素数(100 到200 位十进制数或更大)的函数。RSA 的公钥、私钥的组成,以及加密、解密的公式可见于下表1 公钥、私钥的算法:
RSA 算法描述:
(1)选择一对不同的、足够大的素数p 和q。
(2)计算n=pq。
(3)计算f(n)=(p-1)(q-1),同时对p 和q 严加保密,不让任何人知道。
(4)找一个与n 互质的数e,且1<e<n。
(5)计算d,使得de ≡1 mod f(n)。这个公式也可以表达为d ≡e-1mod n
(6)公钥PK=(e,n),私钥SK=(d,n)。
(7)加密时,先将明文变换成0 至n-1 的一个整数M。若明文较长,可先分割成适当的组,然后再进行交换。但由于RSA 算法的主要缺陷是运算速度慢,因此在加密过程中要尽量减少幂运算的次数,在这里采用了加法剩余运算。
通过对两种算法的分析可以看出,RSA 算法的加密解密是一个非常复杂的计算过程,在对数据进行加密解密运算时需要进行大量模幂运算,密钥的复杂性直接影响了其运行速度。相对于DES 算法的速度慢很多,当数据量很小时,可以考虑采用RSA 加密算法。
DES 算法使用的加密密钥和解密密钥完全相同,这种对称密码算法可以加快加密解密的速度,当需要加密大量的数据时,采用DES 算法,会提高加解密速度。但其安全系数被降低。其次,采用DES 加密算法其本质就是对加密数据的二进制编码进行加密,加密时数据分组进行。在加密时,不会对内存中的比特流及存储方式等特性产生任何影响,只加密二进制代码本身。如果硬件条件一定,没有任何改变,则二进制编码长度会直接对加密时间造成影响,也就是文件越长需要的加密时间越长,文件越短所需的加密时间越短,加密时间和文件大小呈线性关系。加密时间的长短和文件格式无关。
表1 公钥、私钥的算法
DES 和RSA 是计算机数据加密技术应用最为广泛的算法之一, C 语言是比较常用的计算机高级语言,对大多数计算机初学者都容易接受。使用C 语言实现对DES 和RSA 算法的描述,能够使我们更好地理解加密算法的原理,从而有效地保护数据信息在传递过程中的安全性。
[1] 杨晓元,等) 计算机密码学[M])西安:西安交通大学出版社,2007.3.
[2] 卢开澄.计算机密码学[M].北京:清华大学出版社,2003.12.
[3] 隋涛.DES 与AES 数据加密算法探讨[J].湖北第二师范学语学报,2013.8,66-67.
[4] 吴明航.DES 和RSA 混合加密算法的研究[D].哈尔滨工业大学,2012.12,39-41.
[5] 时华. 基于VC++的DES 与RSA 混合加密算法的实现[J]. 科技信息(科学教研),2007,32:436.
[6] 王艳. 基于DES-RSA 的混合加密技术在数据库中的研究与应用[D].武汉理工大学,2013.