当前位置:文档之家› 加密与解密技术

加密与解密技术

加密与解密技术计算机网络的广泛应用,产生了大量的电子数据,这些电子数据需要传输到网络的许多地方,并存储起来。

对于这些数据,有意的计算机犯罪和无意的数据破坏成为最大的威胁。

原则上来说,对电子数据的攻击有两种形式,一种称为被动式攻击,就是非法地从传输信道上截取信息,或从存储载体上偷窃、复制信息。

另一种称为主动进攻,就是对于传输或存储的数据进行恶意的删除、篡改。

实践证明,密码技术是防止数据攻击的一种有效而经济的方法。

我们把消息的发送者称为信源;消息的目的地称为信宿;没有加密的消息称为明文;加密后的消息称为密文;用来传输消息的通道称为信道。

通信时,明文M通过变换E得到密文C,即C=E(u, v, …, w; m)。

这个过程称为加密,参数u, v, …, w称为密钥。

这里所说的变换E,就是加密算法。

从密文C恢复到明文M,这个过程称为解密。

解密算法D是加密算法E的逆运算。

加密密钥与解密密钥相同,或者加密密钥与解密密钥可以简单相互推导的密码体制称为对称密码体制。

现代密码学修正了密钥的对称性,加密、解密密钥是不同的,也是不能(在有效的时间内)相互推导的,称为非对称密码体制。

1.对称密钥密码体制及典型算法对称算法(SymmetricAlgorithm),有时又称为传统密码算法,在大多数对称算法中,加密密钥与解密密钥是相同的,所以也称为秘密密钥算法或单密钥算法。

它要求发送方和接收方在安全通信之前,商定一个密钥。

对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信至关重要。

对称加密的优点在于算法实现的效率高、速度快。

对称加密的缺点在于密钥的管理过于复杂。

常用的对称加密算法有DES、IDEA等。

1) DES算法简介DES(Data Encryption Standard:数据加密标准)是由IBM公司研制的一种加密算法,美国国家标准局于1977年公布把它作为非机要部门使用的数据加密标准。

二十年来,它一直活跃在国际保密通信的舞台上,扮演了十分重要的角色。

DES是一个分组加密算法,它以64位为分组对数据加密;同时DES也是一个对称算法。

它的密钥长度是56位(因为每个第8位都用作奇偶校验),密钥可以是任意56位的数,而且可以任意时候改变。

其保密性依赖于密钥。

DES算法分如下3个步骤进行。

(1) 对给定的64位的明文x, 通过一个初始置换函数IP来排列x, 从而构造出长为64位的串X0,记X0为IP(X)= L0R0,L0为表示X0的前32位,R0表示X0的后32位。

(2) 计算16次迭代,设前i-1次迭代结果为Xi-1= Li-1Ri-1,则第i轮迭运算为:Li= Ri-1, Ri= Li+1+f(Ri-1, ki)其中,Li-1表示Xi-1的前32位,Ri-1表示Xi-1的后32位,+表示两位串的“异或”运算,f主要是由一个称为S盒的置换构成。

Ki是一些由初始的56位经过密钥编排函数产生的48位长的块。

(3) 对位串L0R0作逆置换IP-1得密文y,y= IP-1(L16R16),置换IP-1是IP 的逆置换。

DES算法的示意图如下所示2) IDEA算法简介国际数据加密算法(InternationalData Encryption Algorithm, IDEA)是1992年来学嘉等人设计的算法。

该算法的前身是1990年公布的推荐加密标准(ProposedEncryption Standard, PES)算法。

IDEA分组长度为64b,密钥长度为128b。

其使用的运算非常简单,只需要异或,模216加和模(216+1)乘,这些算法都很容易使用硬件或者软件实现(而DES 算法便于用硬件实现,难以用软件实现),所有运算都是使用基于16b数运行,很容易在现在16b, 32b, 64b的CPU上实现。

由于这一特性,使用软件实现的IDEA算法的运算速度比DES算法要快。

由于IDEA算法使用的密钥长度是128b,远远大于DES算法的56b,对于128b的密钥来说,使用穷举法攻击是不现实的。

2不对称密码加密算法不对称密码加密算法又称为双密钥和公钥密码体制,是于1976年由Diffie和Hellman提出的。

与对称密码体制相比,非对称密码体制有两个不同的密钥,其中一个密钥称为私钥;另一个密钥公开,不需要保密。

公钥密码系统的工作方式为:任何人都可以将自己加密的公钥公布在网络或其他可以公开的地方。

其他人欲传送信息给接收方时,可使用该接收方所公布的公钥将信息加密之后传送给接收方。

接收方收到加密后的信息时,就可以利用拥有的与此公钥相对应的私钥,将该加密信息解决出来。

所以公开密钥密码系统的通信双方,一需要事先通过安全秘密管理交换密钥,即可进行通信。

RSA密码体制是一个常用的非对称的密码体制,它是一个既用于数据加密也能用于数字签名的算法。

RSA的安全性依赖于大素数分解。

公钥和私钥都是两个大素数(大于100个十进制位)的函数。

据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。

1)密钥的产生(1)选择两个大素数,p和q。

(2)计算n=p*q(3)随机选择加密密钥e,e必须满足以下条件:GCD(e, ¢(N))=1其中¢为Euler's Function, ¢(N)为小于N,且与N互质的整数的个数。

在此¢(N)=(p-1)*(q-1)(也有些做法是取LCM((p-1)*(q-1)))。

(4)利用Euclid算法计算解密密钥d, 满足d=e(-1) mode ¢(N)。

