2022. 1. 6. 08:20ㆍFront
Result
전세계의 다국어 도메인은 퓨니코드로 변경되어 등록과 처리가 진행된다.
인터넷 사용자가 입력한 다국어 도메인은 클라이언트 측에서 아스키 기반의 퓨니코드로 변환되 네임서버로 전송된다.
| 과정
- 주소창에 다국어 도메인이 입력된다 (ex. 청와대.com)
- 클라이언트(브라우저)측에서 퓨니 코드로 변환한다 ( ex. xn--vk1b187a8ue.com )
- DNS의 네임 서버로 전송되 IP 주소를 찾아 접속하게 된다
* 네임 서버는 퓨니코드 형태의 영역 데이터를 운영한다 .
1) 국제화 도메인 네임 ( IDN _ Internationalized Domain Name )
인터넷 상에서 호스트의 주소를 나타내는 도메인 네임은 기본적으로 라틴 문자, 숫자, ( _ )언더바 등으로 구성되어있다.
여기서 말하는 다국어 도메인(IDN)은 라틴자를 제외한 그리스 문자, 키릴 문자, 한글, 한자, 히라가나 / 가타카나, 아랍 문자 등이 포함되는 것을 의미한다.
전세계의 다국어 도메인은 퓨니코드로 변경되어 등록과 처리가 진행되며,
굵게 표시한 키릴 문자(Д -> A, Ч, У -> Y 등)는 보통 로마자와 비슷하거나 같게 보이기 때문에
사용자가 같은 도메인이라 인식할 가능성이 높아진다.
| IDN 동형 이의어 공격 ( IDN homograph attack )
사용자를 속이기 위해 확립 된 도메인과 유사한 이름을 사용한는 것을 의미한다.
그리스 문자 & 키릴 문자 등이 피싱에 자주 사용된다.
예시 : example.com 의 라틴어 문자 "a"는 키릴 문자
1. 타이포 스쿼팅 : 가해자는 수동으로 입력 할 때 일반적으로 발생하는 자연스러운 오타에 의존하여 피해자를 유인
2. 동음 이의어 스푸핑 : 가해자는 시각적으로 구별 할 수없는 표현으로 피해자를 속인다
웹 브라우저는 이 문제를 해결하기 위해 국제화된 웹사이트에 접속할 때, 신뢰할 수 있는 도메인만 원래 의도된 유니코드 이름으로 보여 주고 그렇지 않은 도메인은 "xn--"으로 시작하는 퓨니코드 이름으로 보여 주는 방법을 사용한다.
- 구글 크롬 or 오페라 등의 브라우저는 모든 문자가 사용자가 선호하는 언어 중 하나에 속할 경우에만 IDN을 표시
- Safari의 경우 접근 방식은 문제가있는 문자 집합을 퓨니코드로 렌더링하고
- Internet Explorer 버전 7 이상에서는 다른 언어의 스크립트를 혼합하는 레이블을 제외하고 IDN을 허용한다. 스크립트를 혼합하는 레이블은 퓨니코드에 표시한다.
2) 국제화 최상위 도메인 ( IDN TLD )
기존 도메인(특히 .com 과 .net)이 포화 상태였기 때문에, .info .biz 같은 신규 최상위 도메인을 생성하다가 최상위 도메인 생성 제한 자체를 풀게 되었다.
그렇게 풀린 제한은 로마자 문자, 한글, 한자, 히나가라, 그리스 문자, 아랍 문자 등 유니코드가 지원하는 세계 각종 문자로 도메인을 만들 수 있도록 개선되었다.
ex ) namu.wiki 또한 최상위 도메인으로 .wiki 가 풀리면서 사용가능하게 된 이유
ex ) 청화대.한국 ➝ https://xn--vk1b187a8ue.xn--3e0b707e
✓ 퓨니 코드(Punycode)는 무엇일까
- 문자열이 아스키로 변환된 구문
- 한글 뿐 아닌 세계 각국의 자국어로 도메인을 처리할 수 있게 만들어진 표준 코드
- 접두어(xn--)로 시작하는 영숫자 혼합 문자열로 변환된다
- 국제표준의 지원 코딩 방식으로 개발 채택
- 퓨니코드로의 변환은 브라우저(클라이언트) 측에서 이루어진다
✓ 아스키 코드 (ASCII) 란?
- 정보 교환용 7비트 부호체계
- 000(0x00) ~ 127(0x7F)까지 총 128개의 부호를 사용
- 1바이트를 구성하는 8비트 중에서 7비트만 쓰도록 제정 & 나머지 1비트는 통신 에러 검출 용도로 비어둔다
더보기아스키 코드표 (ASCII Codes)
- 컴퓨터는 이진수만 알고 입력한 문자를 출력할 수 있도록 문자 코드가 존재한다.
- 그런 문자코드와 숫자를 매칭시킨 대표적인 표가 아스키 코드표다.
- ASCII의 A는 American을 뜻하며 영어권 국가를 위해서 만들어져 초창기에는 문자 코드는 ASCII의 로마자 위주 코드였다
- 한글이나 중국어 등을 표현하기에 아스키 코드가 표현할 수 있는 문자가 제한적이였다.
- 1바이트의 남은 공간에 각 나라가 자국 문자를 할당하였지만 깨짐 현장이 발생했다.
- 이에 따라 모든 언어를 표현할 수 있는 문자표가 필요하다고 판단되었고
- 2~3바이트의 넉넉한 공간에 세상의 모든 문자를 할당한 결과물인 유니코드가 생겨났다.
- 컴퓨터는 이진수만 알고 입력한 문자를 출력할 수 있도록 문자 코드가 존재한다.
✓ 그래서 유니 코드는 무엇일까?
전 세계의 모든 문자를 다루도록 설계된 표준 문자 전산 처리 방식으로 국제 표준 문자표이다
- 유니코드는 지구상에서 통용되는 대부분의 문자들을 담고 있다.
- 각 언어와 문자 체계에 따른 충돌 문제를 해결한다
- 저장 효율을 위해 언어에 따라 1~4byte를 사용해 문자를 표현하는 가변 길이 인코딩 방식을 사용
- 유니 코드에는 악보 기호, 이모지, 태그, 마작이나 도미노 기호 등도 포함되며, 나열된 유니코드에 대해 읽어올 단위에 대한 혼란이 발생해 다양한 인코딩 방식이 존재한다.
- UCS, UTF(Unicode Transform Format) 등의 인코딩 방식, 문자 처리 알고리즘 등
- UTF-8은 8비트(1byte) 단위로 유니코드를 인코딩하는 방식을 의미
- 유니코드의 시작 바이트를 확인하여 몇 바이트를 읽어올 것인지를 결정한다.
- UTF-8은 8비트(1byte) 단위로 유니코드를 인코딩하는 방식을 의미
- 인코딩은 몇 바이트를 읽을 것인지에 대한 약속이기 때문에 인코딩이 서로 다르면 문자가 깨져서 표시된다.
- EUC-CN ↔ EUC-KR/MS949 예시 ( 法拉利赛车 ↔ 랬윗적힙났 / 七彩龙[8] ↔ 폄꽈질 )
큰 도움이 되었습니다 🎈
✓ https://ko.wikipedia.org/wiki/%ED%93%A8%EB%8B%88%EC%BD%94%EB%93%9C
✓ http://xn--910bx01e.net/%ED%93%A8%EB%8B%88%EC%BD%94%EB%93%9C-punycode-%EC%9D%98-%EC%97%AD%ED%95%A0/
✓ https://namu.wiki/w/%EA%B5%AD%EC%A0%9C%ED%99%94%20%EB%8F%84%EB%A9%94%EC%9D%B8%20%EB%84%A4%EC%9E%84?from=IDN
✓ https://sweetday-alice.tistory.com/179
✓ https://ko.wikitrev.com/wiki/IDN_homograph_attack

'Front' 카테고리의 다른 글
Next.js Conf (0) | 2022.10.30 |
---|---|
Next js 맛보기 (0) | 2021.11.10 |
M1 맥북 - VS code 및 도커 설치 (0) | 2021.11.08 |
M1 맥북 - Nodejs, npm & yarn 설치 (0) | 2021.11.06 |
🛰 API 호출로 프로젝트에 필요한 데이터 GET해오는 방법 (Feat. 프론트앤드, React) (0) | 2021.08.30 |