2026-01-18
[network] dns 루트 서명식의 비밀
가끔 세상의 인터넷이 어떻게 구성되어 있을지 한번쯤 궁금해 본 적이 있을거야. 거기서 가장 상위단의 root dns의 인증과 갱신에 대한 내용은 잘 알려지지 않았는데 찾아보니 재밌는 내용이 많길래 정리해봤어. - 간단 개요 먼저 dns에 대한 기본적인 이해가 있어야 그 다음이 이해되니까 auth.xxx.com 도메인으로 ip를 얻어오는 과정을 잠깐 설명하고 갈게. 1. 네트워크에 설정된 dns 서버로 도메인 전달 - 통신사 dns, 8.8.8.8(google), 1.1.1.1(cloudflare)... 2. 클라이언트의 요청을 받은 dns 서버는 recursive resolver(재귀적 리졸버, 이하 RR)라고도 불리는데 재귀라는 이름처럼 아래 dns 계층 순서대로 요청하고 받은 응답을 다시 요청하는 작업을 반복하여 dns 질의 결과를 클라이언트에 최종 전달하는 책임을 가지고 있어. 3. root name server(이하 루트 서버)로 질의 - .com, .net등으로 구분된 다음 계층 TLD 서버 주소를 RR로 반환 - 예) [a-m].root-server.net (13개) 4. TLD(Top-Level Domain) server로 질의 - xxx.com 도메인이 등록된 네임서버 주소를 RR로 반환 - 예) gTLD, ccTLD.. 5. authoritative name server(권한있는 네임서버)로 질의 - xxx.com 도메인에서 auth.xxx.com 와 연결된 ip 주소를 RR로 반환 - 예) route53, cloudflare, google dns.. 6. RR에서 클라이언트로 최종 ip 반환 여기서 3,4번째 순서로 등장하는 root 서버와 TLD 서버의 DNSSEC 서명 키와 서명 갱신을 어떻게 하는지가 이 글의 주제야. 보통 개인/회사에서 도메인 인증서를 만들 때는 도메인을 구입한 회사(ex. 가비아, godaddy..)의 툴로 도메인과 ip를 연결해서 등록하고 사용해. 그럼 root, TLD 서버는 어떻게 할 지 잠깐 상상해보자고. 그냥 인터넷 주소 관리 기관(ICANN이나 IANA 등)에서 스케줄 정하고 '어 이제 갱신해야겠다' 하고 버튼 딸깍하면 끝나는 걸까? 배포는 어디까지 하지? 등등.. 그걸 이제 하나씩 알아볼게. - Key Signing Key (KSK) KSK는 최고 권한을 가진 서명키로 이 다음으로 설명할 ZSK(Zone Signing Key)를 서명하여 인증하는데 사용돼. 이걸 최초 적용한 건 2010년인데 그 때는 KSK-2010이라고 만들어서 사용했어. 그리고 2018년에 KSK-2017으로 갱신해서 현재까지 사용 중인데 2026년 말에는 KSK-2024로 갱신한다고 해. 대충 7,8년마다 한 번씩 갱신하는 거지. 근데 2025년 회의록을 보니까 이번 갱신 이후로 이제는 3년마다 KSK rollover를 계획하고 있다고 하니 예전보단 더 자주 일어나긴 할거야. ICANN에서는 이 작업을 KSK rollover라고 부르는데 최초 계획부터 적용까지 1년이 넘게 걸리는 작업이야. 왜냐하면 저 루트키를 갱신하면 모든 root, TLD서버 및 DNSSEC 검증을 진행하는 dns 서버(cloudflare, route53 등)에 갱신할 루트키가 미리 적용되어 있어야 하기 때문이야. 만약 롤오버 이후에도 계속 예전 키만 사용하는 dns 서버가 있다면 그 서버에서 응답받은 dns가 검증에서 에러가 발생해버리고 말거야. 소위 말하는 인터넷 대란이 일어날 수도 있는 거지. 그래서 전세계 주요 dns 서버의 준비가 필수적인데 최초 롤오버 시(KSK-2017)에는 이런저런 일들이 많았는지 처음 계획했던 적용 시점보다 1년 가까이 밀리기도 했어. - Zone Signing Key (ZSK) KSK의 서명으로 생성하는 ZSK는 특정 TLD(.com)서버마다 만들어서 사용하고 있어. ZSK의 역할은 DNSSEC(Domain Name System Security Extension) 계층 구조에서 데이터 무결성을 담당하는 핵심적인 키야. ZSK로 TLD서버에 등록되는 dns 레코드에 서명하는 거지. 그렇다고 ZSK만으로 신뢰 체인(trust anchor라고도 불러)을 구성하는건 아니고, 최종 인증에는 KSK와 ZSK가 같이 적용된 신뢰 체인을 사용하고 있어. - 루트 서명식의 개요 루트 서명식을 단순히 생각하면 그저 암호화 키 갱신하는 작업일 뿐인데 왜 서명식(Key Signing Ceremony)이라는 거창한 표현을 했을까? 그 이유는 이게 단순히 보안을 갖춘 컴퓨터 한 대에서 이뤄지는 작업이 아니라서 그래. 서명식은 엄격한 물리적 보안 속에서 진행되는데, 미국 동부(버지니아)와 서부(캘리포니아)의 데이터 센터에서 번갈아가며 열리고 있어. 저 데이터 센터들은 말할 필요없이 최상급의 보안을 가지고 있지. (지문 인식 및 여러 개의 게이트 등) - 루트 서명식의 구성원 서명식에는 다양한 사람이 필요하지만 무엇보다 Trusted Community Representatives(TCR)라고 불리는 전 세계에서 엄선된 21명의 인터넷 보안 전문가들이 핵심이야. 이 사람들은 인터넷의 마스터 키를 다루는 역할이니만큼 선발 조건도 매우 까다로운데 인프라에 대한 깊은 이해는 당연하고, 정치적 중립성이나 과거 범죄 이력, 윤리성 등까지 꼼꼼하게 살펴서 별도 위원회가 선정한다고 해. 여기서 21명이 모두 같은 역할을 하는건 아니야. 각 데이터 센터(미국 동부, 서부)마다 Crypto Officers(CO)라는 역할로 7명씩 할당되어 각 데이터 센터가 번갈아가며 서명식을 진행하게 되고, 나머지 7명은 Recovery Key Share Holders(RKSH) 역할을 맡게 돼. RKSH는 대재앙으로 인해 두 개의 데이터 센터가 모두 파괴되었을 때를 대비하여 복구용 마스터 키 파편을 가진 사람들로 전 세계 각지에 있는 보안 전문가를 대상으로 선별한다고 해. 참고로 5명 이상이 모여야 루트 키를 복구할 수 있다고 하네. - 루트 서명식 진행 CO들은 그저 KSK가 들어있는 HSM(Hardware Security Module) 인증 진행을 위한 마스터 키를 관리하는 역할이고, 서명식의 실질적인 기반 준비나 연락 등은 IANA에서 주관하게 돼. CO외에도 내부/외부 참관인, 서명식 관리자, 금고(HSM) 관리자, 보안팀 등등 20~30명이 참여하는, 말 그대로 Ceremony, 의식인거지. 서명식은 통상 2~4시간이 걸리는데 서명식에 참여하는 사람들이 특수 회의실(Ceremony Room)로 입장하면서부터 모든 과정은 영상으로 녹화되기 시작해. 실제 진행은 IANA의 서명식 관리자가 체크 리스트 형식의 진행 문서를 한 단계씩 읽으면서 진행하게 되는데 이 문서나 기타 자료 등은 웹을 통해 컴퓨터 내의 커맨드 로그까지 전부 공개되고, 심지어 진행 상황을 유튜브로 라이브 중개하면서 녹화하고, 녹화한 영상을 나중에 파일로 올려서 누구나 볼 수 있도록 공개하고 있어. (링크는 마지막에 첨부) https://youtu.be/K590t6szNLI 이제 서명식이 어떻게 진행되는지 한 단계씩 자세히 알아볼게. 1. 서명식이 시작하면 먼저 IANA 운영 위원들의 검증을 통해 이중 금고를 열게 돼. 이 금고 안에는 HSM(Hardware Security Module)이라는 랩탑 크기의 금속 박스로 된 기계와 서명에 필요한 스마트 카드 보관함, 그리고 서명식의 갱신에 사용될 랩탑이 있어. 특히 여기 들어있는 랩탑은 일반 제품이 아니고 철저히 서명식만을 위해 만들어진거야. 랩탑이 오래되면 배터리가 부풀거나 고장나잖아? 그런 부분을 제거하기 위해서 배터리 없이 오로지 유선 전원 연결로만 동작하고, 외부 통신이 되지 않도록 아예 모뎀도 없고, 내장 저장 장치도 없이 서명식마다 별도로 준비한 usb로 부팅하는데 연결된 usb의 해시값을 한번 더 검증해서 1바이트라도 다르면 부팅이 되지 않는다고 해. 여기서 사용한 저장 매체들은 특정 주기가 지나거나 장비 갱신이 이뤄지면 물리적으로 파기해서 운영에 관련된 어떤 데이터도 외부로 유출되지 않도록 신경쓸 정도라고 하네. 2. IANA가 이중 금고를 열면 나오는 것 중에서 스마트 카드 보관함이 있는데 이건 CO 개인마다 가지고 있는 열쇠(진짜 물리적인 열쇠)로 각자 자신의 보관함을 열어서 안에 있는 스마트 카드를 꺼낼 수 있어. 인증에 필요한 전체 도구를 금고를 통해 물리적으로 격리하고, 도구의 사용 시에는 여러 인원에게 인증을 분산하여 여러 겹으로 보안을 유지하는거지. 카드 보관함은 서명식이 끝난 후에 다시 카드를 넣어서 일회용 씰로 봉인 후 금고에 보관하고 다음 서명식에서 사용하게 돼. 3. CO가 카드 보관함에서 자신의 스마트 카드를 정상적으로 꺼내오면 HSM 기계의 슬롯에 카드를 넣고 자신의 고유 PIN 번호를 입력해서 HSM 기계에 인증을 할 수 있어. CO 세 명이 인증에 성공하면 비로소 HSM 기계에서 서명 업무를 진행할 준비가 끝난거야. 만약 CO 한 명이 당일에 갑자기 참석하지 못하거나 PIN 인증을 실패하게 될 경우에는 다른 CO 한 명이 빈 자리를 채워서 진행해야 하기 때문에 보통 예비 CO도 여러 명 참석하더라. 그런데 사람이다보니 PIN 번호를 잊어버릴 수도 있잖아? 이런 경우에는 다음 서명식에서 HSM에 새로운 스마트 카드를 등록하고 PIN을 설정하는 절차를 추가로 진행한다고 해. 이 과정은 Key Ceremony의 일부로 이것 역시 엄격한 절차 내에서 진행돼. 만약 내가 그 당사자라면 상상만 해도 아찔해 큭.. 4. 어쨌든 여기까지 모든 준비가 끝났으면 이젠 서명식의 하이라이트인 서명 갱신을 진행하게 돼. KSK 롤오버는 7,8년마다 열리는 특별한 상황이고, 보통 3개월마다 열리는 정기 서명식에서는 루트 서버의 하위 계층인 TLD(.com, .net 등) 서버들의 서명을 갱신하게 돼. 아까 카드 인증으로 준비가 끝난 HSM에는 KSK(루트키) 개인키가 저장되어 있어. 알다시피 개인키는 외부 유출을 절대적으로 막아야 하기 때문에, 갱신할 ZSK 요청서를 랩탑을 통해서 HSM으로 보내면 여기서는 KSK 개인키로 인증하여 서명값이 포함된 결과물만 랩탑으로 돌려주는 방식으로 진행하게 돼. 심지어 한 번의 서명 작업이 끝나면 HSM 기계에서는 메모리로 읽어들였던 KSK 정보를 즉시 지워버리고 초기화 시켜버린다고 해. 만약 다시 서명 작업을 시작하려면 HSM 기계의 카드 인증부터 다시 진행해야 하는거지. 5. 이렇게 서명이 갱신된 인증서를 여러 개의 usb로 복사하는데 각각 배포, 백업, 아카이브용으로 사용돼. 물론 이 복사조차 그냥 커맨드 명령만 날리는게 아니라 랩탑을 통해 복사할 때마다 체크섬 값을 출력하고 참관인들은 원본과 usb 복사본의 체크섬이 동일한 지 눈으로 한 글자씩 직접 확인하여 변조되지 않았음을 확인한다고 해. 이 중에 배포용 usb는 담당자가 가지고 가서 IANA 배포 시스템에 연결하면 드디어 갱신한 인증서들이 전 세계 13대 루트 네임 서버로 전파되는 거야. 6. 인증서 복사까지 끝나면 HSM과 랩탑에 기록된 로그 파일을 백업하고, 다음 서명식을 위해 초기화하는 순서를 거쳐서 이중 금고를 다시 봉인하게 돼. 그리고 이 과정이 조작되지 않았다는 문서에 주요 인원들(CO, 관리자, 외부 감시인 등)이 최종 서명을 남기면, 비로소 길고 긴 루트 서명식이 모두 끝나. - 서명식 진행 결과의 공유 진행된 서명식은 아래처럼 하나의 웹페이지에 모든 자료가 업로드되어 누구나 볼 수 있어. https://www.iana.org/dnssec/ceremonies/55 여기에는 진행 순서, HSM&랩탑 로그, 3개의 캠별 녹화 파일, 심지어 랩탑 부팅에 쓰인 OS의 iso파일도 올라와있어. 이 모든 것은 서명식의 투명성을 증명하기 위한 장치들이야. 사실 위에서 따로 말은 안 했는데 서명식 하루 전에 일부 인원이 모여서 서명식에서 순조로운 진행이 가능한 지 캠코더 점검 및 녹화 테스트, 금고 확인과 청소까지 체크 리스트로 관리해서 서명식에서의 돌발 상황을 최소화하는 노력도 하더라고. 아래 첨부한 이미지는 한 70페이지 정도의 서명식 진행 문서 중 일부인데, 스크립트를 자세히 읽어보면 누가 누구를 방으로 데려오는지, 누가 설명하는지, 그리고 그 시각은 언제인지 기록하는 등.. 정말 투명하게 운영하고 있는게 느껴져. - 실제 루트키 확인 dig 명령을 사용하면 dns 서명을 확인할 수 있어. 아래는 루트존의 dnskey 서명을 요청하는 커맨드와 그 결과야. (무의미한 값은 축약했어) $> dig . dnskey +dnssec ... ;; ANSWER SECTION: [1] . 38549 IN DNSKEY 257 3 8 AwEAAa96... [2] . 38549 IN DNSKEY 257 3 8 AwEAAaz/... [3] . 38549 IN DNSKEY 256 3 8 AwEAAbNT... [4] . 38549 IN RRSIG DNSKEY 8 0 172800 20260201 20260111 20326 . o5fb3sEB... 레코드마다 임의로 번호를 지정했으니 그걸로 설명할게. 1,2번은 257 타입, 즉 KSK이고, 3번은 256 타입으로 KSK로 서명한 ZSK, 4번은 KSK로 서명한 RRSIG 레코드야. 여기서 KSK가 두 개인 이유는 지금 롤오버 중이라서 미래에 갱신할 KSK와 공존하는거고, 2026년 말에 KSK 롤오버가 끝나면 이제 하나만 보이겠지. 4번 RRSIG 레코드 결과만 조금 더 볼게. 여기에는 만료 시간과 시작 시간이 있는데 그 옆에 20326이란 값이 중요해. 이 값은 RRSIG를 서명한 KSK의 id를 뜻하는데 이건 KSK 생성 시 할당되는 고유값이 아니고, KSK 값을 특정 해시 알고리즘으로 돌려서 나온 16비트 값이야. RFC문서에 알고리즘이 써있긴 하더라고. https://www.rfc-editor.org/rfc/rfc4034#appendix-B 근데 매번 계산하긴 힘들잖아? 그래서 dig의 multiline을 추가하면 KSK의 계산된 id값도 볼 수 있어. $> dig . dnskey +dnssec +multiline ... [1] . 42131 IN DNSKEY 256 3 8 (AwEAAbNT...) ; ZSK; alg = RSASHA256 ; key id = 21831 [2] . 42131 IN DNSKEY 257 3 8 (AwEAAaz/...) ; KSK; alg = RSASHA256 ; key id = 20326 [3] . 42131 IN DNSKEY 257 3 8 (AwEAAa96...) ; KSK; alg = RSASHA256 ; key id = 38696 [4] . 42131 IN RRSIG DNSKEY 8 0 172800 (8 0 172800 20260201 20260111 20326 . o5fb3sEB...) 저기 2번의 KSK를 보면 id가 20326인게 보이지? 이렇게 RRSIG의 서명에 쓰인 KSK가 저 키라는걸 확인할 수 있어. 웹으로 보면 관계도가 더 잘 보여서 그것도 첨부해봤어. 사이트는 여기. https://dnsviz.net/d/www.google.com/dnssec/ - 소회 루트키 갱신에 대해 잘 모를 때는 전 세계에서 몇 명이 비밀스럽게 모여서 갱신한다고만 대충 알고 있어서 가벼운 마음으로 시작했는데 내용이 많다보니 꽤 길어졌네. 생각해보면 내가 모르는 수많은 분야에서도 이렇게 무언가를 결정하기 위한 논의와 밑작업들이 얼마나 많이 이뤄지고 있을까 싶어. 그냥 it분야만 잠깐 생각해봐도 온갖 rfc 문서나 웹 표준화 작업, 루트 서버의 미러화 등등.. 지금도 어딘가에서 산업 기반을 위해 공헌하는 분들께 감사합니다. 덕분에 편하게 살고 있어요. - 결론 1) 인터넷의 trust chain이 시작되는 루트키는 전 세계 전문가들의 다중 인증을 통해 갱신된다. 2) KSK 서명식은 수 년에 한번, ZSK 서명식은 3개월마다 미국 동부/서부의 데이터 센터에서 번갈아가며 진행된다. 3) 루트키는 이중 금고에 물리적으로 격리되어 있고, 인증은 전 세계 여러 사람들을 통해 분리되어 변조 및 탈취가 불가능한 시스템이다. 4) 디지털 세상을 지탱하는 최상위 인증서가 가장 아날로그스러운 절차와 감시를 통해 검증되고 있는게 아이러니. 이전글: https://frogred8.github.io/ #frogred8 #network #dns #ceremony
참석자 명단과 서명

서명식 진행 스크립트

도식화된 dns
