호모글리프

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

호모글리프는 모양이 비슷하여 구별하기 어려운 문자를 의미한다. 이러한 문자는 숫자 0과 대문자 O, 숫자 1과 소문자 l, 대문자 I처럼 여러 종류가 있으며, 초기 타자기에서는 구분이 어려웠다. 현재는 글꼴 디자인을 통해 구별하려는 시도가 이루어지고 있으며, 유니코드에서는 이러한 문자에 대한 코드 포인트를 별도로 할당한다. 호모글리프는 도메인 이름 스푸핑과 같은 보안 문제를 야기할 수 있으며, 이를 방지하기 위해 사용자는 URL을 주의 깊게 확인하고, 보안 솔루션 및 도메인 등록 정책을 활용해야 한다.

호모글리프
📚 더 읽어볼만한 페이지
  • 유니코드 - 이모지
    이모지는 1999년 NTT 도코모에서 처음 도입된 그림 문자로, 유니코드 표준 제정 후 전 세계적으로 확산되어 다양한 언어적 기능을 수행하며 대중문화에 영향을 미치지만, 플랫폼별 표현 방식 차이와 의미 해석 논란도 존재한다.
  • 유니코드 - 국제 음성 기호
    국제 음성 기호는 국제 음성 협회가 개발한 언어의 음성 표기 문자 기호 체계로, 라틴 문자를 기반으로 자음, 모음, 초분절 기호 등을 포함하여 모든 언어의 음성을 정확하게 표기하는 것을 목표로 한다.
  • 타이포그래피 - 팬그램
    팬그램은 특정 문자 집합의 모든 문자를 최소 한 번 포함하는 문장이나 구절로, 완전 팬그램, 자기 열거 팬그램 등 여러 유형이 있으며, 다양한 언어에서 활용되고 수학적 연구 주제로도 다뤄진다.
  • 타이포그래피 - ß
    ß(에스체트)는 독일어에서 긴 s와 s 또는 z의 합자에서 유래한 문자로, 특정 조건에서 무성음 /s/를 나타내며, 사용 범위가 축소되었으나 대문자 형태(ẞ)가 추가되어 표준 독일어에서 선택적으로 사용될 수 있다.

2. 용어

동음이의어라는 용어는 때때로 동형 문자와 동의어로 오용되기도 하지만, 일반적인 언어학적 의미에서 동음이의어는 철자는 같지만 의미가 다른 단어이며, 이는 문자가 아닌 단어의 속성이다.

이형 문자는 모양은 다르지만 같은 의미를 갖는 글꼴 디자인 변형을 의미한다. 예를 들어 세리프체의 g와 산세리프체의 g, 또는 한두 줄로 된 달러 기호가 있다. 동형 기호라는 용어는 이와 비슷하지만 약간 더 추상적인 의미를 갖는다. 예를 들어 기호 £와 문자 L (Lsd에서)은 둘 다 파운드 스털링을 의미하지만, 해당 문맥에서만 의미가 통한다. 이형 문자와 동형 기호는 비공식적으로 "디스플레이 변형"이라고도 한다.

3. 주요 호모글리프

키릴 문자로마자는 A, B, C, E, I, J, K, M, H, O, P, C, T, Y (А, В, C, E, І, Ј, К, М, Н, О, Р, С, Т, Ү) 등 많은 글자 모양이 서로 같거나 거의 비슷하지만, 유니코드에서는 서로 다른 문자로 취급된다. 터키어의 점이 있는 I (İ)나 Í (I에 ´가 추가된 것)와 같이 로마자에서도 몇몇 글자들은 거의 같은 형태를 띤다. j와 에스페란토의 글자 ĵ, 로마자 Ȉ와 Ï, 로마자 ÖÕ 등도 동일한 문자 체계에 속하지만, 분명히 다른 글자이며, 거의 비슷하게 보인다.

오늘날 흔히 사용되는 중요한 호모글리프 쌍은 숫자 0(영)과 대문자 O(오), 그리고 숫자 1(일)과 소문자 l(엘), 대문자 I(아이)이다. 초기 기계식 타자기 시절에는 이러한 글리프들 사이에 시각적 차이가 거의 없어서, 타이피스트들은 키보드 단축키로 이들을 서로 바꿔 사용했다. 실제로 대부분의 키보드에는 숫자 "1" 키가 없었고, 사용자는 대신 소문자 "l"을 입력해야 했다. 일부 키보드에서는 숫자 "0"도 생략되어 "O"를 대신 입력했다. 1970년대와 1980년대에 타자기 사용자였던 사람들이 컴퓨터 키보드 조작자로 전환되면서, 이러한 습관이 이어져 때때로 혼란을 야기했다.

