安全可靠的通信除要认证消息外,还需构建一些标准的协议认证数据来源的可靠性、通信实体的真实性,来避免欺骗、伪装等攻击。
网络通信的一个基本问题如下,A和B是网络的两个用户,他们想借网络先构建安全的共享密钥再实施保密通信。则A(B)怎样辨认自己正在与B(A)通信却不是和C呢?此种通信方式是双向通信,所以此时叫相互认证。对于单向通信而言,认证叫单向认证。
基于认证的密钥交换关键问题有保密性与时效性。
为避免伪装以及显露会话密钥,基本认证和会话密码一定得通过保密形式通信。这就要求事先有保密或公钥给加密用,同时要防止消息重放攻击。
消息重放是指在最不好的状况下可能会造成给敌人泄露会话密钥,或成功地冒充其他人,至少也可以干扰系统的正常运行,处理不好将导致系统瘫痪。
对付重放攻击的措施是在认证交换中拿一个序列号对每个消息报文进行编号。只在收的消息序数顺序合乎法规时才接纳它。不过此方法的难点是要求双方一定得维持上次消息的序号。
确保消息的实时性常用的有时间戳和询问应答两种方法。
时间戳。若A收的消息包括时间戳,且A认为这一时间戳十分接近自己的当前时刻,A才认为收到的消息是新的并接受之。这种方案需各方的时钟是同步的。
询问应答。用户A给B发出一个一次性随机数当做询问,若收到B发来的消息也含正确的一次性随机数,A就认为此消息是新的并接受它。
时间戳好像无法作为面向连接的应用,因此技术本有的困难。而询问应答方式不适合没有连接的应用过程,这是由于在无连接传输前得通过询问应答这个额外的握手过程,这与无连接应用过程的本质特性不符。对无连接的应用程序来说,用某安全的时间服务器使各方时钟同步是避免重放攻击最合适的措施。