요약

  • NSEC와 NSEC3는 서명된 존의 내용에 대한 특정 부정 진술을 인증한다. 이 증명은 서명자, 존, 쿼리, 알고리즘, TTL, 서명 유효 구간에 묶여 있다.
  • NSEC3 Opt-Out은 의도적으로 서명되지 않은 위임이 커버된 구간 안에 존재하도록 허용한다. 검증 중인 리졸버는 건너뛴 모든 이름의 부재에 대한 증명을 받지 못한 채 불안전 위임 경로를 입증할 수 있다.

“한 번도 존재한 적 없다”보다 적은 것을 말하는 서명된 응답

리졸버가 존재하지 않는 라벨의 주소 레코드를 요청한다고 하자. 권위 서버는NXDOMAIN을 반환하거나, 요청한 타입의 레코드 없이NOERROR를 반환한다. 서명되지 않은 존에서는 부정 응답이 응답 서버의 권위와 경로의 보안에 의존한다. 서명된 존에서는 NSEC 또는 NSEC3 레코드가 검증하는 리졸버가 부재를 암호학적으로 검증하도록 해줄 수 있다.

이는 큰 개선이다. 공격자가 정상적인 응답을 위조된 부정 응답으로 바꿔 놓고도 검증 리졸버가 이를 받아들이기를 기대할 수는 없다. 리졸버는 신뢰 사슬, 서명, 부정 증명을 모두 검증할 수 있다.

그러나 “인증된 부존재 증명(authenticated denial of existence)”은 프로토콜 용어이지 형이상학적 주장이 아니다. RFC 4035는 인증된 NSEC가 서명된 존에서 RRset이 존재하지 않음을 증명할 수 있다고 말한다. 여기서 존(zone) 한정어가 중요하다. 이 증명은 서명 유효 기간 동안 그 존의 서명자가 커밋한 데이터를 기술한다. 모든 데이터베이스를 검색하거나 운영자의 의도를 복원하거나 라벨에 대한 권리를 판단하지는 않는다.

이름이 부재할 수 있는 이유는 다양하다. 아무도 등록하지 않았거나, 등록이 만료되었거나, 레지스트리가 홀드를 걸었거나, 프로비저닝 시스템이 실패했거나, 위임이 이동했거나, 서명자가 잘못된 존을 게시했을 수 있다. DNSSEC는 검증된 진술과 인증되지 않은 진술을 구분한다. 그러나 그 원인들 중 어느 것인지는 선택하지 않는다.

NSEC는 순서를 증거로 만든다

NSEC 레코드는 존재하는 오너 이름들을 정식 순서로 연결한다. 각 레코드는 다음 오너를 명명하고 자신의 오너 이름에 존재하는 레코드 타입의 비트맵을 담는다. 따라서 서명된 구간은 두 끝점 사이에 정확히 일치하는 오너 이름이 없음을 증명할 수 있다. 비트맵은 이름은 존재하지만 요청된 타입이 없음을 증명할 수 있다.

이들은 서로 다른 부정 진술이다.NXDOMAIN은 쿼리된 이름이 해당 DNS 트리 위치에 존재하지 않음을 의미한다. NODATA는 이름은 존재하지만 요청된 레코드 타입이 없음을 의미한다. 빈 비단말(empty non-terminal)은 자신이 RRset을 소유하지 않으면서도 하위 이름을 가질 수 있다. 와일드카드는 또 다른 질문을 더한다. 프로토콜이 요구하는 경우 서버는 정확한 일치의 부재뿐 아니라 더 가까운 와일드카드 출처의 부재도 증명해야 한다.

따라서 이 증명은 “missing”이라고 도장 찍은 불리언 값이 아니라 작은 논증이다. 검증기는 어느 존이 답을 담고 있었는지, 어느 NSEC 구간이 이름을 커버하는지, 어느 비트맵이 타입을 커버하는지, 와일드카드가 답을 제공할 수 있었는지, 모든 서명과 키 사슬이 검증되는지를 묻는다.

