Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
confusable-vision — 세계 최초의 폰트별 혼동 문자 데이터셋: 사람들이 실제로 읽는 크기에서 322개 폰트의 윤곽선을 측정하여 어떤 유니코드 문자가 서로 비슷하게 보이는지 분석한 자료. CC BY 라이선스이며, Mozilla의 부가 기능 이름 검사에 사용됨. | Kitploit
도구/GitHubGitHub/paultendo/confusable-vision
OSINT (Open Source Intelligence)ReconnaissanceWeb SecurityThreat IntelligenceSupply Chain SecurityPapers & ResearchLearning & EducationCurated Resources
GitHubpaultendo/confusable-vision

confusable-vision

세계 최초의 폰트별 혼동 문자 데이터셋: 사람들이 실제로 읽는 크기에서 322개 폰트의 윤곽선을 측정하여 어떤 유니코드 문자가 서로 비슷하게 보이는지 분석한 자료. CC BY 라이선스이며, Mozilla의 부가 기능 이름 검사에 사용됨.

저장소 보기
112922일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

confusable-vision

세계 최초의 폰트별 혼동 문자 데이터셋. 어떤 유니코드 문자가 어떤 문자와 닮았는지를 픽셀이 아닌 폰트의 외곽선에서 측정한다. 현재 릴리스인 2026.09.26은 322개 폰트 각각이 그리는 모든 글자와 숫자를, 각 글리프가 본문 텍스트에서 가지는 크기와 기준선 위치에서 비교한다. 그다음 ASCII 글자와 숫자의 닮은꼴을 실제 위치에서 검사한다. 즉, 사람들이 읽는 크기로 일반적인 폰트에서 다른 글자들 사이에 배치하고, 0과 O처럼 누구나 닮았다고 받아들이는 쌍과 비교한다.

addons.mozilla.org는 confusable-vision의 문자를 사용해 부가 기능 이름에서 닮은꼴을 검사하며, Mozilla 소스에 크레딧이 표기되어 있다. 사용처를 참고하라.

라틴 대문자 O와 Ol Chiki 문자 (U+1C5B)를 통과하는 동일한 광선: 각 광선이 잉크에 들어가고 나가는 지점, 그리고 잉크를 통과하는 경로가 일치한다.

사용처

  • **addons.mozilla.org를 구동하는 코드인 Mozilla addons-server**는 부가 기능 이름을 검사할 때 닮은꼴을 ASCII로 접기 위해 사용하는 테이블에 confusable-vision 출력의 문자를 추가한다: src/olympia/amo/confusables.py, 풀 리퀘스트 #24468, #24541, #24612, #24665 (2026년 2월~3월).
  • disarm (raeq/disarm)은 적대적 유니코드가 분류기, 인덱스, 식별자에 도달하기 전에 정규화하며, confusable-vision의 측정된 쌍을 자체 혼동 문자 테이블에 추가한다: data/confusables_supplement.tsv, data/confusables_vision.tsv.
  • SilverSpeak (ACMCMC/silverspeak)는 텍스트에 대한 동형이의어 공격을 수행하고 무력화하는 Python 라이브러리로, 동형이의어 그래프의 시각적 이웃을 confusable-vision의 발견 파일에서 구성한다 (docs/hkb.md).
  • **namespace-guard**는 측정된 쌍을 제공하며, 이를 통해 agent-sanitizer에 도달한다. agent-sanitizer는 namespace-guard를 AI 에이전트의 도구 호출 입력에서 닮은꼴 문자를 ASCII로 접는 기본 엔진으로 사용한다 (deps.dev).

이 프로젝트들은 2026년 2월과 3월의 confusable-vision 출력에서 데이터를 가져왔다.

Hacker News에서 논의됨: I rendered 1,418 confusables over 230 fonts 및 Confusables.txt and NFKC disagree on 31 characters.

릴리스 2026.09.26의 수치:

  • 322개 폰트: PingFang처럼 필요 시 다운로드되는 폰트를 포함한 macOS의 모든 폰트에, Roboto, Noto Sans, Noto Serif, Noto Sans CJK, DejaVu를 더한 것. 140개 문자 체계의 64,751개 코드 포인트.
  • 하나 이상의 폰트 또는 폰트 조합에서 닮은 11,517개 쌍, 그중 5,975개가 제안된 임계값을 통과.
  • ǁ와 ll, 또는 Ы와 bl처럼 문자와 두 글자 ASCII 시퀀스의 719개 쌍.
  • ASCII 글자, 숫자, 시퀀스의 3,055개 후보 닮은꼴을 실제 위치에서 검사: 엄격 계층에서 646개, 광범위 계층에서 추가 358개, 해당 글자의 다른 일반 폰트 디자인과 일치하는 추가 101개. 엄격 계층 중 224개는 유니코드의 confusables.txt에 없다.

데이터는 data/release/2026.09.26/에 버전이 지정된 릴리스로 게시된다 (CC-BY-4.0). namespace-guard와 d0ma1n이 이를 기반으로 구축되었다.

