安全威胁
解决方案(报文鉴别和实体鉴别)
报文鉴别
对称加密
- 双方协商密钥X
- A用X加密,形成密文传送,B用X解密
由于密钥应该保存在谁手上,产生争执,于是进化出:
非对称加密
比较常用的是公钥密码体制
- 发送方和接收方各自持有 自己的公钥和私钥
- 公钥对外广播
- 发送数据时,发送方用对方的公钥加密,接收方用自己的私钥解密
可以解决截获与篡改问题,但是由于公钥是对外发布的,无法解决伪造问题,黑客可以伪装成发送方,用接收方的公钥加密,
所以需要一种方式能够确认发送方的身份,于是进化出:
数字签名
签名可以用来鉴别报文的发送方,具体方式包括普通签名和加密签名
普通签名:发送方用自己的私钥加密,接收方用自己手上所有的公钥解密,谁的公钥能解密,报文就是谁发的
加密签名:发送方先用自己的私钥加密,再用对方的公钥加密,接收方适用自己的私钥解密,再看哪个公钥能解密,依此确认身份
数字签名是一种报文鉴别,即每个报文均需要鉴别发送方,这样效率就低了,所以提出实体鉴别,即建立连接时就确定对方的身份,只需确认一次,而后面的报文通信就无需鉴别身份了
实体鉴别
普通实体鉴别
- 发送方A和接收方B协商好对称密钥K
- 发送方A将自己的身份A使用密钥K加密后发送给B,B解密后发现是A,则建立通信
存在问题:
- 密钥管理问题
- 重放攻击问题:若被第三方截获,第三方无需破解直接发送给B,B会将其误以为它是A
随机数实体鉴别(不重数)解决重放攻击
- 发送方A 和 接收方B协商好对称密钥K
- A产生一个随机数R(A) , 将R(A)连同自己的身份A一起发送给B
- B收到后发现A的身份标记,但需要确认是否A所发
- B也产生一个随机数R(B) ,再将R(A)用密钥K加密,二者一起发送给A
- A解密后发现是自己发送的随机数,确认了这是自己发送出去的报文
- A将R(B) 用密钥K加密发送给B,告诉它A已经确认安全,至此会话建立
但这依然是一种对称密钥,依然需要面临密钥协商和管理的问题,于是改用公钥密码体制,但是这会面临中间人攻击
中间人攻击
可见贯穿加密方法进化过程的是密钥的管理问题
对称密钥的管理
KDC(对称密钥的管理中心)
- A要和B通信,两人先线下到KDC注册密钥,包括A自己的密钥,B自己的密钥,KDC分配一个AB通信专用对称密钥
- 通信时,A发送<A,B>表示要和B通信,KDC找出1中的3种密钥,按下图方式加密,返回给A
- A解密后获得对称密钥,将剩余部分发送给B
- B解密后亦获得对称密钥
- 如此A,B双方在KDC的配合下完成对称密钥的协商
Kerberos 感觉有点像cas
kerberos个人感觉和接触过的cas比较像,主要用于客户端与服务器的通信。其简易原理为,kerberos包含鉴别服务器(用于鉴别)和签证服务器(用于给客户端颁发访问服务器的许可证),对比于KDC,AB双方无需线下注册密钥。
AS:鉴别服务器,存放各客户端身份与其鉴别口令,用于鉴别客户端是谁
TGS:签证服务器,给客户端颁发可访问服务器许可证
- A向鉴别服务器AS发送自己的身份
- AS确定是A后返回用临时密钥KA加密的(和TGS的会话密钥KS,由AS和TGS商定好的对称密钥KTG加密的票据),票据表示A的身份我已经确认,可以颁发许可证了。A接收到后需要输入一些认证信息生成KA,解密获得内容物后KA失效
- A转发票据给TGS
a. 通过转发票据,客户端可以证明自己已经鉴别通过
b. 通过使用KS加密一个时间戳T,可以防止重放攻击
c. 通过追加一个B,表示客户端要访问服务器B - 后面的过程就是A和B协商对称密钥KAB的过程,在步骤6中,服务器会把收到的时间戳T增加1然后用协商好的KAB加密返回给客户端,以便防止重放攻击
非对称密钥对管理CA
公钥的对外广播会造成很大的安全隐患,中间人攻击就是中间人C将自己的公钥谎称为A的公钥,使B将中间人误认为A。
所以“A的公钥”究竟是不是A的需要一个国家信得过的安全机构来保障,这就是CA。
假定客户端A和服务器B通信,A如何鉴别服务器B是B,而不是中间人C
- CA向服务器B颁发证书,该证书包含B的身份以及B的公钥,且证书已经被CA数字签名(即用CA的私钥加密过)
- B向A发送自己的证书
- A收到B的证书后,从任意可信渠道获取CA的公钥,解密,并反向查询CA验证B的公钥
安全协议
网络层安全协议IPsec协议(IP安全协议) 包含功能源站鉴别(实体鉴别)和 ip数据报均加密
工作方式:运输方式-在传输层TCP/UDP报文段前后增加控制字段
隧道方式-在IP数据报前后增加控制字段
传输层安全协议SSL协议(套接字协议)
功能:
- 服务器鉴别,比如电商场景下,需要确认收款方确实是淘宝
- 客户端(浏览器鉴别),需要确认客户的身份
- 会话过程加密