리터의 기호는 단위 명칭이 인명에서 유래하지 않았기 때문에 원래 소문자 l (엘)로 표기했지만, 숫자 1과 비슷하여 혼동을 일으킬 수 있으므로 대문자 L로 표기하는 것이 권장된다.

대부분의 현대 글꼴 디자인은 이러한 호모글리프를 신중하게 구별한다. 일반적으로 숫자 "0"은 더 좁게 그리고, 숫자 "1"은 눈에 띄는 세리프를 넣어 그린다. 초기 컴퓨터 인쇄물은 "0"에 슬래시나 점을 추가하여 구분했는데, 이는 스칸디나비아어 문자 "Ø" 및 그리스 문자 Φ(phi)와의 새로운 혼동을 야기했다. 이러한 문자를 구별하기 위한 글꼴 재설계는 혼란을 줄이는 데 도움이 되었다. 두 개의 서로 다른 문자가 주어진 관찰자에게 동일하게 보이는 정도를 "시각적 유사성"이라고 한다.

3.1. 로마자와 키릴 문자

키릴 문자로마자는 A, B, C, E, I, J, K, M, H, O, P, C, T, Y (А, В, C, E, І, Ј, К, М, Н, О, Р, С, Т, Ү) 등 많은 글자 모양이 서로 같거나 거의 비슷하다. 하지만 유니코드에서는 서로 다른 문자로 취급된다.

유럽에서 널리 쓰이는 세 가지 문자(그리스 문자, 키릴 문자, 라틴 문자)는 많은 글자 형태를 공유하지만, 유니코드에서는 별도의 코드 포인트로 인코딩되어 있다.
유럽에서 널리 쓰이는 세 가지 문자(그리스 문자, 키릴 문자, 라틴 문자)는 많은 글자 형태를 공유하지만, 유니코드에서는 별도의 코드 포인트로 인코딩되어 있다.

터키어의 점이 있는 I (İ)나 Í (I에 ´가 추가된 것)와 같이 로마자에서도 몇몇 글자들은 거의 같은 형태를 띤다.
* j와 에스페란토의 글자 ĵ, 로마자 Ȉ와 Ï, 로마자 ÖÕ 등도 동일한 문자 체계에 속하지만, 분명히 다른 글자이며, 거의 비슷하게 보인다.

3.2. 숫자와 알파벳

오늘날 흔히 사용되는 중요한 호모글리프 쌍은 숫자 0(영)과 대문자 O(오), 그리고 숫자 1(일)과 소문자 l(엘), 대문자 I(아이)이다. 초기 기계식 타자기 시절에는 이러한 글리프들 사이에 시각적 차이가 거의 없어서, 타이피스트들은 키보드 단축키로 이들을 서로 바꿔 사용했다. 실제로 대부분의 키보드에는 숫자 "1" 키가 없었고, 사용자는 대신 소문자 "l"을 입력해야 했다. 일부 키보드에서는 숫자 "0"도 생략되어 "O"를 대신 입력했다. 1970년대와 1980년대에 타자기 사용자였던 사람들이 컴퓨터 키보드 조작자로 전환되면서, 이러한 습관이 이어져 때때로 혼란을 야기했다.

리터의 기호는 단위 명칭이 인명에서 유래하지 않았기 때문에 원래 소문자 l (엘)로 표기했지만, 숫자 1과 비슷하여 혼동을 일으킬 수 있으므로 대문자 L로 표기하는 것이 권장된다.

대부분의 현대 글꼴 디자인은 이러한 호모글리프를 신중하게 구별한다. 일반적으로 숫자 "0"은 더 좁게 그리고, 숫자 "1"은 눈에 띄는 세리프를 넣어 그린다. 초기 컴퓨터 인쇄물은 "0"에 슬래시나 점을 추가하여 구분했는데, 이는 스칸디나비아어 문자 "Ø" 및 그리스 문자 Φ(phi)와의 새로운 혼동을 야기했다. 이러한 문자를 구별하기 위한 글꼴 재설계는 혼란을 줄이는 데 도움이 되었다. 두 개의 서로 다른 문자가 주어진 관찰자에게 동일하게 보이는 정도를 "시각적 유사성"이라고 한다.

