DS 레코드 하나를 잘못 넣으면 도메인이 인터넷 일부에서 사라질 수 있다.

침해된 게 아니다. 느려진 것도 아니다. 불안정한 것도 아니다. 그냥 사라진다. 적어도 검증 리졸버 뒤에 있는 사용자에게는. 이렇게 터무니없이 날카로운 실패 모드 하나로 DNSSEC의 20년 채택 역사를 설명할 수 있다.

짜증나는 건 프로토콜 자체는 엉망이 아니라는 점이다. DNS는 태어날 때부터 답처럼 보이는 건 뭐든 신뢰했다. 캐시 포이즈닝이 오랫동안 악몽이었던 이유다. DNSSEC는 그 순진한 신뢰에 서명, 위임 레코드, 진짜 신뢰 체인을 추가한다. 서류상으로는 DNS 세계가 만든 것 중 가장 지적으로 만족스러운 결과물이다.

서류상이라는 말이 여기서 많은 일을 하고 있다.

DNSSEC 작동 원리: 서명, 그리고 신뢰의 체인

먼저 “존에 서명한다”는 게 무슨 뜻인지부터 보자. 다들 건너뛰는 부분이다. 존 소유자는 이름과 유형이 같은 레코드 묶음(예를 들어 www의 A 레코드 전부, 도메인의 MX 레코드 전부)마다 서명을 만든다. 서명은 RRSIG라는 또 하나의 레코드로, 서명 대상 데이터 바로 옆에 게시된다. 그 서명을 검증할 공개키도 DNSKEY 레코드로 같은 존에 올라간다. 대부분의 존은 키를 두 개 둔다. 일반 레코드에 서명하는 존 서명 키(ZSK)와, DNSKEY 묶음에만 서명하는 키 서명 키(KSK)다. 서명에는 만료일이 있어서 서명된 존은 주기적으로, 영원히 다시 서명해야 한다. 존재하지 않는 이름도 서명된다. NSEC나 NSEC3 레코드로 서버가 “그런 이름은 없다”는 사실을 증명할 수 있다.

하지만 서명만으로는 아무것도 증명되지 않는다. 누구든 키를 만들어 위조한 레코드에 서명할 수 있다. 문제는 리졸버가 왜 당신의 키를 믿어야 하느냐다. 여기서 계층 구조가 등장한다.

DNS는 트리다. 루트 존이 TLD(.com, .org, .net)에 위임하고, TLD는 개별 도메인의 권한 있는 네임서버에 위임한다. DNSSEC는 이 트리를 그대로 따른다. 위임이 일어나는 곳마다 상위 존이 DS(Delegation Signer) 레코드를 게시한다. 하위 존 KSK의 해시다. 상위 존은 다른 레코드와 마찬가지로 이 DS 레코드에도 자기 키로 서명한다.

그래서 리졸버가 www.example.com에 대한 서명된 답을 받으면 위로 거슬러 올라간다. A 레코드의 RRSIG는 example.com의 DNSKEY로 검증된다. 그 DNSKEY는 .com이 example.com에 대해 게시한 DS 레코드와 일치한다. 그 DS 레코드는 .com의 키로 서명돼 있고, .com의 키는 루트가 .com에 대해 게시한 DS 레코드와 일치한다. 루트의 DS 레코드는 루트 키로 서명돼 있고, 루트 키는 리졸버가 미리 믿기로 한 유일한 대상이다. 모든 고리가 이어지면 답은 진짜다.

루트 키가 트러스트 앵커다. 전 세계 검증 리졸버에 내장돼 있다. 그리고 루트의 키 서명 키는 보안 시설 두 곳의 하드웨어 보안 모듈 안에 있고, 정해진 키 세레모니 때만 쓰인다. 금고와 스마트카드, 입회인, 그리고 그 자리에 참석하려고 실제로 비행기를 타고 날아오는 사람들이 있는 진짜 물리적 의식이다.

이 모든 게 맞다. 건전한 암호학이다. 그리고 실제 사람이 배포하려는 순간 무너진다.

DNSSEC가 실제로 사주는 것

전송 중이거나 캐시에 있는 위조 DNS 데이터에 대한 보호. 이게 헤드라인이다.

서명을 검증하는 리졸버는 신뢰할 수 있는 키까지 체인이 연결되지 않는 답을 거부한다. 누군가 은행의 A 레코드나 메일 교환기를 위조하면, 위조된 레코드는 서명 검증을 통과해야 한다. 보통은 못 한다. DNSSEC는 부정 응답도 처리한다 — “그 이름은 존재하지 않는다”를 인증할 수 있다. 카민스키 사건 이후 시절을 보낸 사람이라면 이게 왜 중요한지 안다.

근데 DNSSEC가 하지 않는 것도 봐야 한다. 기밀성은 제공하지 않는다. 쿼리는 DNS-over-HTTPS나 DNS-over-TLS를 쓰지 않는 한 여전히 평문이다. DDoS 공격도 막지 못한다 — 오히려 DNSSEC는 DNS 증폭 공격을 키울 수 있다. 덩치 큰 RRSIG와 DNSKEY 레코드가 담긴 응답이 크기 때문이다. 서명된 존이 바로 그 이유로 반사기로 악용돼 왔다.

DNSSEC는 자체 마케팅 문제에 시달렸다. “보안 DNS”는 “서명된 DNS 데이터”보다 넓게 들린다. 실제 보호 범위는 더 좁지만, 진짜다.

