동형이자
서로 다른 문자 체계에서 동일하거나 매우 유사하게 보이는 문자. 예: 라틴 'a'와 키릴 'а'. 피싱, 스푸핑, 사회공학 공격에 사용됩니다.
What is a Homoglyph?
A homoglyph is a character that looks visually identical or nearly identical to another character but has a completely different Unicode code point, name, and meaning. The word comes from the Greek homos (same) and glyphe (carving or symbol). Because modern typefaces render these characters with the same shape on screen, human eyes — and sometimes software — cannot distinguish between them.
The most well-known example is the Latin lowercase letter a (U+0061) and the Cyrillic lowercase letter а (U+0430). They are rendered identically in most fonts, yet they are entirely different code points belonging to different Unicode scripts. Dozens of such pairs exist across Latin, Greek, Cyrillic, Armenian, and many other scripts.
Why Homoglyphs Are a Security Problem
The Unicode Standard encodes characters from over 150 scripts, and many scripts independently developed symbols that resemble those in other scripts. This is expected and linguistically valid. The security problem arises when attackers deliberately substitute one character for another to trick users into believing they are looking at something they are not.
Common targets include:
- Domain names: The Internationalized Domain Names in Applications (IDNA) standard allows non-ASCII characters in domain names. An attacker can register
pаypal.comusing a Cyrillic а and create a convincing phishing site that appears to bepaypal.comto a casual viewer. - Usernames and handles: Social platforms that allow Unicode usernames are vulnerable to impersonation attacks where a fake account mimics a real one character-for-character.
- Source code and filenames: Homoglyphs in variable names or filenames can introduce subtle backdoors that are nearly impossible to spot during code review.
Common Homoglyph Pairs
Many scripts contribute characters that visually overlap with Latin letters:
- Latin o (U+006F), Cyrillic о (U+043E), Greek ο (U+03BF) — all look like "o"
- Latin p (U+0070) and Cyrillic р (U+0440) — identical lowercase forms
- Latin c (U+0063) and Cyrillic с (U+0441) — identical lowercase forms
- Latin e (U+0065) and Cyrillic е (U+0435) — identical lowercase forms
- Latin H (U+0048) and Cyrillic Н (U+041D) — identical uppercase forms
This means the word "COPE" written entirely in Cyrillic characters — СОРЕ — looks exactly like the Latin word "COPE" in most fonts.
How to Detect and Prevent Homoglyph Attacks
Unicode Technical Report #39 (Unicode Security Mechanisms) defines a confusables dataset that maps thousands of characters to their "safe" visual equivalents. Software can use this dataset to normalize or flag suspicious text.
Common defenses include:
- Script mixing detection — reject or warn when a string contains characters from more than one script
- Confusables normalization — map potentially confusing characters to a canonical form before storage or comparison
- Punycode display — browsers display internationalized domain names in Punycode (
xn--...) form when mixed scripts are detected - Visual diff tools — security-aware editors can highlight characters that are not in the expected script
Quick Facts
| Property | Value |
|---|---|
| Term origin | Greek homos (same) + glyphe (symbol) |
| Key Unicode document | Unicode TR39 — Unicode Security Mechanisms |
| Confusables data file | confusables.txt in Unicode Character Database |
| Most exploited scripts | Latin, Cyrillic, Greek, Armenian |
| Primary attack surface | Domain names (IDN), usernames, source code |
| Browser defense | Punycode fallback for mixed-script domains |
| Related term | Confusable, IDN homograph attack |
관련 용어
보안의 더 많은 용어
Exploiting Unicode bidirectional control characters to disguise malicious code or filenames. The …
도메인 이름에 시각적으로 유사한 유니코드 문자를 사용하여 합법적인 사이트를 사칭하는 공격. аpple.com(키릴 …
Exploiting Unicode normalization to bypass security filters. Input validated before normalization may …
U+200D. 인접 문자의 결합을 요청합니다. 이모지 시퀀스에 필수적입니다(👩+ZWJ+💻=👩💻). 인도 문자에서는 합자 형성을 …
U+200C. 인접 문자의 결합을 방지합니다. 페르시아어/아랍어에서 올바른 글자 형태를 위해 필수적이며, 데바나가리에서 …
유니코드 양방향 재정의 문자(U+202A~U+202E, U+2066~U+2069)를 사용하여 악성 파일 이름이나 코드를 위장하는 공격. …
유니코드 기능을 사용하여 사용자를 속이는 것: 가짜 도메인을 위한 동형이자, 가짜 파일 …
confusables.txt(UCD)에 정의된 시각적으로 혼동될 수 있는 문자 쌍에 대한 유니코드 공식 용어. …
서로 다른 문자 체계의 문자를 혼합하는 텍스트를 식별합니다(예: 라틴 + 키릴). 동형이자 …