TSIG(transaction signature)는 RFC 2845에 정의된 컴퓨터 네트워킹 프로토콜이다. 주로 도메인 네임 시스템(DNS)이 DNS 데이터베이스에 대한 업데이트를 인증할 수 있게 한다. 이는 DDNS 또는 2차/슬레이브 DNS 서버를 업데이트하는 데 가장 일반적으로 사용된다. TSIG는 공유 비밀 키와 일방향 해싱을 사용하여 연결의 각 종단점이 DNS 업데이트를 수행하거나 응답할 권한이 있음을 암호학적으로 안전하게 인증하는 수단을 제공한다.
DNS에 대한 쿼리는 일반적으로 인증 없이 수행될 수 있지만, 인터넷 네이밍 시스템의 구조에 영구적인 변경을 가하기 때문에 DNS에 대한 업데이트는 반드시 인증되어야 한다. 업데이트 요청은 보안되지 않은 채널(인터넷)을 통해 도착할 수 있으므로, 요청의 진위 여부와 무결성을 보장하기 위한 조치를 취해야 한다. 업데이트를 수행하는 클라이언트와 DNS 서버가 공유하는 키를 사용하면 업데이트 요청의 진위와 무결성을 보장하는 데 도움이 된다. 일방향 해싱 함수는 악의적인 관찰자가 업데이트를 수정하고 목적지로 전달하는 것을 방지하여, 소스에서 목적지까지 메시지의 무결성을 보장하는 역할을 한다.
TSIG 프로토콜에는 기록된 응답이 재사용되어 공격자가 TSIG의 보안을 침해하는 것을 방지하기 위해 타임스탬프가 포함된다. 이로 인해 DDNS 서버와 TSIG 클라이언트는 정확한 시계를 갖추어야 한다. DNS 서버는 네트워크에 연결되어 있으므로 네트워크 타임 프로토콜을 통해 정확한 시간 소스를 제공받을 수 있다.
DNS 업데이트는 쿼리와 마찬가지로 TCP보다 오버헤드가 적은 UDP를 통해 전송되는 것이 일반적이다. 그러나 DNS 서버는 UDP 및 TCP 요청을 모두 지원한다.
RFC 2136에 명시된 업데이트는 DNS 서버에 대한 일련의 지침이다. 여기에는 헤더, 업데이트할 영역, 충족해야 할 필수 조건, 업데이트할 레코드가 포함된다. TSIG는 타임스탬프와 요청의 해시를 포함하는 최종 레코드를 추가한다. 또한 요청에 서명하는 데 사용된 비밀 키의 이름도 포함된다. RFC 2535에는 이름 형식에 대한 권장 사항이 나와 있다.
성공적인 TSIG 업데이트에 대한 응답도 TSIG 레코드로 서명된다. 실패한 경우에는 공격자가 특별히 조작된 업데이트 "프로브"를 사용하여 TSIG 키에 대해 배우는 것을 방지하기 위해 서명하지 않는다.
nsupdate 프로그램은 TSIG를 사용하여 DNS 업데이트를 수행할 수 있다.
TSIG 레코드는 업데이트 요청의 다른 레코드와 동일한 형식이다. 필드의 의미는 RFC 1035에 설명되어 있다.
| 필드 | 바이트 | 값 | 설명 |
|---|---|---|---|
| NAME | 최대 256 | 다름 | 키 이름; 클라이언트와 서버 모두에서 키 식별 |
| TYPE | 2 | TSIG (250) | |
| CLASS | 2 | ANY (255) | |
| TTL | 4 | 0 | TSIG 레코드는 캐시되어서는 안 됨 |
| RDLENGTH | 2 | 다름 | RDATA 필드의 길이 |
| RDATA | RDLENGTH | 다름 | 타임스탬프, 알고리즘, 해시 데이터를 포함하는 구조 |
TSIG는 널리 배포되어 있지만, 프로토콜에는 몇 가지 문제가 있다.
그 결과, 여러 대안과 확장이 제안되었다.