区块链架构之美:从比特币、以太坊、超级账本看区块链架构设计
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.9 身份验证

身份验证(Authentication)又称验证或鉴权,是指通过一定的手段完成对用户身份的确认。身份验证的目的是确认当前声称为某种身份的用户,确实是所声称的用户。在日常生活中,身份验证并不罕见。例如,通过检查对方的证件,我们一般可以确信对方的身份。虽然在日常生活中,这种确认对方身份的做法属于广义的“身份验证”,但“身份验证”一词更多地被用在计算机、通信等领域。

身份验证的方法有很多,基本上可分为基于共享密钥的身份验证、基于生物学特征的身份验证和基于公开密钥加密算法的身份验证。不同的身份验证方法,其安全性各有不同。

在TLS/SSL协议握手的第三步中,用到了数字证书中的公钥,为什么会出现数字证书呢?先假设不采用数字证书,观察一下在建立安全通信的过程中会面临哪些风险。

我们假设这样一种不使用数字证书就进行TLS协议建立连接的场景:在TLS协议握手的第一步中,客户端发送明文消息client_hello给服务端。Mallory在服务端收到client_hello消息之前,截获了这条消息,发送给客户端伪造的协商消息server_hello。客户端收到Mallory发来的伪造的协商消息,如果不验证证书,继续进行后续的密钥协商过程,流程也是可以走完的。后续的通信依然使用客户端和服务端协商的密钥加密通信过程,但是问题显而易见,客户端并没有和最初预想的服务端建立连接,而和Mallory的服务端建立了连接。

Mallory可以冒充客户端和真正的服务端建立连接,Mallory作为中间人,监听转发通信内容。

产生这个问题的根源在于,大家都可以生成公私钥对,而客户端无法确认这个公私钥对到底属于谁,这个时候就需要一种方法来证明一个公私钥对的拥有者身份。