TSIG(Transaction SIGnature)是RFC 2845中定义的计算机网络协议。主要是它使域名系统(DNS)能够验证对DNS数据库的更新。这是最常用的更新动态DNS或辅助/从属DNS服务器。TSIG使用共享密钥和单向哈希来提供一种密码安全的方式来认证连接的每个端点被允许作出或响应DNS更新。
尽管对DNS的查询通常可能在没有身份验证的情况下进行,但对DNS的更新必须经过身份验证,因为它们会对Internet命名系统的结构进行持久更改。由于更新请求可能通过不安全的渠道(互联网)到达,因此必须采取措施确保请求的真实性和完整性。使用由客户端进行更新和DNS服务器共享的密钥有助于确保更新请求的真实性和完整性。单向哈希函数用于防止恶意观察者修改更新并转发到目的地,从而确保消息从源到目的地的完整性。
TSIG协议中包含一个时间戳,用于防止记录的响应被重用,这将使攻击者违反TSIG的安全性。这要求在动态DNS服务器和TSIG客户端包含一个准确的时钟。由于DNS服务器连接到网络,网络时间协议可以提供准确的时间源。
DNS更新(如查询)通常通过UDP传输,因为它要求比TCP更低的开销。但是,DNS服务器同时支持UDP和TCP请求。
内容
[ 隐藏 ]
1实施
2TSIG的替代品
3另见
4参考
5外部链接
实现[ 编辑]
RFC 2136中规定的更新是对DNS服务器的一组指令。其中包括标题,要更新的区域,必须满足的先决条件以及要更新的记录。TSIG添加最终记录,其中包括时间戳和请求的散列。它还包括用于签署请求的密钥的名称。RFC 2535提供了关于名称形式的建议。
对TSIG成功更新的回应也将用TSIG记录进行签名。故障没有经过签名,以防止攻击者使用特制的更新“探测器”了解有关TSIG密钥的任何信息。
该的nsupdate程序可以使用TSIG做DNS更新。
TSIG记录与更新请求中的其他记录格式相同。这些字段的含义在RFC 1035中进行了描述。
TSIG记录字段
领域 | 字节 | 描述 |
名称 | 最大。256 | 密钥名称,在客户端和服务器上必须是唯一的 |
类型 | 2 | TSIG(250) |
类 | 2 | 任何(255) |
TTL | 4 | 0(因为TSIG记录不能被缓存) |
RDLENGTH | 2 | RDATA字段的长度 |
RDATA | 变量 | 包含时间戳,算法和散列数据的结构 |
TSIG的替代品[ 编辑]
虽然TSIG被广泛部署,但协议还有几个问题:
- 它需要将密钥分发给每个必须更新的主机。
- HMAC-MD5摘要不再被认为是非常安全的。
- 没有权威的层次。任何带有密钥的主机都可能更新任何记录。
因此,已经提出了一些备选方案和扩展。
- RFC 2137指定使用公钥 “SIG”DNS记录的更新方法。持有相应私钥的客户端可以签署更新请求。此方法与用于安全查询的DNSSEC方法相匹配。但是,此方法已由RFC 3007弃用。
- 在2003年,RFC 3645提出将TSIG扩展为允许通用安全服务(GSS)安全密钥交换方法,而不需要手动向所有TSIG客户端分配密钥。将公钥作为DNS资源记录(RR)分发的方法在RFC 2930中进行了规定,其中GSS作为此方法的一种模式。使用WindowsKerberos服务器的修改后的GSS-TSIG由Microsoft Windows Active Directory服务器和客户端实现,称为安全动态更新。结合使用RFC 1918的配置不当的DNS(没有反向查找区域)寻址,使用这种身份验证方案的反向DNS更新将被全部转发到根DNS服务器,并在此过程中增加到根DNS服务器的通信量[1]。有一个任播组处理这个流量,把它从根DNS服务器拿走[2]。
- 定义TSIG的RFC 2845只规定了一个允许的散列函数,128位的HMAC-MD5不再被认为是高度安全的。RFC 4635被散发以允许RFC 3174安全散列算法(SHA1)散列和FIPS PUB 180-2SHA-2散列来替代MD5。由SHA1和SHA-2生成的160位和256位摘要比由MD5生成的128位摘要更安全。
- RFC 2930定义了TKEY,它是一个DNS记录,用于将密钥从DNS服务器自动分发到DNS客户端
- RFC 3645,它定义了GSS-TSIG,它使用gss-api和TKEY以gss-api模式自动分配密钥
- 该DNSCurve提案有很多相似之处TSIG。