루트 키가 처음으로 바뀌던 날

8년 동안 서명된 DNS의 보안 전체가 단 한 번도 바뀐 적 없는 키 하나에 매달려 있었다. 2018년 마침내 그 키를 교체했을 때, 무서웠던 건 암호학이 아니라 — 어느 리졸버가 따라올 준비가 됐는지 아무도 볼 수 없다는 사실이었다.

2018년 10월 11일, ICANN은 암호 키 하나를 바꾸고서, 방금 자기들이 인터넷 일부의 이름 해석을 망가뜨린 건 아닌지 몇 시간 동안 긴장한 채 지켜봤다.

그 키는 루트 존의 키 서명 키(Key Signing Key), 줄여서 KSK였다. DNSSEC 신뢰 체인을 그려 본 적 있다면, 맨 꼭대기에 있는 것 — 나머지 전부가 매달려 있는 앵커다. 리졸버가 example.com의 서명을 믿는 건 그게 .com으로, 다시 루트로 체인이 이어지고, 그 루트가 리졸버가 질문을 던지기도 전에 이미 신뢰하는 키로 서명돼 있기 때문이다. 그 미리-신뢰된 키가 트러스트 앵커이고, 루트에는 그게 오직 하나뿐이었다. 2010년 루트 존이 처음 서명될 때 만들어졌고, 그 후 8년 동안 한 번도 바뀌지 않았다. KSK-2010이라 부르자. 지구상 모든 검증 리졸버가 이 키를 안에 박아 두고 있었다.

한 번도 바뀐 적 없는 키의 불편한 점은, “바꿀 필요가 없었다”와 “바꿀 수 없었다”를 구분할 수 없다는 것이다. 그리고 교체할 수 없는 키는 보안 통제라 하기 어렵다. 유출되거나, 알고리즘이 약해지거나, 아니면 그냥 가장 중요한 비밀을 주기적으로 교체하는 기본 위생을 지키고 싶어졌다면 — 어딘가의 누군가가 스위치를 내려 인터넷 절반의 DNSSEC 검증이 꺼지는 플래그 데이 없이 — 세상 모든 리졸버에서 그 키를 갈아끼울 방법이 필요하다. 그러니 2018년의 진짜 질문은 새 키가 좋은가가 아니었다. 이 키를 바꾸는 게 애초에 가능한가였다.

지루하게 만들려던 장치

DNSSEC 설계자들은 이걸 내다보고 오래전에 답을 만들어 뒀다. RFC 5011, “DNSSEC 트러스트 앵커의 자동 업데이트”다. 발상은 우아하다. 새 앵커를 도입하려면 그걸 존에 게시하고 키로 서명한다. 옛 키를 이미 신뢰하는 리졸버는 새 키가 자기가 믿는 무언가에 의해 보증된 걸 보고, 홀드다운 기간 — 공격자가 잠깐 주입한 키가 아니란 걸 확인하기 위한 30일 — 을 기다린 뒤, 조용히 신뢰 앵커 집합에 추가한다. 사람이 로그인하지 않는다. 설정을 고치지 않는다. 키가 스스로 굴러간다.

그게 이론이다. 2018년은 이걸 전체 DNS의 루트에서 실제로 처음 돌려 본 때였다. RFC 5011은 10년째 존재했지만, 정작 중요한 규모에서는 프로덕션에서 한 번도 검증된 적이 없었다. 새 키 KSK-2017은 의식(ceremony)을 통해 생성돼 게시되고 KSK-2010으로 서명됐다. 그리고 기다림이 시작됐다 — RFC 5011의 정직한 요약은 결국 믿음의 행위라는 것이기 때문이다. 새 키를 게시하고, 바깥의 리졸버들이 프로토콜을 따라 스스로 업데이트하고 있으리라 믿는다. 당신이 운영하지도 않는 10만 대의 재귀 리졸버에 들어가 확인할 수는 없다.

문제는 수학이 아니었다

롤오버는 원래 2017년 10월 11일로 잡혀 있었다. 날짜 몇 주 전, ICANN은 이를 연기했다 — 무려 1년을. 암호학에 문제가 있어서가 아니라, 이제 막 보이기 시작한 숫자 하나 때문이었다.

