DNSSEC는 복잡한 주제이며, IANA에서 정의한 DNS 레코드 서명 목적의 여러 표준 보안 알고리즘을 사용할 수 있다는 점에서 더욱 혼란스럽습니다. 알고리즘 13은 타원곡선 디지털 서명 알고리즘(ECDSA)의 변형입니다. 현재 0.01% 미만의 도메인에서 사용하고 있지만, DNSSEC를 광범위하게 채택하는 데 마지막으로 어려웠던 두 가지인 존 목록화(zone enumeration)와 DDoS 증폭을 제거하는 데 ECDSA가 도움이 되었다고 생각합니다.
이 글을 읽은 후에 다음을 할 수 있습니다:
글 링크 복사
DNSSEC는 복잡한 주제이며, IANA에서 정의한 DNS 레코드 서명 목적의 여러 표준 보안 알고리즘을 사용할 수 있다는 점에서 더욱 혼란스럽습니다. 알고리즘 13은 타원곡선 디지털 서명 알고리즘(ECDSA)의 변형입니다. 현재 0.01% 미만의 도메인에서 사용하고 있지만, DNSSEC를 광범위하게 채택하는 데 마지막으로 어려웠던 두 가지인 존 목록화(zone enumeration)와 DDoS 증폭을 제거하는 데 ECDSA가 도움이 되었다고 생각합니다.
라이브 서명을 통해 존 목록화가 방지되며 계산상 ECDSA의 빠른 서명 생성을 통해야만 효율적입니다. 타원곡선은 RSA에 비해 키와 서명을 더 작게 생성하므로 DNS 쿼리에 대한 응답도 더 작아집니다. 이렇게 하면 DNS 기반 DDoS 공격의 증폭률이 크게 줄어듭니다.
DNSSEC는 NSEC 및 NSEC3 레코드를 통해 부재 인증을 도입합니다. 하지만 DNSSEC 복잡성 및 고려 사항에서 다루었던 것처럼 공격자는 NSEC와 NSEC3 둘 모두를 통해 영역을 살펴볼 수 있습니다. “DNSSEC 선의의 거짓”(RFC 4470 및 4471에 설명되어 있음)이라는 영리한 기술로 해결할 수 있지만, DNSSEC 레코드가 즉시 서명되는 경우에만 구현할 수 있습니다.
RSA는 DNSSEC에서 가장 널리 사용되는 서명 알고리즘인데, 부분적으로는 유일하게 프로토콜로 정의되어야 하는 알고리즘이라는 점 때문입니다. 안타깝게도, RSA를 사용한 라이브 서명은 엄청나게 비쌉니다.
ECDSA의 성능 이점은 대단합니다. ECDSA 서명을 생성하면 비슷한 RSA 서명을 생성할 때보다 10배 더 계산 비용이 적습니다. 이를 이용하면 규모가 크더라도 라이브 서명(그리고 DNSSEC 선의의 거짓)을 실행할 수 있습니다.
DNSSEC 베타(1,000개 미만으로 도메인 서명이 수행됨) 기간 동안, Cloudflare는 초당 수만 건의 DNSSEC 쿼리에 응답하고 있습니다. 하루에는 10억 건 이상 쿼리가 발생하며 Cloudflare는 필요한 모든 RRSIG 레코드에 즉시 서명합니다. RSA보다 10배 빠른 서명 알고리즘을 사용하면 DNSSEC 서버 로드 시 큰 차이가 생깁니다.
ECDSA 작업을 시작했을 때, Cloudflare는 Go 언어로 OpenSSL 구현을 이용했습니다. 제공하는 서명을 모두 고려하면, 서명 생성을 최적화하는 것이 가장 중요한 우선 순위였습니다. 그래서 저급 어셈블리어로 ECDSA 구현을 다시 작성했고, 현재는 Go 언어일 때보다 20배 이상 빠릅니다. 이 코드는 오픈 소스이며 암호화 커뮤니티 전체가 이러한 최적화를 활용할 수 있도록 Go 1.7로 작성할 예정입니다. 자세히 알아보려면 여기를 참조하세요.
Cloudflare는 세계에서 가장 규모가 큰 관리형 DNS 공급자입니다. Cloudflare는 DNSSEC 서버가 분산 서비스 거부(DDoS) 공격 목적의 증폭 벡터가 되지 않기를 바랍니다. 사용자가 DNSSEC 서버에서 레코드를 요청할 때마다, 서버는 해당 레코드와 연결된 서명과 함께 서명을 확인하는 데 사용한 공개 키까지 반환합니다. 잠재적으로 정보량이 많습니다.
잠재적인 공격자가 Cloudflare DNS 인프라를 남용하지 않도록 방지하려면, DNSSEC 쿼리에 대한 응답 크기를 최대한 작게 만드는 것은 중요한 요건입니다. 이러한 목적을 향해 ECDSA 키와 서명의 규모를 작게 만드는 긴 여정이 진행되고 있습니다.
ECDSA로 128비트 보안을 달성하려면 256비트 키가 필요하지만, 이에 상응하는 RSA 키는 3072비트입니다. 키에서만 증폭률이 12배인 것입니다. 이 블로그 게시물을 통해 암호화 키의 크기가 다른 이유를 자세히 알아보실 수 있습니다.
하지만 대부분의 RSA 키는 3072비트가 아니므로, 증폭률 12배는 현실에 가장 가까운 수치가 아닐 수도 있습니다. 부정적인 반응(NSEC 레코드)인 DDoS 증폭 시 가장 좋지 않은 실제 시나리오를 살펴보겠습니다. Cloudflare 뒤에 위치한 도메인(ECDSA 서명 및 DNSSEC 선의의 거짓을 이용하는 도메인)의 경우 DNSSEC 응답은 일반적으로 377바이트입니다. ECDSA 또는 DNSSEC 선의의 거짓을 이용하지 않는 도메인의 경우 1075바이트인데, 이 수치와 비교해 보세요.
다른 대규모 DNSSEC 구현 시에는 모두 RSA 서명을 이용한다는 점을 고려할 때, Cloudflare의 DNSSEC 인프라는 공격자가 DDoS 벡터로 활용하기에 매력적인 인프라가 아닙니다.
ECDSA는 DNSSEC의 주요한 문제를 해결하지만, 글로벌 DNSSEC 커뮤니티에서는 이를 거의 활용하지 않습니다. 루트 DNS 영역과 Alexa 100만 개 사이트에서의 ECDSA 채택에 대해 간략히 살펴보았습니다.
저희는 먼저 최상위 도메인에서 어떤 DNSSEC 알고리즘을 사용하고 있는지 루트 DNS 영역을 조사했습니다. 다음 표에는 루트 영역 파일의 DS 레코드로 지정된 보안 알고리즘이 나와 있습니다.
curl -s http://www.internic.net/domain/root.zone | awk '$4 == "DS" { print $6}' | sort -n | uniq -c
Alexa 100만 개 사이트에도 비슷한 분석을 수행했고 일반적인 글로벌 인터넷 트래픽을 적절히 확인할 수 있었습니다.
알고리즘 | 서명된 DS 레코드 수 |
---|---|
1(RSA/MD5) | 1 |
3(DSA/SHA1) | 10 |
5(RSA/SHA-1) | 3322 |
7(RSASHA1-NSEC3-SHA1) | 5083 |
8(RSA/SHA-256) | 7003 |
10(RSA/SHA-512) | 201 |
13(SHA-256을 이용한 ECDSA 곡선 P-256) | 23 |
가장 놀라운 사실은 웹 사이트 1,000,000개 중 단 15,643개만 모든 용량에서 DNSSEC를 지원한다는 점입니다. 1.5% 중 알고리즘 13으로 서명된 영역은 23개에 불과합니다. 게다가 알고리즘 13 영역 절반 이상은 Cloudflare 네트워크 뒤에 위치합니다. 즉, Alexa 100만 개 사이트 중 Cloudflare 외부에서 ECDSA를 사용하는 영역은 십여 개 미만이라는 의미입니다. 이 사실은 Roland van Rijswijk-Deij 등이 .com, .net, .org의 서명된 도메인 중 99.99%가 RSA를 사용한다고 주장했던 내용을 뒷받침합니다.
그렇다면, 알고리즘 13이 DNSSEC의 주요한 문제를 해결한다는 사실을 고려할 때 사용률은 왜 그렇게 낮을까요? RSA는 프로토콜이 시작할 때부터 DNSSEC와 함께 도입되었기 때문입니다. ECDSA는 새로운 암호화 알고리즘이며, 확인자, 등록 기관, 레지스트리는 아직도 따라오는 중입니다.
ECDSA에도 단점이 있습니다. Roland van Rijswijk-Deij 등에 따르면, 확인자의 80%만이 ECDSA 유효성 검사를 지원합니다. 수가 늘어나고 있긴 하지만, 이는 지금 바로 DNSSEC 인터넷 전체를 ECDSA로 전환한다면 매일 수백만 명의 인터넷 사용자에 대한 DNSSEC 유효성 검사가 실패하여 확인되지 않은 DNS 레코드가 반환됨을 의미합니다.
뿐만 아니라, ECDSA 서명 생성은 RSA보다 빠르지만 서명 유효성 검사는 사실 훨씬 느립니다. Roland van Rijswijk-Deij 등에 따르면 OpenSSL에 기여한 ECDSA의 최적화에도 불구하고 ECDSA는 아직 1024비트 RSA(영역 서명 키에 가장 일반적으로 사용되는 알고리즘)보다 6.6배 느립니다. DNS 확인자가 과부하되면 전체 인터넷 속도가 느려질 가능성이 있으므로 심각한 문제입니다.
이와 같이 알고리즘 13을 논의하는 데 아주 중요한 경고 사항이 하나 있습니다. 1.5%의 웹 자산만이 모든 용량에서 DNSSEC를 지원한다는 것입니다. 모든 등록 기관에서 DNSSEC를 지원하지는 않으며, 지원을 추가하기는 쉽지 않습니다. 사용자가 DS 레코드를 업로드할 수 있도록 허용해야 하며, 그런 다음 등록 기관에서 이를 레지스트리에 업로드해야 합니다. 등록자가 DS 레코드를 업로드할 필요조차 없도록 자동화된 프로세스를 만들고자 노력하고 있지만 아직은 등록 기관이 개입해야 합니다.
좋은 소식은, Cloudflare가 올바른 방향으로 가고 있다는 것입니다. 지난 12개월 동안 DNSSEC는 전반적으로 상당히 늘어났습니다. 그리고 공개 DNSSEC 베타를 발표하고 범용 DNSSEC를 발표했던 3주 사이 Hover, OVH, Metaname, Internet.bs, .NZ 레지스트리에서 알고리즘 13에 대한 지원을 추가했습니다.
Cloudflare는 DNSSEC가 현대 웹에 필수적인 기술이라고 생각하며 ECDSA를 통해 전 세계적인 DNSSEC 채택을 실현할 수 있을 거라고 믿습니다. 크고 작은 등록 기관과 레지스트리에서 알고리즘 13을 지원하는 모습을 계속 볼 수 있기를 바랍니다.