开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 24天,点击查看活动详情
日常生活中鉴别一个人的身份可能很简单,例如见面时通过彼此容貌进行识别,打电话时通过对方声音进行身份认证等。在计算机网络中身份认证是一个实体经过网络向对方证实自身身份的过程。由于网络中无法依靠生物信息,例如,外部、声音等来识别。所以只能通过某些鉴别协议(authentication protocol)来进行认证。鉴别协议首先需要建立双方相互信任的标识,鉴别完成后双方才继续后续交流。
一次性随机数
为了防止在网络传播过程中被第三者监听通信过程,从而引起像IP欺骗、回放攻击等类安全问题。key采取一次性随机数(Nonce),该随机数在整个生命周期内只用一次,如下图所示:
- Alice向Bob发送“我是Alice”的报文
- Bob选择一个随机数R回复给Alice
- Alice使用与Bob共享的对称秘密密钥Ka-b来加密这个随机数,然后发送给Bob
- 由于Alice知道这个对称秘密密钥,所以只要Bob解密出来就知道这个报文是Alice发的,并且还同时证明了Alice的存活
一次性随机数+公钥加密
一次性随机数虽然可以避免重放攻击,但是该方法需要通信双方共享密钥。可以改进为使用一次性随机数+公钥加密技术。
- Alice向Bob发送“我是Alice”的报文
- Bob选择一个随机数R回复给Alice
- Alice使用她的私钥Ka-来加密R,然后把加密后的结果发送给Bob
- Bob向Alice索要公钥
- Alice发送自己的公钥给Bob
- Bob利用Alice的公钥Ka+来解密报文。如果结果和一次性随机数相等,则可确认Alice身份
乍一看好像这种形式也没什么问题,但是如果在Alice和Bob通信的链路上有一个第三者Trudy出现的话,就会出现中间人攻击的安全隐患!Alice向Bob发送消息,但是被中间人Trudy截获,Trudy将消息转发给Bob;Bob接收到消息后回复随机数R给他认为的消息发送方Alice,但是实际是被Trudy劫持了,然后Trudy模仿Alice利用自己的私钥加密消息,然后再给Bob自己的公钥,屏蔽Alice的所有消息,这时候其实Bob一直以为在和Alice通信,但实际是和Trudy在通信。
密钥分发
解决上面中间人攻击的问题关键是要解决(对称)密钥分发和(公开)密钥本身的认证问题。对称密钥分发的典型方案是,通信各方建立一个大家都信赖的密钥分发中心(Key Distribution Center,KDC),且各方都和KDC之间保持一个长期的共享密钥。通信双方通过KDC生成一个临时会话密钥(Session Key)。在会话密钥建立之前,通信双方与KDC之间的共享密钥主要用于通信验证及双方之间的验证。KDC密钥生成方式有多种。
- 方式一:由通信发起方生成会话密钥
- 方式二:由KDC为通信双方生成通信会话密钥
证书认证
要想证实一个公钥确实是你要通信的实体的公钥,就必须得有一个权威的认证中心(Certification Authority,CA)。通常CA具有如下作用:
- CA可以证实一个实体的真实身份
- 一旦CA认证了某个实体,会生成一个证书(Certificate)来把其身份和实体的公钥绑定起来。其中包含这个实体的公钥和全局唯一的身份标识信息,并由CA对证书进行数字签名。