はじめに
みなさん、ホモグラフというものをご存知ですか?
アドベントカレンダーのネタ無いかなと探してたら内部のLTでそんなホモグラフについて取り扱っていたスライドが発掘されたという理由で 今回のポストではホモグラフを扱おうと思います。
ホモグラフって何?というと、 見た目が紛らわしい文字を使って、人の目では違いが判別できない文字列 の呼称になります。
文字だけを指す場合はホモグリフとも呼称できるようですが、めんどくさいのでこの記事ではホモグラフでまとめてしまいます。
セキュリティ的にも悪用される場合があり、有名どころとしては似た文字を持つドメインでフィッシング等を行うことで実現させる(ホモグラフ攻撃)などがあげられます。 とはいえこの攻撃方法自体は昔から行われている古典的な方法なので、この記事で詳細については触れません。
どんな文字をつかうとホモグラフになるの?
見た目が紛らわしい文字、人の目では違いが判別できない文字となると大量に存在するので、その一部を抜粋して紹介してみます。
アルファベットなどでは、キリル文字やギリシア文字などが例としてわかりやすいので、A
だけ以下に抜粋します。
アルファベット | キリル文字 | ギリシア文字 |
---|---|---|
A(\u+0041 ) |
А(\u+0410 ) |
Α(\u+0391 ) |
a(\u+0061 ) |
а(\u+0430 ) |
- |
少なくとも、印刷されているものを見て正しいく判別できる自信は私にはないです。 同じ文字にしか見えません。
とはいえ、じゃあ漢字なら大丈夫かというとそうではなく、以下の女
という漢字はUTF-8において全部違う文字コードになっています。
- 女(
\u+5973
) ... 普段日本語でも使っている、普通の女
という漢字。Unicode Han Character 'woman, girl; feminine; rad. 38' (U+5973)
- ⼥(
\u+2f25
) ...KANGXI RADICAL WOMAN
- 女(
\u+f981
) ...CJK COMPATIBILITY IDEOGRAPH-F981
すべて違う文字らしいのですが、どう違うのか?使いどころがどこなのかよくわからないですね。 とりあえず私の目からは同じ文字にしか見えません。
日本語として一般的に使われている文字を例としても、カタカナのカ
と漢字の力
、伸ばし棒(ー
(長音)と―
(ダッシュ))などもホモグラフに該当するかと思います。
日本語ネイティブじゃないと間違えてしまいそうですね。
別の国の文字がホモグラフになってしまうというパターンももちろんあり、たとえばひらがなのち
とㄘ
(中国語の注音記号)などは日本人の我々が見たら**あれ?なんか違くない??**となりますが、日本語ネイティブの方が見たら本当に判別つかないかもしれません。
このような文字を使った文字列がホモグラフになります。
ホモグラフになっている文字の探し方
さて、もし**ホモグラフになっている文字を探したい!**という欲求が芽生えた場合(あるのか?)ですが、どのように探したらいいでしょうか? 実はUnicodeコンソーシアムが確認しているホモグラフのリストについては、以下にまとめてあります。
ホモグラフについてをまとめているリポジトリにもデータがあるので、それらを参照するのもいいでしょう。
Unicodeコンソーシアムの持つリストよりは、homoglyph
リポジトリのデータの方が1行になっててわかりやすいかもしれませんね。