유니코드
부호화 형식
UCS
양방향 텍스트
BOM
한중일 통합 한자
유니코드 범위 목록
유니코드 등가성
유니코드와 HTML
유니코드와 전자 우편
유니코드 글꼴
v  d  e  h

퓨니코드(Punycode)는 유니코드 문자열을 호스트 이름에서 허용된 문자만으로 인코딩하는 방법으로, RFC 3492에 기술되어 있다. 퓨니코드는 유니코드가 지원하는 모든 언어로 국제화 도메인을 쓸 수 있게 한 IDNA의 일부로, 변환은 전적으로 웹 브라우저와 같은 클라이언트에서 이루어진다.

이 과정은 ASCII 문자 집합으로 표시할 수 없는 도메인 이름의 각 부분마다 따로 일어나고, 변환된 퓨니코드 문자열에는 예약된 접두어 xn--이 덧붙는다. 예를 들어서 "wiki백과"는 퓨니코드로 wiki-ei4p334e가 되고 ".한국"은 3e0b707e가 된다. 따라서 "wiki백과.한국" 도메인은 IDNA에서 xn--wiki-ei4p334e.xn--3e0b707e이 된다.

구조 편집

퓨니코드는 ASCII 문자 집합에 포함되는 문자만 문자열에 남긴 후에, 일반화된 가변 길이 기수법을 사용하여 ASCII에 포함되지 않는 문자들이 원래 문자열에 어떻게 삽입될지를 부호화한다. 이 부호화 과정에서는 코드 포인트가 델타 인코딩으로 저장되기 때문에 삽입될 문자들이 비슷한 코드 포인트를 사용할 경우 짧은 길이로 부호화될 수 있다.

퓨니코드를 사용한 피싱 편집

퓨니코드를 사용하면 도메인 이름에 모든 유니코드 문자를 쓸 수 있기 때문에, IDNA를 사용하여 피싱 공격을 할 수 있다. 예를 들어 "wikipedia.org"라는 도메인을 스푸핑하기 위해서 "wikipеdiа.org"(IDNA에서 xn--wikipdi-8fg6b.org) 도메인을 사용할 수 있다. 굵게 표시한 키릴 문자는 보통 로마자와 비슷하거나 같게 보이기 때문에 사용자가 같은 도메인이라 인식할 가능성이 높아진다.

사파리, 파이어폭스, 오페라 웹 브라우저는 이 문제를 해결하기 위해 국제화된 웹사이트에 접속하는 것을 제한하는 대신, 신뢰할 수 있는 도메인만 원래 의도된 유니코드 이름으로 보여 주고 그렇지 않은 도메인은 "xn--"으로 시작하는 퓨니코드 이름으로 보여 주는 방법을 쓴다. 단 ISO 8859-1에 있는 문자들은 섞여 쓰여도 이 취약점을 쓸 수 있는 가능성이 적기 때문에, 명시적으로 허용하지 않아도 유니코드 이름으로 표시된다. 사파리도 보안 업데이트 2005-003 이후로 특히 피싱에 잘 사용되는 그리스 문자, 키릴 문자, 체로키어가 들어 있는 도메인을 이와 비슷한 방법으로 표시하는 방법을 사용하고 있다.

외부 링크 편집