3.3. 특수 문자와 알파벳

* 가운뎃점(·)은 아래아(ㆍ)와 반각, 전각 여부를 제외하면 거의 같다.
* 논리합 기호(∨)는 V와 전각, 반각 여부를 제외하면 거의 같다.
* 는 Ʃ의 소문자인 ʃ이나 ſ와 거의 같다.
키릴 문자 С는 로마자 C와 모양이 거의 같아 혼동을 일으킬 수 있다.

3.4. 여러 글자로 이루어진 호모글리프

rri, rn, nn은 m과 같이 보이기도 한다. 그리고 ci는 a, cl은 d, lc는 k, vv는 w처럼 보이기도 한다.

글꼴 Arial, Calibri, Times New Roman, Cambria, Walbaum-Fraktur, Comic Sans에서 문자 m과 r+n
글꼴 Arial, Calibri, Times New Roman, Cambria, Walbaum-Fraktur, Comic Sans에서 문자 m과 r+n

묘비명에 새겨진 Stefan Szczotkowski는 Aeffan Szczotkowski처럼 보인다.
묘비명에 새겨진 Stefan SzczotkowskiAeffan Szczotkowski처럼 보인다.

다른 몇몇 문자 조합도 비슷하게 보이는데, 예를 들어 rnm과, cld와, vvw와 비슷하게 보인다.

특정 좁은 간격의 글꼴(예: Tahoma)에서 문자 c를 j, l 또는 i와 같은 문자 옆에 배치하면 cj cl ci (g d a)와 같은 호모글리프가 생성된다.

일부 문자가 서로 옆에 배치되면, 한 눈에 보기에 서로 관련 없는 다른 문자의 시각적 인상을 준다. 이를 더 정확하게 표현하면 일부 합자가 독립형 글리프와 유사하게 보일 수 있다는 것이다. 예를 들어, fi 합자(fi)는 일부 글꼴에서 A와 비슷하게 보일 수 있다. 이러한 혼동 가능성은 때때로 합자 사용에 반대하는 주장의 근거가 된다.

4. 움라우트와 트레마

초창기 기계식 타자기 시대에는 움라우트트레마가 (백스페이스와 덮어쓰기 기술을 사용하여) 동일한 키로 입력되었으며, 이는 이중 작은따옴표에도 사용되었다. 그러나 움라우트는 원래 두 개의 짧은 수직선(두 개의 점이 아님)으로 시작되었다(주터린체 참조). 덧붙여, 알바니아어에서 문자 E 위에 있는 두 개의 점은 분음 기호로 묘사되지만, 분음 기호의 기능을 수행하지는 않는다.

5. 일본어에서의 호모글리프

일본어에서는 한자·가타카나 간 및 각 문자 종류 내에 여러 호모글리프가 존재한다. 예를 들어, JPRS가 호모그래프 공격과 관련하여 제출한 의견서에서는 다음과 같은 예시가 언급되었다

👆
좌우로 밀어서 보기
가타카나한자설명
가타카나 "카"와 한자 "力(힘 력)"
가타카나 "오"와 한자 "才(재주 재)"
가타카나 "로"와 한자 "口(입 구)"
가타카나 "하"와 한자 "八(여덟 팔)"
가타카나 "토"와 한자 "卜(점 복)"
가타카나 "에"와 한자 "工(장인 공)"
가타카나 "니"와 한자 "二(두 이)"


마지막 행에서 가타카나 "エ"(에)는 한자 "工"(공)과 호모글리프 관계이며, 가타카나 "ニ"(니)는 한자 "二"(두 이)와 호모글리프 관계이다.

6. 유니코드와 호모글리프

유니코드는 "혼동 가능한 문자"라고 알려진 많은 호모글리프 문자에 대한 코드 포인트를 가지고 있다. 예를 들어, 많은 글꼴에서 그리스 문자 'Α', 키릴 문자 'А' 및 라틴 문자 'A'는 시각적으로 동일하며, 라틴 문자 'a'와 키릴 문자 'а'도 마찬가지이다. 이는 다양한 상황에서 보안 위험을 나타내며, 국제화 도메인 이름(IDN)과 관련하여 특별한 주의를 기울였다.

