网络数据安全
现在在网络上两个节点A和B之间进行通信的时候,数据包经过的路径上很有可能会有很多的路由节点。在这些中间路由节点上,A和B之间的IP包是完全可以被截获、修改、甚至丢弃的,因此在网络上的数据传输并不安全,或者说基本的网络7层协议并不确保数据传输的安全性。
数据的安全传输对用户来说意义重大,显然,没有用户愿意忍受自己所发送的每一段消息、传输的每一份文件都有可能被另外一个不相干的人偷窥。因此,在不安全的网络上构建安全的通信非常重要。
要在网络上进行数据的安全传输,主要需要实现两个方面:
(1)身份认证,用于确定你数据的来源是你预想的。
(2)数据加解密,用于对传输的数据进行加解密。
(3)数据完整性校验,用于防止数据被篡改。
身份认证
身份认证是对数据的来源进行确认,比如用户A和用户B通过网络传输数据,他们都希望自己收到的数据是来自B和A,而不是由其他人伪造的;某机构发布了一个文件,用户A从网上下载了该文件,他希望该文件确实是由该机构发布的,这些都可以通过身份认证来得到保证。
身份认证可以防止中间人攻击。中间人攻击是指:网络上有节点A、B、C,此时C想要欺骗A和B,它可能这样做:C先让A相信自己就是B(比如,伪造B的IP等),然后,C再让B相信自己就是A(比如,伪造A的IP等),这样A每次认为自己和B通信的时候,其实都是在和C通信,B每次以为自己在和A通信的时候,实际上是在和C通信,这样A和B之间的数据都被C获取、甚至更改。显然,身份认证就是确保C无法向A(B)假冒自己就是B(A)。
现在常用的身份认证方法是使用证书。
1、证书使用
证书就是一个公私钥对中的公钥(公私钥在后续RSA中会具体讲),公私钥是非对称加解密的实现方式,公钥加密的数据,只有对应的私钥才能解密,反之亦然。
如果某机构申请了一张属于自己的证书,然后向互联网用户公开该证书,用户如果接受,则将证书存在电脑中。之后该机构在发布数据的时候,带上签名,签名可以是一个明文字符串X+经过该机构私钥对X加密后的结果Y。当用户收到数据之后,通过该机构公开的证书(公钥)对签名中的Y进行解密得到Z,如果此时Z和X相等,则可以判定该数据确实是由该机构发布的。<私钥加密,公钥解密>
2、证书申请/颁发
颁发证书crt,颁发证书当然不是谁想干就能干的,这得有专门的证书颁发机构来执行这项权利。CA(Certificate Authority,证书授权中心)是负责管理和签发证书的机构的第三方机构,一般是权威可信的、经过国家认证的部门。
如果某机构想要一个证书用于向用户证明自己的身份,它首先要想CA申请,CA如果同意申请,会签发一张证书给该机构。此时该机构有了证书,它向网络用户公开的时候,怎么让人们相信这张证书确实是CA颁发的而不是自己伪造的呢?首先,CA是权威机构,它自己也有证书,且证书一般都会被用户接受存放在电脑中;然后,CA在证书的末尾会添加一段签名(和上面的X加密得到Y一个道理),用户在收到新颁发的证书之后会通过自己电脑中存放的CA机构的证书去解密从而可以校验该证书是否是CA颁发。
3、证书层级与信任链
证书是分层级的,每份证书(除了根证书)都会指定其上级CA(颁发该证书的CA)的名字,系统根据名字定位到系统中的CA证书;其上级CA的证书也会指定其对应的再上一级CA的名字.....直到根证书,根证书是不需要证明的。
-windows系统自带了一些CA证书,大部分是美国的CA颁发,中国用户应该先安装一个工信部的根证书,该证书应该是美国的CA签发,国内的其他机构再向工信部申请证书。
根证书一定是可信的,这是证书安全体系的根本。根证书信任的那些证书也应该是安全的,根证书信任的那些证书信任的证书也应该是安全的,这样一级一级往下传.... 如果中间有证书不遵守规则,信任了不安全的证书,那么后续的证书链均有可能不安全......比如前段时间支付宝偷偷在用户的电脑里添加根证书,这种行为私自修改的信任链规则,添加的根证书可能会信任一些不安全的证书,从而给系统带来隐患。