| 特徴 | トークンレベル透かし (KGW, SWEET, Unigram, STONE, STA-1) | 事後透かし (ACW, SrcMarker, RoSeMary) | ✨ SEW |
|---|---|---|---|
| アクセス | デコード時 (トークン選択にバイアスをかける) | 事後 (完成したコードを書き換える) | 事後 (完成したコードを書き換える、モデル非依存) |
| 機能的正しさ | プログラムを変更する (検出可能性と正しさのトレードオフ) | プログラムを壊す可能性がある (ニューラル書き換えによるJava/C++のpass@1 ≈ 12%) | 保持される (pass@1は透かしなしコードと同等) |
| 予測可能性 | — | 反復パターン (10個の透かし入りプログラムから復元可能) | 鍵とコンテキストに依存 (選択は各プログラムの構造によって変化する) |
| 検出 (TPR@FPR5%) | 14–60% | 31–98% | ⚡ 98.7–99.5% |
LLM生成コードへの透かし入れは、来歴追跡を支援します。生成中にトークン選択を変更する透かしは、検出可能性と機能的正しさをトレードオフし、生成モデルを制御する必要があります。事後手法は代わりに、事前定義された変換や訓練されたニューラルモデルを用いて完成したコードに透かしを入れますが、その反復パターンはプログラム間で透かしを予測可能にし、透かしなしコードにすでに一般的なパターンが透かしの証拠として数えられ、誤検出を引き起こします。SEWは問いかけます: すでに生成されたプログラムのコードスタイルは、構造的に正しく、予測が難しく、人間が書いたコードに対して較正された透かしを運ぶことができるか?
SEW (Style-Encoded Watermarking) は、すでに生成されたコードに3つのコンポーネントを通じて透かしを埋め込み、検出します:
x += 1 / x = x + 1、range(n) / range(0, n)、if (c) s; / if (c) { s; }) は、具象構文木 (CST) 上でマッチングされます。あるサイトがどのバリアントを取るかは、秘密鍵とそのサイトの構造的コンテキストによって決定されます。検出には疑わしいコードと鍵のみが必要であり、生成モデル、元のコード、埋め込みの記録は必要ありません。
✅ モデル非依存で構造的に正しい — SEWは両方のバリアントが同じ意味を持つスタイルサイトのみを書き換えるため、あらゆるモデルの出力で機能し、pass@1を透かしなしコードと同等に保ちます。
✅ 較正された証拠 — 人間が書いたコード (評価データとは重複しないLeetCodeの解答) から推定されたスタイル確率を用いたポアソン二項検定により、人間のコードに対する誤検出を低く抑えます。
✅ 堅牢で推測が難しい — SEWはフォーマット、リンティング、コメント削除、変数名変更の下でも検出を維持し、透かし入りプログラムを観察した敵対者は、事後ベースラインのスタイル選択を復元するようにはSEWのスタイル選択を復元できません。
主要な結果 — CodeContestsでの検出 (TPR@FPR5% / AUROC、%)、3つのLLM (Qwen3.5-9B、gemma-4-12B-it、gpt-oss-20b) の平均。
| 種類 | 手法 | Python | Java | C++ |
|---|---|---|---|---|
| トークンレベル | KGW | 48.33 / 80.56 | 43.30 / 72.31 | 59.31 / 84.54 |
| SWEET | 59.92 / 85.18 | 41.19 / 76.56 | 60.01 / 87.24 | |
| Unigram | 57.45 / 88.97 | 36.54 / 71.37 | 47.05 / 71.13 | |
| STONE | 28.09 / 62.33 | 14.38 / 62.95 | 23.65 / 64.79 | |
| STA-1 | 35.26 / 66.26 | 20.93 / 61.48 | 44.71 / 73.72 | |
| 事後 | ACW | 90.10 / 95.05 | – | – |
| SrcMarker | 90.21 / 97.86 | 71.52 / 93.58 | 69.88 / 81.55 | |
| RoSeMary | 97.86 / 97.32 | 31.00 / 95.46 | 81.26 / 89.44 | |
| SEW | 99.49 / 99.64 | 98.70 / 98.99 | 99.22 / 99.38 |
機能的正しさ (透かし入りコードのpass@1、%; 透かしなしコード: 57.63 / 52.05 / 53.74)。
| 手法 | Python | Java | C++ |
|---|---|---|---|
| ACW | 56.00 | – | – |
| SrcMarker | 56.78 | 11.87 | 11.82 |
| RoSeMary | 56.39 | 11.71 | 11.52 |
| SEW | 57.63 | 52.05 | 53.74 |
コード編集攻撃への堅牢性 (TPR@FPR5%、%、3つのLLMと3言語の平均; ACW: Pythonのみ)。
| 手法 | 攻撃なし | フォーマット | リンティング | コメント削除 | 名前変更 |
|---|---|---|---|---|---|
| KGW | 50.31 | 43.31 | 49.99 | 24.48 | 43.26 |
| SWEET | 53.71 | 49.79 | 53.00 | 19.34 | 48.83 |
| ACW | 90.10 | 0.51 | 93.56 | 89.35 | 3.17 |
| SrcMarker | 77.20 | 77.23 | 76.42 | 77.20 | 26.43 |
| RoSeMary | 70.04 | 67.00 | 69.42 | 70.04 | 22.26 |
| SEW | 99.14 | 95.57 | 98.99 | 99.14 | 99.14 |
3つのLLMと3つのプログラミング言語を用いたCodeContestsでの実験は、以下を示しています:
完全な表、ルール認識型フリッピングとLLM書き換え攻撃、アブレーションについては論文を参照してください。