IDN이란?
IDN(국제화된 도메인 이름)은 원래 DNS 사양에서 사용한 전통적인 ASCII 집합에 포함되지 않는 문자를 담은 도메인 이름입니다. IDN을 사용하면 중국어(中文.com), 아랍어(مثال.com), 키릴 문자(пример.com) 등 다양한 고유 문자 체계로 도메인 이름을 만들 수 있습니다.
IDN이 중요한 이유
기존 DNS는 영어 사용자를 전제로 설계되어 도메인 이름을 다음과 같이 제한했습니다.
- 영문자 a-z(대소문자 구분 없음)
- 숫자 0-9
- 하이픈(맨 앞이나 맨 끝에는 사용할 수 없음)
이 제한은 라틴 알파벳을 사용하지 않는 수십억 명의 사람을 인터넷에서 배제했습니다. IDN은 다음과 같은 방식으로 인터넷 접근성을 높입니다.
- 모국어 주소: 사용자가 자신의 언어로 URL을 입력할 수 있습니다.
- 브랜드 보호: 기업이 여러 문자 체계로 이름을 확보할 수 있습니다.
- 문화적 접근성: 인터넷 참여의 장벽을 낮춥니다.
IDN 작동 방식: Punycode 연결
DNS 인프라는 ASCII만 이해하므로 IDN은 Punycode라는 인코딩 시스템을 사용합니다. IDN을 등록하거나 접속할 때의 흐름은 다음과 같습니다.
1. 사용자 입력: 中文.com (중국어로 "중국")
2. 브라우저 인코딩: xn--fiq228c.com (Punycode 표현)
3. DNS 확인: 표준 ASCII 조회
4. 브라우저 표시: 中文.com (원래 형식)
"xn--" 접두사는 Punycode로 인코딩된 문자열을 나타냅니다. 이 변환은 사용자에게 투명하게 이루어집니다.
Punycode 예시
다음 표는 원래 IDN과 DNS에서 사용하는 Punycode 표현을 비교합니다.
| IDN 도메인 원문 | Punycode 인코딩 결과 |
|---|---|
| münchen.de (독일어 도메인 이름) | xn--mnchen-3ya.de |
| 中文.com (중국어 도메인 이름) | xn--fiq228c.com |
| правда.рф (러시아어 도메인 이름) | xn--80aafi6cg.xn--p1ai |
TLD별 IDN 지원
IDN 지원 여부는 TLD마다 다릅니다.
완전 지원
대부분의 최신 gTLD와 많은 ccTLD가 IDN을 지원합니다.
- .com, .net, .org (Verisign)
- .de (독일어 문자)
- .jp (일본어)
- .cn (중국어)
국제화된 TLD
일부 TLD 자체가 IDN입니다.
- .рф (러시아, 키릴 문자)
- .中国 (중국)
- .भारत (인도, 데바나가리 문자)
- .السعودية (사우디아라비아, 아랍 문자)
제한적 지원 또는 미지원
일부 TLD는 IDN을 제한하거나 전혀 지원하지 않습니다. 대상 TLD의 IDN 지원 여부를 항상 확인하세요.
보안 고려사항: 동형문자 공격
IDN은 동형문자 공격이라는 보안 위험을 만들 수 있습니다. 서로 다른 문자 체계의 시각적으로 유사한 문자를 이용해 사기성 도메인을 만드는 공격입니다.
apple.com (legitimate - Latin letters)
аpple.com (attack - Cyrillic 'а' looks like Latin 'a')
동형문자 공격 방어
브라우저 동작: 최신 브라우저는 의심스러운 IDN을 유니코드 대신 Punycode로 표시하여 공격 가능성을 드러냅니다. 레지스트리 정책: 일부 레지스트리는 하나의 도메인에서 조합할 수 있는 문자 집합을 제한합니다. 도메인 모니터링: DomScan의 타이포스쿼팅 탐지와 같은 도구로 브랜드를 노리는 등록 동형문자 변형을 찾을 수 있습니다.IDN 지원 구현
도메인 도구를 만드는 개발자는 다음을 구현할 수 있습니다.
유효성 검사
// Check if domain contains non-ASCII
function isIDN(domain) {
return /[^\x00-\x7F]/.test(domain);
}
변환
// Convert to Punycode for DNS queries
const punycode = require('punycode/');
const ascii = punycode.toASCII('中文.com'); // xn--fiq228c.com
const unicode = punycode.toUnicode('xn--fiq228c.com'); // 中文.com
RDAP 질의
대부분의 RDAP 서버는 두 형식을 모두 허용합니다.
# Both work
curl "https://rdap.verisign.com/com/v1/domain/xn--fiq228c.com"
curl "https://rdap.verisign.com/com/v1/domain/中文.com"
모범 사례
IDN을 다룰 때는 다음을 따르세요.
1. 내부적으로는 항상 Punycode 형식을 저장하고 처리합니다.
2. 사용자에게는 유니코드 형식을 표시합니다.
3. 보안 기능에 동형문자 탐지를 구현합니다.
4. 등록 전에 TLD별 IDN 정책을 확인합니다.