当前位置:文档之家› NTP协议安全性分析

NTP协议安全性分析

三、NTP的安全机制

考虑到NTP协议的应用特点,关于时间服务的数据可以公开,因此对数据包的保密性不做特别要求,NTP协议面临的安全威胁主要在于攻击者恶意重放,篡改数据包或假扮合法服务器为客户端提供错误的时间。所以NTP安全机制更多地考虑数据包的认证性,即进行源认证和保护数据的完整性。

这里我们主要针对NTP协议的客户端服务器模式的安全机制进行研究。

3.1传送时间戳检测伪装和重放

NTP数据包中有两个时间戳:Originate timestamp表示客户端对服务器的请求离开的本地时间,Transmit timestamp表示服务器对客户端的响应离开的本地时间

传送时间戳是NTP数据包头部的一个字段,用于检测数据包的伪装和复制。它是一个临时值,通过在64位传送时间戳的非重要的位中插入随机数。对于这个时间戳不要求它是正确的,也不一定是单调递增的,但必须保证每个传送时间戳是不同的,无法在0.232ns内被预测出来,也就是保证入侵者无法提前预测传送时间戳的值。

如果一个包的传送时间戳和以前的包的传送时间戳一样,则检测出这个包是复制的,这时丢弃这个复制品。在客户端/服务器和对称模式中,我们比较客户端请求数据包中的传送时间戳和服务器响应数据包的原始的时间戳。如果二者不同,表示这个服务器数据包是伪装的,是旧的复本或传送时丢失的。

3.2消息摘要保护数据包的完整性

对称密钥算法中,客户端和服务器需要预共享消息密钥(以下称为对称摘要密钥)来计算消息摘要。对称摘要密钥由密钥文件定义。当程序启动时,就装载一个这样的文件。每一行包括密钥ID,一个摘要算法标识和对称摘要密钥。

(1)客户端发送时间请求报文。客户端自行选择使用的对称摘要密钥,将密钥ID写入报文中,用对称摘要密钥与NTP请求报文一起算出MAC。

MAC = H (symmetric key || NTP packet)

(2)服务器发送时间响应报文。

服务器对客户端数据包的完整性认证,服务器根据客户端的密钥ID找到对称摘要密钥,验证客户端数据包中的MAC。

将对称摘要密钥与NTP响应报文进行哈希,计算出MAC。

MAC = H (symmetric key || NTP packet)

(3)客户端利用对称摘要密钥,验证服务器响应报文中的MAC。

3.3 Autokey模型自动分发对称摘要密钥

用于生成MAC的对称摘要密钥可以不通过密钥文件定义,而是通过AutoKey协议模型来实现对称摘要密钥的协商,对称摘要密钥的协商在NTP数据包的扩展域中完成。以下Autokey就表示对称摘要密钥。

3.3.1 基于Autokey的MAC计算

(1)MAC的计算

使用扩展域协商对称摘要密钥时的MAC是公共值和NTP头部和扩展域的MD5消息摘要:

MAC = H (public value || NTP packet|| extension field)

使用对称摘要密钥进行时间同步服务时MAC是对称摘要密钥与NTP头部的MD5消息摘要:

MAC = H (Autokey || NTP packet)

(2)对称摘要密钥(Autokey)的计算

Autokey = H (Sender-IP || Empfänger-IP || KeyID|| Cookie)

H()是MD5消息摘要,结果为16个字节

密钥ID是仅使用一次的伪随机序列。特殊的0值用于crypto-NAK 应答报文中。

(3)Cookie的计算

Cookie = MSBs32 (H (Client IP|| Server IP|| 0|| Server Seed))

服务器使用客户端和服务器地址和私有值(服务器种子)为这个客户端生成唯一的cookie。

(4)生成密钥摘要列表

服务器选择一个随机的32位种子作为初始的密钥ID。初始的摘要密钥使用给定的地址,cookie和初始的密钥ID构建,摘要密钥值存储在密钥cache中。下一个摘要密钥使用摘要密钥值的前4个字节作为新密钥ID.服务器生成完整的列表。当密钥列表中所有密钥用完后,就生成新的密钥列表。

3.3.2 Autokey协议格式(NTP扩展域)

扩展域包括域类型,长度,关联ID,签名时间戳,用于验证密码媒介的文件戳。关联ID是当发起客户端联盟时分配的临时值。

3.3.3验证服务器的身份

1、可信证书:服务器发送证书建立从服务器自身到可信机构的证书链。

如果证书没有被服务器自身发行,则客户端继续请求发行者的证书。如果客户端最终收到一个自己生成的证书,则检查这个证书是否来自可信机构。通过这种方式建立了从服务器到可信机构的证书链认证。

2、私有证书:客户端和服务器有带有相应私有密钥的相同证书,与预共享密钥相似。但是如果一个组内多个客户端使用相同私有密钥,则它们每一个都能向其他客户端伪装成服务器。

必须注意的是,私有证书能够在完成公钥交换的同时保证身份认证,而在可信证书机制中,客户端没有存储可信证书列表,如果请求的证书的扩展域中包含“可信根”字段,则客户端就认为这个证书来自可信机构。攻击者很容易伪造这样的一个证书:

o攻击者的公钥值

o服务器标识符信息(服务器名称)

o有效期(证书的有效时间)

o颁发者标识符信息(服务器名称)

o颁发者的数字签名(攻击者的公钥与服务器名称的绑定)

o在扩展域“X.509v3 Extended Key Usage”包含了“trustRoot”

可见,信任不是由客户端已经拥有了来自可信机构的证书建立的,所以说通常情况下,在可信证书交换的以后,还需要使用基于挑战应答进行身份认证。以下是三种基于挑战应答的身份认证机制:

1、基于公共参数的挑战应答:客户端有服务器的公共参数,客户端确切地知道这些参

相关主题