이론적으로 문자를 호모글리프로 대체하여 도메인 이름을 의도적으로 스푸핑할 수 있다. 따라서 첫 번째 도메인 이름과 쉽게 구별할 수 없는 두 번째 도메인 이름을 생성하여 피싱에 악용할 수 있다(IDN 동음이의어 공격 참조). 예를 들어 'í'(급성 악센트)와 'i'(점), É(E-acute)와 Ė(E dot above), È(E-grave), Í(대문자 I에 급성 악센트)와 ĺ(소문자 L에 급성 악센트)와 같이 동일한 스크립트 내에도 많은 유사 호모글리프가 있다. 중국어에서는 많은 중국어 간체자가 해당 중국어 번체자의 호모글리프이다.

호모글리프 혼동의 위험을 최소화하기 위해 TLD 등록소 및 웹 브라우저 설계자는 노력을 기울이고 있다. 일반적으로 여러 언어의 문자 집합을 혼합한 이름을 금지함으로써 이를 달성한다(toys-Я-us.org에서 Я 키릴 문자를 사용하면 유효하지 않지만, wíkipedia.org와 wikipedia.org는 여전히 다른 웹사이트로 존재한다). 캐나다의 .ca 등록소는 한 단계 더 나아가 분음 부호만 다른 이름을 동일한 소유자와 동일한 등록 기관을 갖도록 요구한다. 중국어 문자의 처리는 다양하다. .org.info에서는 한 변형을 등록하면 다른 변형은 다른 사람에게 사용할 수 없게 되지만, .biz에서는 동일한 이름의 번체와 간체 버전을 동일한 도메인 네임 서버를 가리키는 두 개의 도메인 번들로 제공한다.

관련 문서는 개발자 웹사이트와 ICANN에서 제공하는 IDN 포럼에서 찾을 수 있다.

7. 정규화

다양한 종류의 동형 문자는 '이중 정규화'라는 과정을 통해 탐지할 수 있다. 이중 정규화의 첫 단계는 관찰자에게 동일하게 보이는 문자, 즉 동형 문자 집합을 식별하는 것이다. 여기서 동형 문자 집합을 나타내는 단일 토큰이 지정되는데, 이 토큰을 캐논이라고 한다. 다음 단계는 정규화 과정을 통해 텍스트의 각 문자를 해당 캐논으로 변환하는 것이다. 두 텍스트의 캐논이 같지만 원래 텍스트가 다르면, 텍스트에 동형 문자가 존재하는 것이다.

8. 호모글리프 방지

사용자가 호모글리프 공격과 관련된 위험을 인지하도록 교육하여 URL을 클릭하기 전에 꼼꼼히 검사하도록 권장하는 것이 중요하다. 특히 도메인 이름에서 호모글리프 변형을 검색할 수 있는 고급 보안 솔루션을 사용하면 잠재적 위협을 자동 감지하고 예방할 수 있다. 또한, 엄격한 도메인 이름 모니터링 및 등록 정책을 구현하면 호모글리프 관련 위험을 신속하게 식별하고 무력화하는 데 도움이 될 수 있다.

유럽에서 자주 사용되는 세 가지 알파벳(오른쪽 위부터 시계 방향으로 라틴 문자, 키릴 문자, 그리스 문자)은 유니코드에서는 완전히 다른 코드 포인트로 코딩되어 있지만, 많은 호모글리프를 공유하고 있다.
유럽에서 자주 사용되는 세 가지 알파벳(오른쪽 위부터 시계 방향으로 라틴 문자, 키릴 문자, 그리스 문자)은 유니코드에서는 완전히 다른 코드 포인트로 코딩되어 있지만, 많은 호모글리프를 공유하고 있다.


도메인 이름 레지스트리웹 브라우저 설계에 호모글리프 혼동의 위험을 최소화하기 위한 노력이 기울여지고 있다. 일반적으로, 이는 여러 언어의 문자 집합을 혼합한 이름을 금지함으로써 달성된다. 캐나다.ca 레지스트리는 한 걸음 더 나아가, 분음 부호가 다른 도메인 이름은 동일한 소유자가 동일한 레지스트라에 등록해야 한다는 규정을 두고 있다. 한자에서의 간체자와 번체자의 취급은 다양하다. .org.info에서는 한쪽을 등록하면 다른 쪽은 아무도 사용할 수 없지만, .biz에서는 간체자와 번체자 두 종류의 도메인을 도메인 번들로 처리하여 둘 다 같은 DNS 서버를 가리키도록 한다.