广泛使用的TCP/IP协议(严格说是TCP/IP协议簇)是在美国国防部赞助下开发出来的,当时参与研究开发的单位仅限于几所大学和科研机构,彼此都是可信赖的,因此开发过程中没有过多的考虑通信的安全性问题。
随着TCP/IP协议的INTERNET的广泛普及,谁也没有想到接入INTERNET的结点数量呈指数级增长,利用INTERNET解决的问题也越来越多。这时,INTERNET传输信息的安全问题也就逐渐暴露出来。
信息的安全性问题涉及许多方面,如用户A把某些涉密敏感信息发送给用户B时,不希望第三方看到,属于信息机密性问题;
一些信息不担心别人看到或者本身就是提供给别人看的,如国家政策、政府公文等,这些信息不允许篡改或伪造,属于信息的完整性问题;
还有一些信息一旦发送,发送者对此不能否认,属于信息的不可否认问题,等等。
人们利用网络传输信息时,为避免给网络用户造成损失,所面临的上述安全问题都需要解决,解决方法可以是重新开发一套新的安全网络通信体系结构,或者在原有的TCP/IP通信的基础上进行弥补,前者相当于推倒重来工作量巨大,对已有的网络硬软件资源也是极大的浪费,实际情况采用的后者,研究人员在原有的TCP/IP协议的框架下增加了安全措施,这些措施涉及到了TCP/IP协议簇的每一层,但其中更多的则是设计网络层和传输层。
密码学是研究加/解密算法和密码的学科,信息的安全性问题自然离不开密码学。
对称密码体制、非对称密码体制、报文摘要算法、消息认证码、数字签名和伪随机数生成器是密码学的六大工具,下面分别了解其中的一些。
1.对称密码体制
设想用户A把信息发送给用户B,当事方A和B不希望M传递的过程中被第三方看到,可以采取的方法是,A先对M进行处理。然后发送处理后的结果。对M处理实际上是进行某种数学运算,运算结果我们用E(M)表示,B收到E(M)后,会按事前与A约定好的方法从E(M)中把M还原出来,结果我们用D(E(M))=M表示。第三方即使截获到E(M),因为不知道还原方法,从而无法看到M,A与B也就达到了秘密通信的目的。
前面过程中的E我们称之为加密算法,D称之为解密算法,二元组(E,D)表示一个特定的加/解密算法,这个二元组是A与B提前约定好的,当然二元组(E,D)只有A和B知道,其他第三方是不知道的,这个不难理解。
当A与另一个网络用户C安全通信时,就不能再用二元组(E,D)了,需要改换成另一个加/解密二元组(E',D')。由此看来,A与多个用户安全通信,就需要有多个加解密二元组。
研究事实证明,开发多个加解密二元组不是一件容易的事,后来人们发现,可以在加/解密二元组(E,D)基础上增加一个参数,A与B之外的其他用户通信只要选择不同的参数值就可以了。具体来说,A和B之间的通信选择参数,A与C之间的通信选择,即使大家都采用二元组(E,D),也能做到安全通信,这就避免了为不同用户对开发不同的二元组了,这里的参数和就是所谓的密码或者秘钥,由A和B秘密保管,由A和C秘密保管。
所有用户采用同一个加解密二元组(E,D),只是不同用户对采用不同密钥的加解密体制我们称之为对称加密体制。“对称”这个称号的由来,就是因为发送方和接收方共用(共享)同一个秘钥。
●对称密码体制可以解决信息的机密性问题,下面是应用模型
已知二元组(E,D),用户A与B之间的共享密钥是p,A把信息M安全发送给B,流程是:
1.A和B拥有共享密钥p;
2.A利用p和加密算法E对信息M处理,结果记作;
3.A把发送给B;
4.B收到;
5.B对收到的用秘钥p和解密算法D处理,结果记作。
人们已经成功开发出不少对称加解密算法,DES/3DES/AES是其中的佼佼者,这些加解密算法不但安全效率高,且加解密速度快。
2.非对称密码体制
设想某网络有500个用户,,...,任何用户都可能与其他499个用户秘密通信,每个用户需要保存(500-1)=499个密钥,整个网络环境需要的密钥总数是:
若用户数不是500而是5000,那每个用户保存的密钥以及密钥总数会更大。
对称密钥体制不便于密钥管理是一大缺点。
上世纪70年代,人们发明了另一种称为非对称密码的体制。
非对称密码体制也涉及加密算法、解密算法与密钥。每个用户有两个密钥,一个是需要公开的密钥,另外一个必须私藏的密钥。因为加密密钥和解密密钥不同,这是“非对称”名称的由来;又因为每个用户的公钥需要公开,所以非对称密码体制也称公钥密码体制。
假设某个具体的公钥密码算法加密算法为E,解密算法为D,对每个希望参加安全通信的用户,先依据算法为其产生公钥和私钥。假设为用户A产生公钥为,私钥为,为用户B产生公钥,私钥为。A的密钥对(,)由A唯一确定,B的密钥对(,)由B唯一确定,用户A和B都把自己的公钥公开,密钥则秘密保管。
●非对称密码体制也可以解决信息的机密性问题,下面是应用模型
已知公钥密码算法二元组(E,D),用户A把信息M安全发给用户B,下面是流程
1.利用(E,D)为用户A产生公钥,私钥,为用户B产生公钥,私钥;
2.A用B的公钥和加密算法E对消息M进行处理,处理结果记为;
3.A把发送给用户B;
4.B对收到的进行处理,结果记作;
我们说,上面流程第3部的结果实际上就是M,即
这是公钥密码算法的设计要求所决定的。
第二步A发给用户B的信息,要是被用户C截获了,C用自己的私钥计算,该结果一定不等于M;另外,既然C知道了B的公钥,是否可以想办法导出B的私钥,从而也可以计算呢?这在计算上也是办不到的,原因都是公钥密码算法的特性所决定的。
前面的知识做个简单总结:对任何用户,不能从公钥导出其私钥;用谁的公钥加密,只能用谁的私钥解密。
前面那个有500个用户,,...的网络,若他们采用公钥密码算法通信,我们不难计算出每个用户只需要保存自己的私钥,网络环境中的密钥总数等于,这比对称体制算法中的密钥数少太多,这是公钥密码算法的优点所在。
目前,比较流行的公钥密码算法有RSA/ELGAMAL/IBC等。
3.数字签名
生活中,为了确认某个写有文字的纸质材料确实来自某个人,我们可以让他在纸质材料上签上自己的名字,如借款时用的借条,要是两个单位打交道的话,一般采用在材料上盖公章的方法,可证明材料来自公章拥有单位。
通过电子信息方式通信的两个用户,有什么办法也达到上面的效果呢?
设想网络用户A把信息u发送给B,B为了确认收到的信息确实来自A,可以让A对信息U进行特殊处理(相当于生活中的签字或者盖章),这种处理方法应该是A特有的、独一无二的、其他用户无法效仿的等等,在给出具体处理方法之前,我们先给这种处理方法起个名字,把它叫做“数字签名”,经A数字签名后的电子材料,也应该与生活中A手写的材料一样,材料是完整的/不可仿冒的/不可否认的等等。
之前,我们学习过公钥密码体制,对参与通信的每个用户都有公钥和私钥,这对数据被该用户唯一确定。假设公钥密码加密算法是E,解密算法是D,A的公钥是p,私钥是s。按照公钥密码算法原理,对任意消息u,都有
和
前一个公式在解决数据的机密性问题方面有具体应用。
按照公钥密码算法原则,算法E/D任何用户公钥都是公开的,每个用户的私钥都由用户本人秘密保管,我们分析公式,若网络用户A把信息u发送给用户B,可以看作A用户利用自己的私钥对消息u进行处理,可以看作用户B把消息u进行了还原。用户A对消息进行的处理1是否可以看成对消息u的数字签名呢?签名必须保证信息的完整性和1不可否认性(注意机密性不需要),完整性是指A发出的信息没有被篡改或者说篡改后能被发现,不可否认性是指A发出了签名消息,不能否认。
4.数字证书
生活中有各式各样的“证书”,如驾照、身份证等等,这些证书或者证明我们具有某种能力或者表名我们的身份,它们一般由某个权威组织/单位颁发。
“数字证书”与上面的证书有些类似,也是由某个权威组织颁发给用户的,其目的就是证明某个公钥确实属于这个用户,有时数字证书也称公钥证书。
一般情况下,数字证书包含有用户的名字/单位/邮箱/公钥等个人信息,还有颁发机构的电子签名(正像平时证书的签章),证书的颁发机构也称CA(Certification Authority)。
从技术上讲,证书其实包含三部分,用户的信息,用户的公钥,还有CA中心对该证书里面的信息的签名。验证一份证书的真伪(即验证CA中心对该证书信息的签名是否有效),需要用CA中心的公钥验证,而CA中心的公钥存在于对这份证书进行签名的证书内,故需要下载该证书,但使用该证书验证又需先验证该证书本身的真伪,故又要用签发该证书的证书来验证,这样一来就构成一条证书链的关系,这条证书链在哪里终结呢?答案就是根证书,根证书是一份特殊的证书,它的签发者是它本身,下载根证书就表名您对该根证书以下所签发的证书都表示信任,而技术上则是建立起一个验证证书信息的链条,证书的验证追溯至根证书即为结束。所以说用户在使用自己的数字证书之前必须先下载根证书。
根证书是CA认证中心给自己颁发的证书,是信任链的起始点。安装根证书意味着对这个CA认证中心的信任。