NSEC는 또한 존의 정렬된 이름들이 발견 가능하도록 만든다. 반복 쿼리가 사슬을 따라 걸을 수 있다. 이 운영상의 노출이 NSEC3의 동기를 제공했지만, 그 가시성 자체도 시사하는 바가 크다. 암호학적 커밋은 강한 검증 가능성을 제공하면서 운영자가 의도한 것보다 많은 구조를 드러낼 수 있다.

NSEC3는 이름을 해시하지만 순서화된 커밋은 유지한다

NSEC3는 명시적인 오너 이름을 공개된 매개변수로 계산된 해시로 대체한다. 리졸버는 관련 이름을 해시하고 서명된 구간과 비교한다. 이는 무분별한 존 열거를 더 어렵게 만들지만 이름을 비밀로 만들지는 않는다. 추측 가능한 라벨은 오프라인에서 시험할 수 있고, 정렬된 해시 사슬은 여전히 유한한 커밋 표면을 노출한다.

IANA NSEC3 레지스트리는 현재 SHA-1을 해시 알고리즘 1로 등록하고 있으며 두 번째 지정된 해시 알고리즘은 없다. RFC 9276은 이 설계의 실제 경제성에 응답한다. 반복 횟수를 늘리면 권위 서명과 검증 비용을 높이면서 현대적 오프라인 추측에 대한 보호는 거의 추가하지 않는다. 그 운영 지침은 일반적인 배포에서 반복 횟수 0과 빈 솔트를 사용하고, 존 열거가 우려되지 않는 경우에는 NSEC를 선호하라는 것이다.

이것은 최소 메커니즘에 대한 거버넌스 교훈이다. 어떤 매개변수가 더 강한 프라이버시 다이얼처럼 보이면서 실제로는 모든 서명자와 검증기에 비용을 전가하는 데 그칠 수 있다. 관련 질문은 숫자가 더 큰지가 아니라, 실행되는 코드가 감당 가능한 공유 비용으로 추가 보안을 만드는지 여부다.

Opt-Out은 구간이 서명되지 않은 위임을 포함할 수 있음을 의미한다

위임 중심의 대형 존은 또 다른 비용에 직면했다. 불안전한 모든 자식 위임마다 자체 NSEC3와 서명이 필요하다면, 대형 부모 존을 서명하는 일은 상당한 추가 데이터를 만든다. NSEC3 Opt-Out은 특정 불안전 위임과 그로부터 파생된 빈 비단말을 NSEC3 사슬에서 생략할 수 있게 허용한다.

Opt-Out 플래그는 커버하는 레코드가 증명할 수 있는 범위를 바꾼다. RFC 7129는 이 경계를 직접적으로 진술한다. Opt-Out NSEC3 레코드는 자신의 구간 안에 속하는 이름의 존재를 증명하거나 부정할 수 없다. 검증기는 이 증명을 사용하여 DS 레코드가 위임을 보호하지 않음을 확립하고 자식을 불안전으로 취급할 수 있지만, 그 구간을 건너뛴 모든 라벨이 존재하지 않는다는 주장으로 승격시켜서는 안 된다.

이 구분은 대시보드에서 잃기 쉽다. 모니터링 시스템이 유효한 NSEC3 증명을 보고 초록색 “인증됨” 배지를 표시하고name_absent=true를 저장할 수 있다. Opt-Out 하에서 더 정확한 기록은 이런 것이다: 서명된 부모 구간이 이 해시를 커버한다; 그 구간은 Opt-Out이다; 후보 위임에 대해 인증된 DS가 확립되지 않았다; 건너뛴 불안전 위임의 존재 여부는 이 커버 레코드 하나만으로는 판정되지 않는다.

이 차이는 인시던트 대응에서 중요하다. 분쟁 중인 자식이 DS 없이 운영상 위임된 상태로 Opt-Out 구간 안에 있을 수 있다. 부모 존의 증명은 레지스트리가 그 위임을 의도했는지, 자식이 모든 곳에서 활성인지, 프로비저닝 트랜잭션을 되돌려야 하는지를 결정하지 않는다.

캐시는 권위 서버에 다시 묻지 않고도 답할 수 있다

