
Rotation Range-Coding (RRC)-Steganografie — eine effiziente und beweisbar sichere linguistische steganografische Methode, die geheime Nachrichten in natürlichsprachlichen Text einbettet, der von großen Sprachmodellen erzeugt wird.
Paper: Efficient Provably Secure Linguistic Steganography via Range Coding
| Schritt | Beschreibung |
|---|---|
| Einbetten (Algorithmus 3) | Wandeln Sie die geheime Nachricht in einen Dezimalwert um und rotieren Sie ihn iterativ innerhalb eines schrumpfenden Intervalls, das von der Wahrscheinlichkeitsverteilung des LM und einem PRNG-erzeugten Offset gesteuert wird. Jeder Rotationsschritt erzeugt ein Token. |
| Extrahieren (Algorithmus 4) | Führen Sie das LM erneut auf dem Stegotext aus, um die Intervallgrenzen wiederherzustellen, dann rotieren Sie zurück zum ursprünglichen Dezimalwert und binarisieren Sie ihn. |
Der Rotationsmechanismus löst zwei Probleme der herkömmlichen Range-Coding-Steganografie:
.
├── 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
Abhängigkeiten installieren:
pip install -r requirements.txt
Der Round-Trip-Test verwendet meta-llama/Llama-2-7b-hf und läuft auf CPU/CUDA:
python test_roundtrip.py
Erwartete Ausgabe:
>>> Step 3: Verification
Original: 10110011001010111010011100101011...
Extracted: 10110011001010111010011100101011...
✅ SUCCESS — extracted message matches perfectly!
Bereiten Sie eine Prompts-Datei 0.Prompts.tsv mit den Spalten idx und text vor und führen Sie dann Folgendes aus:
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
⚠️ Wichtig: Sender und Empfänger müssen für eine korrekte Extraktion das gleiche Sprachmodell, denselben Schlüssel, dieselbe Bitlänge und dieselbe Top-k-Einstellung verwenden.
RRC_embed.pyRRC_extract.pyDer Decimal-Typ von Python verwendet für den %-Operator eine abgeschnittene Division, die negative Reste liefern kann (z. B. Decimal('-19672') % Decimal('65536') → -19672 statt 45864). Diese Implementierung verwendet eine decimal_mod-Hilfsfunktion, die garantiert, dass das Ergebnis immer in [0, m) liegt:
def decimal_mod(a, m):
return a - m * (a / m).to_integral_value(rounding=ROUND_FLOOR)
⚠️ Für eine zuverlässige Geheimtext-Extraktion werden einige Operationen (sort, cumsum) mit float64-Präzision auf die CPU ausgelagert, um CUDA-Nichtdeterminismus zu vermeiden. Dies tauscht ein wenig Geschwindigkeit gegen eine garantierte Kodierungs- und Dekodierungskonsistenz.
| Argument | Standardwert | Beschreibung |
|---|
--language_model | meta-llama/Llama-3.1-8B | HuggingFace-Modellkennung |
--bit_length | 128 | Länge der geheimen Nachricht in Bits |
--top_k | -1 | Top-k-Beschränkung; -1 = vollständiger Wortschatz |
--key | 42 | Symmetrischer Schlüssel K (PRNG-Seed) |
--part / --part_max | 0 / 2 | Für die parallele Ausführung bei großen Prompt-Mengen |
| Argument | Standardwert | Beschreibung |
|---|
--language_model | meta-llama/Llama-3.1-8B | Muss mit dem Einbettungsmodell übereinstimmen |
--bit_length | 128 | Muss mit der Einbettungseinstellung übereinstimmen |
--top_k | -1 | Muss mit der Einbettungseinstellung übereinstimmen |
--key | 42 | Muss mit dem Einbettungsschlüssel übereinstimmen |
--input_file | (erforderlich) | Pfad zur TSV-Datei vom Encoder |