一、前言

加密技术是一门古老而深奥的学科,长期以来,都应用在很小的范围,如军事、外交、情报等部门。

公元前405年,斯巴达的将领就使用了原始的错乱密码;公元1世纪,罗马皇帝凯撒就使用了有序的单表代替密码。中国古代出现的“符”,也是一种数据加密的方法。

20世纪初,电子通讯技术的发展,尤其是两次世界大战中,密码通讯和第三方解密的较量更为激烈。

但计算机技术的出现,互联网技术的迅猛发展,到今天,有成千上万的组织和个人需要保护自己的隐私数据,需要保护相互通讯中的数据安全,这就为数据加密解密提供了用武之地。

那什么是加密和解密呢?简单来说:

加密,即采用一些方式对数据进行处理后,使数据从表面上看,已经不能表达出原有的意思。

解密,就是对加密过的数据采用某些方法,去还原原有数据面貌,从而了解所包含信息的真实意图。

 

二、名词解释

明文:待加密的报文

密文:加密后的报文

密钥:加密过程中或解密过程中输入的数据

算法:将明文和密钥相结合进行处理,生成密文的方法,叫加密算法;或将密文和密钥相结合进行处理,生成明文的方法,叫解密算法。

 

三、加密技术分类

(一)单向加密

将数据进行计算变成另一种固定长度的值,而且这种行为不可逆。

这种加密算法具备几个特点:

定长输出,碰撞几率极低

相同消息反复加密获得同样的密文

雪崩效应,即使微小的单个字节的变化,也能引起加密结果的巨大变化

密文不可逆,即从密文不可以推出原明文。

常用算法

MD5、SHA1、、SHA256、SHA384、SHA512

 

(二)对称加密技术

使用同一个密钥,对数据镜像加密和解密,这种加密技术,称为对称加密。

常用算法:

DES,3DES,IDEA,AES

优点

算法公开、计算量小、加密速度快、加密效率高

缺点

不同通讯双方使用不同密钥,导致密钥过多,难以管理

通讯双方密钥交换,无法保证安全

无法验证发送者和接受者身份

数据完整性无法保证

 

(三)非对称加密技术

Public-key cryptography,即公开密钥加密,又称非对称加密。在这个加密过程中,需要一对密钥,不公开的密钥称为私钥,公开的那一个密钥称为公钥。

常用算法:

RSA,DSA,EIGamal

优点

密钥数目较少。

从一对密钥中的任何一个密钥都不能计算出另一个密钥。

使用一对密钥中的任何一个加密,只有另一个密钥才能解密。如果截获公钥加密数据,没有私钥也无法解密。

缺点

算法复杂,加密解密速度要慢

密钥交换也不是非常安全

 

应用场景

1、A和B之间通信,首先互相发送各自的公钥给对方

2、A发数据给B,A将用B的 公钥加密 数据后发送给B

3、B收到这个数据后,B使用自己的私钥来解密数据。其他人截获了A发出的数据也没有用,他没有私钥。

注:如果2、3步骤中,A发给B的用B公钥加密的数据被C掉包,即使A的数据中,有自己数据的指纹信息,但是由于B的公钥是公开的,任何人都能获取B的公钥,C就可以做一个一样格式的数据包给B。B无法验证这就是A发过来的。

 

4、如果A用自己的 私钥加密 数据后,发送给B

5、B使用A的公钥解密数据成功,就能证明这段数据数据确实是A是发送者。

身份认证:  

以上步骤4、5中使用私钥加密后发布数据,数据的接受者可以使用发布者的公钥来验证数据的完整性,接受者由此可知这条信息确实来自私钥拥有者,这也被称为数字签名。解决了数据的不可否认性。

 

四、安全网络通信模型

从以上的介绍中可以看出,各种加密算法都有其特点和适用性:

  • 使用非对称加密,发送者A使用私钥加密,接受者B能够验证数据的发送者A是谁,由于所有人都能使用发布者A公钥解密,这种方法只能适合发布公开的信息。

  • 接受者B的公钥是公开的,用它加密数据后发给B,有可能被截获掉包。

  • 非对称加密算法,加密速度很慢,强度高。对称加密算法,速度快,但是密钥交换是个问题。

  • 单向加密不可逆,接收者无法还原到明文。

那么,就需要一种通信模型能够扬长避短,解决通信安全的问题,于是便有了下面的模型:

通信工作流程

1、发送者A准备好信息明文。

2、发送者A对信息进行哈希运算(单向加密算法),得到一个信息摘要。

3、发送者A使用自己的私钥(SK)对信息摘要进行加密,即数字签名,之后将其附件在发送的信息上。(实现不可否认性)

4、发送者A随机生成一个对称加密密钥,并使用它对发送的信息包括摘要进行对称加密,生成密文。

5、发送者A再使用接收方的公钥(PK)对第4步使用的随机对称密钥进行加密,之后将其附加至第4步生成的密文上,一并发给接收者B。

6、接收者B收到发送者A的密文后,首先使用自己的私钥(SK)解密出对称加密的密钥。

7、接收者B使用对称密钥解密密文,得到附加摘要的信息明文。

8、接收者B使用发送者的公钥(PK)解密摘要,获得哈希值

9、接收者B使用同样的哈希算法再次对信息明文计算,得到新的信息摘要,与解密后的摘要比对,如果一致,则说明收到的信息明文未被篡改。(保证数据完整性)

 

五、总结

以上的通信模型很好的解决了数据完整性、不可否认性,但这个模型的依赖的关键点是双方公钥。

这个模型中双方公钥来源无法验证,而且在通讯前,如何获得每个人的可信任的公钥也成了整个系统的关键。

因此,需要一套系统,能够解决以上存在的种种问题:身份认证、数据完整性、密钥交换、操作的不可否认性,它就是PKI。

PKI及用OpenSSL实现简单的PKI,请看下一篇博文