부정 증거는 이동한다. RFC 2308은 부정 캐싱을 정의한다. RFC 8020은 NXDOMAIN 컷을 허용한다. 리졸버가 이름이 존재하지 않음을 받아들이면, 제한된 캐시 수명 동안 그 노드 아래의 이름을 도달 불가로 취급할 수 있다. RFC 8198은 검증 리졸버에게 한 걸음 더 나아가 캐시된 NSEC 또는 NSEC3 구간으로부터 부정 응답을 합성할 수 있게 허용한다.

이는 지연 시간, 권위 서버 부하, 반복 쿼리로 인한 프라이버시 누출을 줄인다. 동시에 보관 문제를 만든다. 사용자는 재귀 리졸버가 권위 서버에 새로 쿼리하지 않고 합성한 부정 응답을 받을 수 있다. 캐시된 증명이 TTL과 서명 구간 안에 있으므로 응답은 여전히 유효할 수 있다. 그러나 그것은 캐시된 자료가 나타내는 서명된 상태에 대한 증거이며, 그 자료가 얻어진 이후 권위 존이 변하지 않았다는 증명이 아니다.

따라서 운영자는 타임스탬프와 출처를 필요로 한다. 부정 응답이 권위 서버에서 직접 왔는지 합성되었는지, 어느 증명 레코드가 뒷받침했는지, 언제 받았는지, TTL, 서명 개시·만료 시각, 최근접 인클로저 계산, 와일드카드 증명, Opt-Out 상태, 검증 사슬을 기록하라.NXDOMAIN스크린샷은 나중의 책임 추궁에 필요한 사실을 거의 전부 결여한다.

부정 응답은 삭제 명령이 아니다

제도적 경계는 기술적 경계보다 더 선명하다. 레지스트리나 권위 운영자는 자신의 존에 무엇이 게시되는지를 통제한다. 등록기관은 등록 트랜잭션을 통제할 수 있다. 등록자는 계약상 권리를 가질 수 있다. 분쟁 패널이나 법원은 정의된 구제를 명할 수 있다. 재귀 리졸버는 자신의 캐시와 검증 정책을 통제한다. 서명된 부정이 존재한다는 이유만으로 그 어떤 주체도 다른 주체의 권한을 얻지 못한다.

이 증명은 삭제된 이름이 합법적으로 삭제되었다고 말하지 않는다. 통지가 발송되었는지, 결제가 실패했는지, 자격이 끝났는지, 항소가 소진되었는지 보여주지 않는다. 어떤 사람이 그 이름을 한 번도 가진 적 없음을 증명하지 않는다. 제3자에게 그 라벨을 등록할 권한을 부여하지 않는다. 서명자를 근본 권리 주장의 소유자로 만들지 않는다.

적절한 감사 추적은 최소한 네 개의 기록을 접어야 한다. 축소하지 않고 말이다. 등록 또는 권리 기록; 프로비저닝 결정과 그 승인; 서명된 존 버전; 그리고 검증 리졸버가 만든 관측. 서명된 존은 작동하는 공개 계층이다. 나머지 기록은 그것이 어떻게 만들어졌는지, 변경되어야 하는지를 설명한다.

얇은 공통 장부

Lu Heng의 최소 계층 원칙은 깔끔한 구분을 제공한다. 전 세계적으로 공유되는 계층에는 리졸버가 검증된 데이터, 검증된 부재, 불안전 위임, 조작된 증거를 구분할 만큼의 정보가 필요하다. 명명 권리에 대한 전 세계 법원은 필요하지 않다.

실행 코드는 여전히 1차적이다. 실제 존 컷, DNSKEY와 DS 사슬, NSEC 또는 NSEC3 매개변수, 서명된 구간, Opt-Out 플래그, 와일드카드 상태, TTL, 서명 창, 리졸버 행동이 기술적 결과를 결정한다. 정책 문구는 조작된 증명을 유효한 것으로 만들 수 없고, 유효한 증명도 정책 문구를 법적 명령으로 만들 수 없다.

내구성 있는 정식화는 좁다. DNSSEC는 서명된 존이 유한한 시점에 정의된 증명 규칙 하에서 무엇을 담고 있지 않았는지 인증할 수 있다. 그러나 부재가 왜 발생했는지, 누가 그 이름을 마땅히 가져야 하는지는 판단할 수 없다. 이 경계를 지키는 것이 암호학적 신뢰와 제도적 책임성을 모두 강화한다.

출처