비슷한 시기에 리졸버들이 RFC 8145를 지원하기 시작했다. “DNSSEC에서 트러스트 앵커 지식 시그널링”이라는 건조한 이름의 장치인데, 검증 리졸버가 평범한 질의 도중에 자기가 어떤 트러스트 앵커를 갖고 있는지 되보고할 수 있게 해준다. 처음으로 루트 운영자들이 현장에 실제로 어떤 키가 설정돼 있는지 대략적인 인구조사를 할 수 있게 된 것이다. 그리고 그 조사가 섬뜩한 걸 말했다. 2017년 9월에 보고한 약 1만 2천 대의 검증 리졸버 중 약 4%가 KSK-2010만 설정하고 있었다 — 옛 키만, 새 키는 없이. 롤오버가 그대로 진행되면 이 리졸버들은 곧 루트 서명을 멈출 키를 상대로 계속 검증하게 되고, 그들이 하는 모든 DNSSEC 서명 조회가 실패한다. 그 뒤에 있는 사용자들에게는 인터넷의 상당 부분이 그냥 해석되지 않게 된다.

4%는 이들이 사용자가 아니라 리졸버라는 걸 떠올리기 전까진 참을 만하게 들린다 — 잘못 설정된 ISP 리졸버 하나가 수백만 명 앞에 앉아 있을 수 있다. 더 나쁜 건 그 숫자를 아무도 완전히 설명하지 못했다는 것이다. 그 리졸버들이 정말로 준비가 안 된 거라 RFC 5011이 실패하고 있는 걸까? 아니면 갓 나온 텔레메트리 자체가 오해를 낳는 걸까 — 사실은 멀쩡했을 리졸버들이 무섭게 보이는 방식으로 보고한 걸까? 데이터는 새롭고, 자기선택적이고, 모호했다. 그리고 인터넷 전체의 DNS 신뢰가 매달린 키를, 이해하지도 못하는 숫자 위에서 굴리지는 않는 법이다. 그래서 멈추고, 1년을 들여 연구하고, 새 플래그 데이를 잡았다. 2018년 10월 11일.

조용히, 작동했다

두 번째엔 통과했다. 2018년 10월 11일, 리졸버들이 KSK-2017로 검증하기 시작했고, 두려워하던 장애의 물결은 오지 않았다 — 잘못 설정된 리졸버 뒤의 소수 사용자가 실패를 겪었지만, 인터넷 전체는 알아차리지 못했고, 인프라 작업에서 그건 최고의 찬사다. 몇 달 뒤 2019년 1월 11일, ICANN은 KSK-2010에 revoke 비트를 세웠다 — 리졸버에게 “이 키는 죽었으니 버리라”고 말하는 RFC 5011 시그널이다 — 그리고 2019년 3월 22일, 옛 키는 루트 존에서 완전히 제거됐다. 8년 동안 바뀐 적 없던 것이 사라졌고, 그것을 바꾸는 장치가 작동함이 증명됐다.

사람들이 2018년에서 얻은 교훈은 타원곡선이나 홀드다운 타이머에 관한 게 아니었다. 글로벌 키를 교체하는 일의 어려운 부분은 교체 자체가 아니라 가시성이라는 것이었다. 암호학은 2000년대에 이미 풀렸다. 롤오버를 거의 탈선시킬 뻔한 건, 당신이 통제하지도 못하는 10만 대 기계가 어떤 상태인지 아는 평범한 운영상의 질문이었고, 그걸 답할 유일한 도구가 그 자체로 갓 나와 읽기 어려웠다는 사실이었다. 우리는 키를 바꾸는 아름다운 자동 프로토콜을 만들어 놓고는, 반쯤 눈 감은 채로 그걸 조종하고 있었음을 발견했다.

옛날이야기처럼 들린다면, 아니다. 두 번째 루트 KSK 롤오버가 지금 진행 중이다. 2024년부터 2026년에 걸쳐 — 첫 번째보다 의도적으로 더 느리고 훨씬 더 촘촘히 계측된 과정으로. 바로 2018년이, 놀랄 일은 당신이 볼 수 있는 키가 아니라 볼 수 없는 리졸버에 산다는 걸 모두에게 가르쳤기 때문이다. DNSSEC 채택은 여전히 듬성듬성하고 검증은 더 듬성듬성하다. 그건 그것대로 오래된 창피다. 하지만 적어도 루트 키만큼은, 이제 우리가 건드리기 두려워하는 것이 아니게 됐다. 그걸 알아내는 데 2018년까지 걸렸다.

토론 참여

← 블로그로 돌아가기