ネットサービス

Unicodeでは一見すると普通の文字の中に「秘密のメッセージ」を埋め込むことが可能だという指摘


Unicodeは文字コードの標準規格であり、世界中で使われる多種多様な文字を表すことができます。そんなUnicodeでは、デバイス上で見ると普通にしか見えない文字の中に「秘密のメッセージ」を埋め込むことが可能だとソフトウェアエンジニアのポール・バトラー氏が解説しています。

Paul Butler – Smuggling arbitrary data through an emoji
https://paulbutler.org/2025/smuggling-arbitrary-data-through-an-emoji/


Unicodeでは特定の文字や記号、絵文字などに「コードポイント」という数字が割り当てられています。コードポイントは「U+XXXX」という形式で記述され、このうち「U+」部分がUnicodeであることを示し、その後の「XXXX」でコードポイントが16進数表記で示されています。

単純なラテン文字(アルファベット)の場合、Unicodeのコードポイントとデバイスの画面上に表示される文字は1対1で対応しており、たとえば「U+0067」は「g」という文字を表しています。一方、1つの文字が複数のコードポイントの組み合わせで表される場合もあり、たとえばデーヴァナーガリー文字の1つである「की」という文字は、「U+0915」と「U+0940」の連続したペアで表されます。

さらにUnicodeでは、文字の字体をより詳細に指定するための「異体字セレクタ」というセレクタが用意されています。異体字セレクタには標準化された異体字シーケンス(SVS)と漢字異体字シーケンス(IVS)の2種類があり、「VS-1(16進数表記だと『U+FE00』)」から「VS-256(16進数表記だと『U+E01EF』)」まで、合計256個が存在しています。

これらの異体字セレクタは、通常の文字を表すコードポイントの後ろに付け加えられており、処理するコードが変換できない場合でも保持されます。つまり、アルファベットの「g」を表す「U+0067」の後ろにVS-2を表す「U+FE01」という異体字セレクタが続く場合、レンダリングの際は「U+0067」単体と変わらず「g」とレンダリングされますが、テキストをコピーして貼り付けると後ろの「U+FE01」も一緒にコピーされるというわけです。


このレンダリングの際には表示されないもののUnicode文字には含まれる異体字セレクタを利用することで、文字の中に「秘密のメッセージ」を埋め込むことができるとのこと。バトラー氏は、「256という数字は1バイトを表すのに十分なバリエーションであり、これにより他のUnicodeコードポイントに1バイトのデータを『隠す』ことができます」と述べています。

たとえば、アメリカの文字コードであるASCIIコードで「hello」という文字列を意味する「0x68, 0x65, 0x6c, 0x6c, 0x6f」というデータをエンコードするとします。その場合、以下のようなRustコードを実行することで、埋め込みたいバイトを異体字セレクタに変換できるとのこと。


バイトをエンコードするには、基本となるコードポイントの後にこれらの異体字セレクタを多数つなげる必要があります。


次のコマンドを用いることで、「hello」を意味する「0x68, 0x65, 0x6c, 0x6c, 0x6f」というバイトをエンコードできるとのことです。


こうして出力された絵文字は一見すると普通の絵文字に見えますが、実のところ「hello」という秘密のデータが含まれています。バトラー氏が作成したデコーダーの入力欄に絵文字をペーストすると、確かに「hello」という文字列が含まれていました。


バトラー氏は、異体字セレクタを利用して秘密のメッセージを埋め込むことはUnicodeの乱用であり、現実の場面で使うべきではないと警告しています。その上で、この手法の悪用については以下のようなユースケースが考えられるとしています。

1:コンテンツフィルターの回避
この方法でエンコードされたメッセージはレンダリングされても見えないため、人間のモデレーターやレビュアーのチェックをかいくぐってメッセージを送受信することができます。

2:テキストの透かし
すでに、大勢の人々に送るメッセージにそれぞれ微妙な変更を加える「透かし」を入れ、外部にメッセージが流出した際に流出源を突き止める手法があります。Unicodeを乱用した秘密のメッセージはコピー&ペーストされても保持されるため、これさらに高度な「透かし」に利用することが可能です。

この記事のタイトルとURLをコピーする

・関連記事
全ての開発者が知っておくべきUnicodeについての最低限の知識 - GIGAZINE

新しい絵文字を追加した「Unicode バージョン16.0」公開、「目の下にクマのある顔」「ヒエログリフ」「矢印の追加」「日本の文字情報基盤の情報を追加」など盛りだくさん - GIGAZINE

Unicodeには大文字でも小文字でもないアルファベットがある - GIGAZINE

目に見えないUnicode文字をコピペして使えたり元のUnicode文字を検索したりできる「Invisible Characters」 - GIGAZINE

Unicodeに含まれる謎の記号「⍼」の起源を追ったレポートが公開中 - GIGAZINE

絵文字の偉大な功績の1つは「文字コードを統一したこと」 - GIGAZINE

海外の技術者が日本語の「文字化け」を本気で解説、日本人顔負けの日本通っぷりが披露される - GIGAZINE

in ソフトウェア,   ネットサービス, Posted by log1h_ik

You can read the machine translated English article At first glance, Unicode points out that….