2 ポイント 投稿者 GN⁺ 2025-02-13 | 1件のコメント | WhatsAppで共有
  • 任意のデータを1つの絵文字にエンコードすることが可能
    • Unicodeはテキストをコードポイントのシーケンスとして表現し、各コードポイントはUnicode Consortiumが意味を与えた数値。
    • 単純なラテンアルファベットのテキストでは、Unicodeコードポイントと画面に表示される文字の間に1対1の対応が存在する。
    • 他の文字体系では、画面に表示される文字が複数のコードポイントで表現されることがある。
  • 異体字セレクタ
    • Unicodeは「異体字セレクタ」と呼ばれる256個のコードポイントを定義しており、これらは単体では画面に表示されないが、直前の文字の表現を変更するために使われる。
    • ほとんどのUnicode文字には異体字がなく、異体字セレクタは変換の過程でも保持される必要がある。
    • 256個の異体字セレクタは、1バイトを隠す手段を提供する。
  • データのエンコード
    • 異体字セレクタのシーケンスを連結することで、任意のバイト列を表現できる。
    • たとえば、helloというテキストを表すデータ [0x68, 0x65, 0x6c, 0x6c, 0x6f] をエンコードできる。
    • バイトを異体字セレクタに変換した後、それらをベース文字の後ろに連結してエンコードする。
  • データのデコード
    • デコードもエンコードと同様に単純。
    • 異体字セレクタをバイトに変換することで、元のデータを復元できる。
  • 悪用の可能性
    • Unicodeの仕組みを悪用するものであるため、推奨されない。
    • 人間向けのコンテンツフィルタを回避したり、テキストにウォーターマークを埋め込んだりするなど、悪意ある用途に使われる可能性がある。
  • 結論
    • 絵文字を使って任意のデータを隠す方法を説明しており、これはUnicodeの異体字セレクタを活用したもの。
    • 面白い方法ではあるが、実際に使うには不適切かもしれない。

1件のコメント

 
GN⁺ 2025-02-13
Hacker Newsのコメント
  • UnicodeのPUA(Private Use Area)は内部およびカスタム用途で使われ、外部システムには渡されない

    • ほとんどのシステムやライブラリは、これをそのまま通すように設計されている
    • これは潜在的なデータ流出経路になり得る
    • ほとんどの開発者は、「国際化の問題を避けるために常にUnicodeを使え」ということ以外はあまり知らない
  • Unicodeの悪用は氷山の一角にすぎない

    • Unicode文字列を受け入れるシステムでバッファオーバーフローを引き起こせる
    • たいていはエラーやクラッシュを起こすが、時には予想外の面白い結果をもたらすこともある
  • 過去のペネトレーションテストの経験で、単純なダイアクリティカルマークだけでバックエンドWebサーバーのバッファをオーバーフローさせたことを覚えている

    • 主にサーバーをクラッシュさせて自動再起動させるだけだったが、十分に細工すれば特定のシステムやソフトウェアを悪用できる可能性がある
  • SanityはContent Source MapsをWebページの実際のテキストにエンコードするためにこの技術を使っている

    • これにより編集者はテキストをクリックしてコンテンツ構造を簡単に追跡できる
    • 日付、URL、IDなど、構文解析が必要な項目には追加しないほうがよい
  • LLM出力のウォーターマーキングにこの技術を使うというアイデアが気に入っている

    • 99%のコピペ生成器を簡単に見つけ出せる
    • 各文字やトークンにどれだけの情報を埋め込めるのか気になる
  • StegCloakはAES-256-CTRで隠しペイロードを暗号化することで、このアイデアをさらに一歩進めている

  • LLM出力のウォーターマーキング以外にも、対数確率データをパッケージ化するのに使える

    • 生成過程の透明性を提供するために、各トークンの確率情報を含められる
    • OpenAI API仕様の一部であり、他のエンジンでもサポートされている
  • タイトルはやや誤解を招く

    • ベース文字は絵文字である必要はなく、異体字セレクタの扱いは通常の文字と同じ
    • 絵文字と一緒に使うとより面白い
  • トークナイザーがこれを検出する

  • 前職では複数の悪用事例のせいで、ユーザーのニックネームやステータスメッセージの「文字」を数えるためにコードポイントを使わなければならなかった

    • 他のユーザーを閲覧するために9MBもダウンロードしたくなかった
  • Unicodeタグ文字はASCIIを反映しており、UI要素ではしばしば見えない

    • 一部のLLMは隠しテキストをASCIIとして解釈して指示に従い、さらにはそれを書き出すことさえある
  • MicrosoftがCopilotで修正した実際の悪用事例がある