Rotation Range-Coding (RRC) ステガノグラフィー — 大規模言語モデルが生成する自然言語テキストに秘密メッセージを埋め込む、効率的かつ証明可能な安全性を備えた言語ステガノグラフィー手法です。
論文: Efficient Provably Secure Linguistic Steganography via Range Coding
| ステップ | 説明 |
|---|---|
| 埋め込み (Algorithm 3) | 秘密メッセージを10進値に変換し、LM の確率分布と PRNG 生成オフセットに基づいて縮小する区間内で反復的に回転させます。各回転ステップで1トークンが生成されます。 |
| 抽出 (Algorithm 4) | ステゴテキストに対して LM を再実行して区間の境界を復元し、元の10進値に逆回転させてから2値化します。 |
この回転メカニズムは、素の範囲コーディングステガノグラフィーの2つの問題を解決します:
.
├── RRC_embed.py # Embedding (Algorithm 3)
├── RRC_extract.py # Extraction (Algorithm 4)
├── test_roundtrip.py # Self-contained end-to-end verification script
├── requirements.txt # Python dependencies
└── README.md
依存関係をインストール:
pip install -r requirements.txt
ラウンドトリップテストは、meta-llama/Llama-2-7b-hf を使用し、CPU/CUDA 上で実行されます:
python test_roundtrip.py
期待される出力:
>>> Step 3: Verification
Original: 10110011001010111010011100101011...
Extracted: 10110011001010111010011100101011...
✅ SUCCESS — extracted message matches perfectly!
列 idx と text を含むプロンプトファイル 0.Prompts.tsv を用意し、以下を実行します:
python RRC_embed.py \
--language_model meta-llama/Llama-3.1-8B \
--bit_length 128 \
--key 42 \
--top_k -1
python RRC_extract.py \
--language_model meta-llama/Llama-3.1-8B \
--bit_length 128 \
--key 42 \
--input_file 1.RC_decimal_Llama-3.1-8B_bit128.tsv
⚠️ 重要: 正しく抽出するには、送信者と受信者が同じ言語モデル、キー、ビット長、top-k 設定を使用する必要があります。
RRC_embed.pyRRC_extract.pyPython の Decimal 型は % 演算子に切り捨て除算を使用するため、負の剰余を返すことがあります (例: Decimal('-19672') % Decimal('65536') は 45864 ではなく -19672 になります)。この実装では、結果が常に [0, m) に収まることを保証する decimal_mod ヘルパーを使用しています:
def decimal_mod(a, m):
return a - m * (a / m).to_integral_value(rounding=ROUND_FLOOR)
⚠️ 信頼性の高い秘密抽出のため、一部の操作 (sort、cumsum) は CUDA の非決定性を避けるために float64 精度で CPU にオフロードされます。これにより、保証されたエンコード–デコードの一貫性と引き換えに、ある程度の速度を犠牲にします。
| 引数 | デフォルト | 説明 |
|---|
--language_model | meta-llama/Llama-3.1-8B | HuggingFace モデル識別子 |
--bit_length | 128 | 秘密メッセージのビット長 |
--top_k | -1 | Top-k の切り詰め; -1 = 全語彙 |
--key | 42 | 対称鍵 K (PRNG シード) |
--part / --part_max | 0 / 2 | 大規模なプロンプトセットでの並列実行用 |
| 引数 | デフォルト | 説明 |
|---|
--language_model | meta-llama/Llama-3.1-8B | 埋め込みモデルと一致している必要があります |
--bit_length | 128 | 埋め込み設定と一致している必要があります |
--top_k | -1 | 埋め込み設定と一致している必要があります |
--key | 42 | 埋め込みキーと一致している必要があります |
--input_file | (必須) | エンコーダーが出力した TSV へのパス |