아무도 안 쓰는 이유

운영 거래 조건이 비참하기 때문이다.

키 관리가 악몽이다. DNSSEC는 존의 암호화 키를 관리해야 한다. 서명이 만료되니 계속 갱신해야 한다. 키도 교체해야 한다. KSK 롤오버는 상위 존 — 레지스트라 — 과 협조해서 DS 레코드를 업데이트해야 한다. 타이밍을 놓치면 전체 도메인이 꺼진다. “느려진다”가 아니다. 꺼진다. 모든 쿼리에 SERVFAIL. 웹사이트, 이메일, 전부 — DS 레코드를 고치고 캐시가 만료될 때까지 기다려야 사라진다.

강조한다. 잘못 설정된 DS 레코드는 우아하게 성능 저하되지 않는다. 존을 죽인다. DNS는 보통 관대하다 — A 레코드 하나를 실수하면 서브도메인 하나가 죽을 수 있다. DNSSEC는 DNS를 단순한 무상태 디렉토리에서, 실수 한 번의 대가가 전면 장애인 취약한 암호화 지뢰밭으로 바꾼다.

레지스트라 지원이 이상하게 들쭉날쭉이다. 일부 레지스트라는 DNSSEC 설정을 간단하게 만든다. 적지 않은 곳은 인터페이스 깊숙이 묻어놓아서 보물지도가 필요하다. 2026년에 DS 레코드 해시를 웹 폼에 수동으로 붙여넣게 하는 곳이 있다. 체인은 게으른 링크 하나를 용납하지 않는다.

리스크-보상 계산이 안 맞는다. 캐시 포이즈닝은 실제 공격이지만, 대부분의 조직이 걱정하는 공격이 아니다. 피싱, 랜섬웨어, 크리덴셜 탈취가 CISO를 잠 못 자게 한다. 캐시 포이즈닝은 위협 모델 3페이지에 있다. 경험해본 적 없을 공격에 대비해서 상당한 운영 복잡성을 떠안으라고 하는 것이다.

디버깅이 잔인하다. DNSSEC가 고장 나면 에러 메시지가 SERVFAIL이다. 그게 전부. 서명 오류? 서명 만료? DS 레코드 누락? 시간 오차? SERVFAIL. 알아서 파악해라.

DNSSEC에는 Let’s Encrypt 모먼트가 없었다

2015년 12월 Let’s Encrypt가 무료 자동 인증서를 내놓았을 때, Firefox에서 HTTPS로 열리는 페이지는 40% 정도였다. 몇 년 뒤 HTTPS는 웹의 압도적 다수가 됐다. Let’s Encrypt만의 공은 아니지만 큰 몫을 했다. 장벽은 DNSSEC가 겪는 것과 같은 종류였다 — 인증서 관리가 복잡하고, 실수하기 쉽고, 수동이었다. Let’s Encrypt는 자동화로 해결했다.

DNSSEC에는 그런 게 없다. “이 명령어 하나 실행하면 DNSSEC가 작동합니다”는 존재하지 않는다. 일부 관리형 DNS 제공자가 처리해준다. 하지만 레지스트라와 DNS 제공자가 같은 회사이거나 DS 레코드 교환을 자동화한 경우에만 작동한다. 많은 곳이 안 했다.

Let’s Encrypt의 교훈은 “무료로 만들어라”가 아니다. DNSSEC는 이미 무료다. 교훈은 “안 보이게 만들어라”다. DNSSEC는 안 보이는 것의 반대다.

더 나쁜 건, DNSSEC의 성공도 안 보인다. HTTPS가 작동하면 브라우저 상태가 바뀌고, 혼합 콘텐츠가 차단되고, 사용자가 뭔가를 느낀다. DNSSEC가 작동하면 아무 일도 안 일어난다. 리졸버가 조용히 거짓을 거부한다. 훌륭한 보안 엔지니어링. 최악의 마케팅.

닭과 달걀

서명된 존이 별로 없으니 리졸버 운영자는 검증을 켤 이유를 못 느낀다. 검증할 게 거의 없는데 왜 일을 늘리고 SERVFAIL 민원을 감수하나? 존 운영자는 리졸버가 검증을 안 하면 서명을 하지 않는다. 보호가 사용자에게 닿지 않는데 왜 운영 리스크를 감수하나?

구글 8.8.8.8과 Cloudflare 1.1.1.1은 검증한다. 도움이 된다. 검증하는 ISP도 있다. 하지만 APNIC의 장기 측정을 보면 전 세계 인터넷 사용자 대부분은 여전히 검증하지 않는 리졸버 뒤에 있고, 사람들은 대개 ISP 기본 리졸버를 바꾸지 않는다.

인터넷은 기묘하게 답답한 균형을 발명했다. 널리 존경받고, 기술적으로 건전하고, 선택적 의식으로 취급되는 프로토콜. 모두가 모두를 기다린다.

DNSSEC가 실패한 건 암호학이 틀려서가 아니다. 인터넷이 아키텍처 불순물보다 운영 복잡성에 훨씬 더 가혹하기 때문이다. 보안 메커니즘이 존 운영자, 레지스트라, 리졸버 사이의 세심한 협조를 요구하면서, 성공의 보상은 침묵이고 실수의 벌은 장애라면, 설정을 모욕적으로 쉽게 만들어야 한다.

DNSSEC는 모욕적으로 쉬워진 적이 없다. 사람들이 여전히 멀리서 감탄하는 이유다.