DNSSEC 계산기 — DS 레코드와 NSEC3 해시
DNSKEY를 등록기관이 요구하는 DS 레코드로 바꿉니다. 키 태그와 세 가지 다이제스트 종류 전부, 또는 NSEC3 방식으로 이름을 해시합니다.
사용법
- DS 레코드를 원한다면 키의 소유자 이름, 즉 위임되는 존을 넣고 DNSKEY를 붙여 넣으세요. 플래그, 프로토콜, 알고리즘, base64 키만 있으면 되고, 존 파일 한 줄을 그대로 붙여도 됩니다. 소유자, TTL, 클래스, 타입은 제거합니다.
- 키 태그와 플래그를 먼저 읽으세요. 플래그 257은 SEP 비트가 서 있다는 뜻이고, 위임이 보통 가리키는 키 서명 키입니다. 256은 존 서명 키인데, 실수로 제출하지 않도록 이 페이지가 그렇다고 말해 줍니다.
- 등록기관이 원하는 다이제스트 종류의 DS 줄을 복사하세요. 따로 지시가 없으면 SHA-256입니다. 그 아래 CDS 줄은 같은 RDATA를 다른 타입으로 쓴 것이며, 자식 존에서 DS를 자동으로 가져가는 등록기관용입니다.
- NSEC3 해시가 필요하면 모드를 바꾸고 이름, 그 이름이 속한 존 apex(NSEC3 레코드는 그 바로 아래 라벨에 있습니다), hex 솔트(없으면 비움), 반복 횟수를 넣으세요. 프리셋이 RFC 5155 부록 A를 재현하므로, 자기 존에 쓰기 전에 페이지를 명세와 대조해 볼 수 있습니다.
자세한 설명
펼치기접기
DNSSEC 값 두 개는 찾아보는 것이 아니라 계산해야 하고, 존 파일이 대신 주지도 않습니다. 등록기관이 요구하는 DS 레코드는 DNSKEY를 그 소유자 이름과 함께 해시한 것이며 앞에 16비트 키 태그가 붙습니다. 리졸버가 돌려주는 NSEC3 소유자 이름은 질의된 이름을 반복 해시한 것입니다. 이 페이지는 둘 다 브라우저에서 계산하고, 공개된 테스트 벡터와 맞춰 두었으며, 입력이 잘못되었을 때 그냥 인코딩하지 않고 무엇이 잘못됐는지 말합니다.
DS에서 사람들이 빼먹는 것은 소유자 이름입니다. RFC 4034 5.1.4절은 이름의 정규 와이어 형식 다음에 DNSKEY RDATA를 붙여 다이제스트를 계산합니다. 그래서 같은 키라도 example.com에 있을 때와 example.net에 있을 때 DS가 서로 다르고, 존 사이에 복사한 DS는 그냥 틀린 값입니다. 정규 형식은 소문자화되고 압축되지 않은 형태여서, 이 페이지는 해시한 뒤가 아니라 해시하기 전에 이름을 정규화합니다.
키 태그는 보통 식별자처럼 취급되지만 식별자가 아닙니다. RDATA에 대한 16비트 1의 보수 합, 즉 체크섬입니다. 그래서 서로 다른 두 키가 같은 태그에 떨어질 수 있고, RFC 4035는 리졸버가 첫 번째를 정답이라고 가정하지 말고 태그와 알고리즘이 맞는 DNSKEY를 모두 시도하도록 요구합니다. 알고리즘 1 RSAMD5는 그 합을 아예 쓰지 않고 태그를 모듈러스에서 바로 꺼냅니다. 명세가 그렇게 정했으므로 이 페이지도 그 예외를 구현합니다.
다이제스트 종류는 세 가지이고 실무에서 서로 바꿔 쓸 수 있는 것이 아닙니다. 종류 2, SHA-256이 따로 요구가 없을 때 넘겨야 하는 값입니다. 종류 1은 SHA-1이고 검증은 여전히 되지만 신규 위임에는 권장되지 않습니다. 종류 4는 SHA-384로 올바르지만 모든 등록기관이 받아 주지는 않습니다. 이 페이지는 세 가지를 모두 내보내 어떤 양식에든 맞출 수 있게 하고, RFC 7344의 자동 롤오버를 위해 같은 RDATA를 자식 존 안에 게시하는 CDS도 함께 보여 줍니다.
NSEC3 쪽의 내용은 대부분 경고입니다. 해시는 와이어 이름과 솔트에 대한 SHA-1이고, 반복 횟수마다 솔트와 함께 한 번 더 해시한 다음 확장 hex 알파벳 base32로 씁니다. RFC 9276은 이제 반복 0회와 빈 솔트를 권고하는데, 그 이유를 아는 것이 중요합니다. 반복은 부정 응답마다 검증 리졸버에게 실제 비용을 물리지만, 이름을 오프라인으로 열거하는 공격자는 이미 가지고 있는 사전에 대해 추측 한 번당 그 비용을 한 번만 냅니다. 이 방어는 처음부터 작동하지 않았고, 0보다 큰 값을 요구하면 이 페이지가 그렇게 말합니다.
이 도구가 할 수 없는 것은 그 위임이 살아 있다고 알려 주는 일입니다. DS는 부모 존이 그것을 게시하고 자식이 여전히 대응하는 키로 서명할 때에만 의미가 있습니다. 다이제스트를 맞게 만들고 타이밍을 틀리면, 다이제스트를 틀리게 만든 것과 똑같이 검증 리졸버 입장에서 도메인이 인터넷에서 사라집니다. 새 DS가 TTL을 넘겨 전파될 때까지 옛 키를 존에 남겨 두세요.
자주 묻는 질문
등록기관이 만든 DS와 제 값이 왜 다른가요?
거의 항상 소유자 이름입니다. 다이제스트는 키뿐 아니라 이름의 정규 와이어 형식까지 덮으므로, example.com용으로 계산한 DS는 www.example.com이나 example.net에서 동작하지 않고, 같은 키를 다른 존으로 옮기면 DS를 새로 만들어야 합니다. 그다음으로 확인할 것은 존 서명 키가 아니라 키 서명 키(플래그 257)를 썼는지, 그리고 다이제스트 종류가 등록기관이 저장한 것과 맞는지입니다.
정말로 두 키가 같은 키 태그를 가질 수 있나요?
가능합니다. 태그는 RDATA에 대한 16비트 체크섬이라 키가 충분히 많아지면 충돌은 놀랄 일이 아니라 예상되는 일이고, 실제 롤오버 중에 일어난 적도 있습니다. 그래서 RFC 4035 5.3.1절은 리졸버가 RRSIG와 태그·알고리즘이 맞는 집합 내 모든 DNSKEY를 시도하고 처음 검증되는 것에서 멈추도록 합니다. 깨지는 것은 없고 서명 검증 비용이 한 번 더 드는 정도입니다.
다이제스트 종류는 무엇을 써야 하나요?
SHA-256, 다이제스트 종류 2입니다. RFC 4509가 구현 필수로 정했고 모든 등록기관이 받습니다. 종류 1인 SHA-1은 리졸버가 여전히 검증하지만 RFC 8624는 신규 위임에 게시하지 말라고 합니다. 종류 4인 SHA-384는 암호학적으로 문제없지만 등록기관 인터페이스가 종종 거부하는데, 그것이 이 값을 선호하지 않을 유일한 이유입니다.
NSEC3에 솔트와 많은 반복을 써야 하나요?
아닙니다. RFC 9276은 추가 반복 0회와 빈 솔트를 권고하며 이전 조언을 뒤집었습니다. 해시는 존 열거를 막으려던 것이지만, 공격자는 오프라인에서 사전을 상대로 작업하며 추측 한 번당 한 번만 값을 치르는데, 검증 리졸버는 처리하는 모든 부정 응답의 모든 반복에 값을 치릅니다. 비용이 거의 전부 방어자에게 떨어지는 구조입니다. 이제 리졸버들은 높은 반복 횟수를 제한하거나 거부하며, 이 페이지는 0을 넘는 값을 모두 지적합니다.
NSEC3 해시는 되돌릴 수 있나요?
직접 되돌릴 수는 없지만 그럴 필요가 없습니다. 이 해시는 솔트가 없거나 거의 없는 SHA-1이고 입력은 작고 추측 가능한 공간의 이름이므로, 실제 공격은 사전을 해시해서 비교하는 것입니다. nsec3walker 같은 도구가 수년간 해 온 일입니다. NSEC3은 존을 열거하는 비용을 올리지만 막지는 않습니다. 존 안의 이름이 정말로 민감하다면, 답은 opt-out을 쓴 NSEC3에 더해 그 이름을 DNS에 두지 않는 것, 또는 RFC 9077 식 최소 응답과 온라인 서명입니다.
관련 도구
DNS 레코드 참조
DNS 레코드 타입 검색 가능한 치트시트 — A·AAAA·CNAME·MX·TXT·NS·SOA·PTR·SRV·CAA·DNSSEC·SVCB / HTTPS — 예시 포함.
네트워크
해시 생성기 (SHA)
텍스트로 SHA-1·SHA-256·SHA-384·SHA-512 해시를 생성하세요.
개발
파일 해시 (체크섬)
어떤 파일이든 SHA-1·SHA-256·SHA-512 체크섬을 계산하세요.
파일
TLSA 레코드 생성기 (DANE)와 검사기
인증서를 TLSA 레코드로 바꿉니다. 셀렉터와 매칭 종류 전부를 보여 주고, 이미 게시한 레코드가 지금 서비스하는 인증서와 맞는지 확인합니다.
네트워크
PBKDF2 키 유도
브라우저에서 PBKDF2-HMAC으로 비밀번호에서 키를 유도합니다. 해시와 반복 횟수, 출력 길이를 고르고 결과를 16진수나 Base64로 읽습니다.
개발
HKDF 키 유도 (RFC 5869, 추출·확장)
HKDF로 키를 유도하고 두 단계를 모두 봅니다. 추출 단계의 PRK, 확장 단계의 T 블록, hex와 base64 OKM. RFC 5869 케이스 내장.
개발