릴리스 2에서 바뀐 점

릴리스 2 (2026.09.24, TLD 데이터는 2026.09.25)는 이전 실행이 비교했던 쌍과 폰트만 비교했다. 동일 글리프 감사에서 폰트가 두 문자를 같은 글리프로 그리는 2,654개 사례 중 637개만 잡아낸 것으로 드러났다. 릴리스 3은 이를 수정하고 세 가지를 추가한다:

  • 커버리지. 각 폰트가 그리는 모든 글자와 숫자를 한자와 한글을 포함해 같은 폰트 내 다른 모든 것과 비교한다. 릴리스 2는 고정된 목록에서 문자를 가져왔기 때문에 Yi, 캐나다 원주민 문자, 에티오피아 문자, 인도계 문자 체계의 대부분에 도달하지 못했고, 문자 체계 전용 폰트와 PingFang을 놓쳤다.
  • 올바른 페이스. 폰트 컬렉션은 브라우저가 본문 텍스트에 사용하는 페이스로 로드된다. 이전 실행은 첫 번째 페이스를 가져왔는데, 일부 컬렉션에서는 그것이 볼드, 블랙 또는 이탤릭이었다.
  • 겹치는 윤곽선은 San Francisco 같은 가변 폰트에서처럼, 독자가 보는 대로 획의 합집합으로 측정된다.
  • 두 글자 시퀀스. 두 ASCII 글자 또는 숫자의 모든 시퀀스 (3,844개)를 각 폰트가 배치하는 대로 커닝과 합자와 함께 배치하고, 하나의 문자처럼 비교한다.
  • 교차 폰트 기준은 페이지 폰트의 상위 사분위수로 설정되므로, 조사에 폰트를 추가해도 기준이 움직이지 않는다.
  • 실제 위치 검사 (아래 참조).

2026년 3월 수치 (245개 폰트에 걸쳐 249,976개 단일 문자 쌍과 2,524,275개 바이그램 쌍)는 크기와 기준선을 무시한 측정에서 나왔다. 이들은 대체되었으며, 해당 실행의 파일은 참고용으로 data/output/에 남아 있다.

작동 방식

글리프 측정

RaySpace는 각 글리프의 윤곽선을 통해 36개 각도에서 평행 광선을 50개씩 쏘고, 광선마다 다섯 가지를 기록한다: 윤곽선을 몇 번 교차하는지, 어디서, 어떤 각도로, 잉크를 통과할 때마다 얼마나 멀리 이동하는지 (핑, 광선을 따른 획의 너비), 그리고 획 사이의 가장 넓은 간격. 각 글리프는 두 번 측정된다: 모양을 위해 자체 박스에서, 그리고 크기와 위치가 반영되도록 기준선 위의 고정 프레임에서. 두 문자는 모양 거리가 0.5 미만이고 기준선 고정 거리가 0.2 미만일 때 한 폰트에서 닮은 것으로 간주된다. 비교는 Rust (native/cv-pairs)에서 모든 코어로 실행된다.

  • 한 폰트 내: 폰트가 그리는 모든 글자와 숫자 쌍.
  • 폰트 간: 브라우저의 폴백이 그리는 대로 자체 폰트의 문자를, 그것이 없는 26개 페이지 폰트 각각의 62개 ASCII 글자와 숫자에 대조. ASCII 글자가 가장 가까운 것이고, 그 문자가 다른 페이지 폰트의 상위 사분위수에서 그 글자가 자기 자신에 가까운 만큼 가까울 때 계산된다.
  • 시퀀스: 모든 문자를 3,844개 두 글자 ASCII 시퀀스에 대조하며, 각 폰트가 배치하는 대로 (Core Text; HarfBuzz는 시스템 폰트의 트래킹을 제외하면 동일하게 배치한다).

실제 위치 검사

고립 상태에서 측정된 닮은꼴도 텍스트 한 줄에서는 두드러질 수 있다. 그래서 ASCII 글자, 숫자 또는 시퀀스의 모든 후보 닮은꼴을 다섯 가지 맥락에서 이웃 사이에 배치한다 (pa_nel, 20_5). 즉, 13 px의 시스템 폰트와 16 px의 Helvetica, Arial, Times New Roman, Georgia에서, 각각 기기 픽셀 비율 1과 2로, 플랫폼의 폰트 폴백과 함께. 아무것도 재조정되지 않는다: 닮은꼴은 줄에서 놓이는 위치에서 비교된다.

각 맥락의 기준은 누구나 닮았다고 받아들이는 쌍, 즉 0과 O, 1과 l, I와 l에서 나오며, 그 맥락이 같은 크기와 위치로 그리는 경우에만 계산된다. 닮은꼴은 다음과 같다:

  • 엄격: 그 쌍들의 중앙값만큼 닮았고 아래의 모든 검사를 통과할 때;
  • 광범위: 그 쌍들 중 가장 덜 닮은 것만큼 닮았고, 한 모서리의 차이가 허용되며 기울기 검사가 없을 때;
  • 디자인: 다른 일반 폰트가 그리는 대로 그 글자와 일치할 때 (J가 없는 줄에서 상단에 가로 막대가 있는 J).