产生出加密公钥e,N与解密密钥d之后,使用者将e及N公开,就可以使用它们来执行加解密的工作了。

2)加密程序使用者将其欲加密的信息M,在取得对方的公钥e及N之后,执行模(mod,即同余的运算,C=M mod N,C等于M除以N的余数)指数运算,就可获得密文C。

C=M(e上标) mod N (a)然后通过网络传送到通信的对方。

3)解密程序对方在收到密文C后,以自己的私钥执行下面的解密程序,解密时作如下计算M=C(d上标) mod N (b)即可获得明文M。

RSA可用于数字签名,方案是用(b)签名,用(a)验证。

具体操作时考虑到安全性和M信息量较大等因素,一般先作HASH运算。

RSA的安全性依赖于大数分解,由于进行的都是大数计算,使得RSA最快的情况也是DES的百分之一。

无论是软件不是硬件实现,速度慢一直是RSA的缺陷,因此一般来说,RSA只用于少量数据加密。

散列函数和数字签名1.MD5散列算法散列函数是一种公开的数学函数。

散列函数运算的输入信息叫做报文,运算后所得到的结果叫做散列码或者叫做消息摘要。

散列函数h=H(M)具有如下一些特点。

(1)不同内容的报文具有不同的散列码,给定M,要找到另一消息M,使H(M)=H(M‘)很难。

(2)散列函数是单向的,给出M,容易计算出h。

给定h,根据h=H(M)反推M却很难。

(3)对于任何一个报文,无法预知它的散列码。

(4)散列码具有固定的长度,不管原始报文如何,通过散列函数运算后的散列码具有一样的长度。

由于散列函数具有这些特征,因此散列函数可以用来检测报文的可靠性。

接收者对收到的报文用与发送者相同的散列函数进行计算,如果得到与发送者相同的散列码,则可以认为报文没有被篡改,否则报文就是不可信的。

常见的散列函数有MD5,SHA和HMAC等。

MD5(Message Digest 5)是一种非常著名的散列算法,已经成为国际标准。

它是在MD4的基础上改进的算法,是具有更好的安全性能的散列算法。

MD5散列算法对输入的任意长度消息产生128位(16个字节)长度的散列值(或称消息摘要)。

MD5算法包括以下4个步骤。

(1)附加填充位。

首先对输入的报文进行填位补充,使填充后的数据长度模512后余448.如果数据长度正好模512余448,则需要增加512个填充位,也就是说填充的个数为1~512位。

填充位第一个位为1,其余全部为0.(2)补足长度。

将数据长度表示为二进制,如果长度超过64位,则截取其低64位;如果长度不足64位,则在其高位补0.将这个64位的报文长度补在经过填充的报文后面,使得最后的数据为512位的整数倍。

(3)初始化MD缓存器。

MD5运算要用到一个128位的MD5缓存器,用来保存中间变量和最终结果。

该缓存器又可看成是4个32位的寄存器A,B,C,D,初始化为:A:01 23 45 67 B:89 ab cd ef C:fe dc ba 98 D: 76 54 32 10(4)处理数据段。

首先定义4个非线性函数F,G、H、I,对输入的报文运算以512位数据段为单位进行处理。

对每一个数据段要进行4轮的逻辑处理,在4轮中分别使用4个不同的函数F、G、H、I。

每一轮以ABCD和当前的512位的块为输入,处理后送入ABCD(128位)。

2.数字签名与数字水印1)数字签名数字签名可以解决否认、伪造、篡改及冒充等问题。

具体要求:发送者事后不能否认发送的报文签名、接收者能够核实发送者的报文签名、接收者不能伪造发送发送者的报文签名、接收者不能对发送者的报文进行部分篡改、网络中的某一用户不能冒充另一用户作为发送者或接收者。

凡是需要对用户的身份进行判断的情况都可以使用数字签名,例如加密信件、商务信函、订货购买系统、远程金融交易和自动模式处理等。

数字签名方案一般包括三个过程:系统的初始化过程、签名产生过程和签名验证过程。

在签名产生的过程中,用户利用给定的算法对消息产生签名;在签名验证过程中,验证者利用公开验证方法对给定消息的签名进行验证,得出签名的有效性。

实现数字签名的方法有很多,目前采用得比较多的是非对称加密技术和对称加密技术。

虽然这两种技术的实施步骤不尽相同,但大体的工作程序是一样的。

用户首先可以下载或者购买数字签名软件,然后安装在个人计算机上。

在产生密钥对后,软件自动向外界传送公开密钥。

由于公共密钥的存储需要,所以需要建立一个鉴定中定(Certification Authority, CA)完成个人信息及其密钥的确定工作。

用户在获取公开密钥时,首先向鉴定中心请求数字确认,鉴定中心确认用户身份后,发出数字确认,同时鉴定中心向数据库发送确认信息。

然后用户使用私有密钥对所传信息签名,保证信息的完整性、真实性,也使发送者无法不论信息的发送,之后发向接收方;接收方接收到信息后,使用公开密钥确认数字签名,在使用这种技术时,签名者必须注意保护好私有密钥,因为它是公开密钥体系安全的重要基础。

如果密钥丢失,应该立即报告鉴定中心取消认证,将其列入确认取消列表之中。

其中,鉴定中心要立即认证信息的安全性并返回信息。

目前已经有大量的数字签名算法,如RSA、ElGamal、Fiat-Shamir、美国的数字签名标准/算法(DSS/DSA)、椭圆曲线等多种。

相关主题