言語ステガノグラフィ (linguistic steganography) とは、テキストを偽装媒体として秘密データを送る技術のこと。(言語に限らない) ステガノグラフィの特徴は、秘密データの存在自体を隠す点にある。暗号はデータを第三者が解読できないようにするだけで、通信の怪しさに気づかれるリスクは残る。一方、ステガノグラフィは秘密データを偽装媒体に埋め込むことで、秘密データの存在自体を第三者に気づかせないようにする。
偽装媒体として一番わかりやすいのがビットマップ画像。各ピクセルの下位バイトの数値をいじる、例えば #F2BDCD を #F0BECE に変えても、画像の見た目にはほぼ影響がない。この性質を利用して、偽装画像の各ピクセルの下位バイトの数値を秘密データに応じて書き換える。このように、偽装媒体の冗長性を利用してデータを埋め込むのがステガノグラフィの基本戦略になる。
テキストは冗長性が乏しく、偽装媒体として使うのが難しい。古典的な方法をいくつか紹介すると: 1) 単語間のスペースを1文字にするか、2文字にするかで0/1を埋め込む。2) 他動詞文を能動態にするか受動態にするかで0/1を埋め込む。3) 同義語集合を用意しておいて、ビット列に対応付ける。例えば、{marry: 0, wed: 1} として、She will marry/wed him. の3単語目を埋め込みたいビットに応じて選択する。
2-3はペイロード容量が恐ろしく低い。ツイート1個あたり数ビットが限界。それに、2は受信者が構文解析に失敗してデータの復号に失敗するリスクがある。3は同義語の文脈依存性が問題になる。例えば、marry into という句の marry を wed で置き換えると不自然。かといって文脈適合性や語の多義性等を考慮し始めると手法が複雑化して手に負えなくなる。1は単純で頑健だが、不自然さが露見するリスクは縦読みと同程度であろう。
そんなこんなで、言語ステガノグラフィは長年、実用化の見込みのないオモチャでしかなかった。この状況を一変させたのが大規模言語モデル (提案自体は大規模化競争以前なので、当時は小規模なニューラル言語モデル) である。(続く)