검사는 두 글리프를 기기 해상도의 네 배로 래스터화한 후 수행한다: 기기 픽셀보다 좁은 간격이 닫힌 후 조각과 구멍의 수가 같은지; 카운터가 정사각형 또는 둥근 모양으로 같은지, 같은 위치에 비슷한 크기인지; 이웃과의 간격; 잉크의 상단, 하단, 너비; 우횡서 문자가 주변 숫자의 순서를 바꾸는지; 획 굵기; 각 변의 모양 (좌우 반전); 잉크가 각 모서리로 얼마나 뻗는지; 기울기; 가운데 세로줄 (Y 대 V); 그리고 세로줄을 가로지르는 막대 (Ŧ 대 T). 두 글자 시퀀스는 글자별로 검사된다.

계층은 렌더링된 샘플의 시각적 판단에 맞춰 조정되었고, 받아들여진 쌍에 고정되었다. 독자를 대상으로 한 연구는 아직 없다.

발견한 것

유니코드의 confusables.txt에 없는 엄격 닮은꼴 중 여섯 개로, 각각 다섯 맥락 모두에서 닮았다. macOS는 각각을 Noto 폴백 폰트로 그린다:

단어 속 여섯 닮은꼴로, Arial 46 px과 16 px로 실제 단어 옆에 배치하고 바뀐 글자를 표시했다.

문자이름통과 대상
ᱛ U+1C5BOL CHIKI LETTER ATO
ꢝ U+A89DSAURASHTRA LETTER TTHAO
𖩠 U+16A60MRO DIGIT ZEROO
𑫤 U+11AE4PAU CIN HAU LETTER FINAL YO
ᦞ U+199ENEW TAI LUE LETTER LOW VAo
᧐ U+19D0NEW TAI LUE DIGIT ZEROo

대부분의 닮은꼴 도메인 뒤에 있는 ASCII 치환은 일부 폰트에서만 성립한다. l에 대한 I는 시스템 폰트, Helvetica, Arial에서 거의 동일하다. l에 대한 1은 Times New Roman에서만, o에 대한 0은 숫자가 소문자 높이인 Georgia에서만, m에 대한 rn은 표준 밀도 화면의 Arial 16 px에서만 성립한다. cl에 대한 d와 vv에 대한 w는 16 px에서 성립하지 않는다.

그 과정에서: macOS와 iOS에 기본 포함된 Georgia는 ⅳ (U+2173, SMALL ROMAN NUMERAL FOUR)를 ⅸ, 즉 9와 정확히 똑같이 그린다. Windows 11의 Georgia는 올바르다. 이는 2026년 3월 Microsoft Q&A에서 처음 보고되었고 Apple에도 보고되었다.

릴리스

파일행 하나당
characters.jsonl.gz측정된 코드 포인트, 문자 체계, 카테고리, TR39 식별자 유형, IDNA2008 상태, 그리고 이를 허용하는 레지스트리의 TLD 포함
lookalikes.jsonl.gz하나 이상의 폰트 또는 조합에서 닮은 쌍, 그 뒤의 개수와 각 폰트의 거리 포함
sequences.jsonl.gz두 글자 ASCII 시퀀스와 닮은 문자
in-place.jsonl.gz실제 위치에서 검사한 후보 닮은꼴, 각 맥락의 판정과 실패한 검사 포함

DATASET.md는 모든 필드, 무엇을 비교했는지, 쌍이 없을 때의 의미, 제안된 임계값을 제공한다. 릴리스는 버전으로 고정하라. 커밋된 다른 출력:

파일설명
data/output/idn-relevant-pairs.json릴리스의 IDN 뷰: 임계값을 통과하고 두 문자가 공통 TLD에 모두 등록될 수 있는 2,923개 쌍. npx tsx scripts/export-idn-pairs.ts
data/output/confusable-weights-v4.json, font-specific-weights-v4.jsonnamespace-guard용 가중치: ASCII 글자 또는 두 문자 체계가 관련된 쌍을, 닮은 폰트의 비율로 점수화 (전체 및 폰트별). scripts/generate-weights-release.ts, scripts/generate-font-weights-release.ts
data/output/unicode-submission/유니코드의 혼동 문자 데이터에 제안하는 추가 항목, 각 줄 뒤의 측정값 포함. scripts/build-unicode-submission.ts
data/input/tld-rules.json각 위임된 TLD의 레지스트리가 2단계에서 허용하는 문자, IANA의 IDN 테이블, ICANN 레지스트리 계약, 조사된 국가 코드 정책에서 가져옴. scripts/build-tld-rules.py; d0ma1n이 이를 가져온다
도구 다운로드