
Steganografia linguistica provabilmente sicura che incorpora messaggi segreti in testo generato da LLM tramite rotation range-coding. Include script per embed, extract e verifica round-trip.
Rotation Range-Coding (RRC) Steganography — un metodo steganografico linguistico efficiente e provabilmente sicuro che incorpora messaggi segreti in testo in linguaggio naturale generato da grandi modelli linguistici.
Articolo: Efficient Provably Secure Linguistic Steganography via Range Coding
| Passo | Descrizione |
|---|---|
| Embed (Algoritmo 3) | Converti il messaggio segreto in un valore decimale e ruotalo iterativamente all'interno di un intervallo che si restringe, guidato dalla distribuzione di probabilità del LM e da un offset generato dal PRNG. Ogni passo di rotazione produce un token. |
| Extract (Algoritmo 4) | Esegui nuovamente il LM sullo stegotesto per recuperare i limiti dell'intervallo, quindi ruota all'indietro fino al valore decimale originale e binarizzalo. |
Il meccanismo di rotazione risolve due problemi della steganografia range-coding standard:
.
├── 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
Installa le dipendenze:
pip install -r requirements.txt
Il test round-trip usa meta-llama/Llama-2-7b-hf e viene eseguito su CPU/CUDA:
python test_roundtrip.py
Output atteso:
>>> Step 3: Verification
Original: 10110011001010111010011100101011...
Extracted: 10110011001010111010011100101011...
✅ SUCCESS — extracted message matches perfectly!
Prepara un file di prompt 0.Prompts.tsv con le colonne idx e text, quindi esegui:
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
⚠️ Importante: il mittente e il destinatario devono usare lo stesso modello linguistico, la stessa chiave, la stessa lunghezza in bit e la stessa impostazione top-k per una corretta estrazione.
RRC_embed.pyRRC_extract.pyIl tipo Decimal di Python usa una divisione troncata per l'operatore %, che può restituire resti negativi (ad es. Decimal('-19672') % Decimal('65536') → -19672 invece di 45864). Questa implementazione usa un helper decimal_mod che garantisce che il risultato sia sempre in [0, m):
def decimal_mod(a, m):
return a - m * (a / m).to_integral_value(rounding=ROUND_FLOOR)
⚠️ Per un'estrazione affidabile del segreto, alcune operazioni (sort, cumsum) vengono spostate sulla CPU con precisione float64 per evitare il non-determinismo di CUDA. Questo sacrifica una certa quantità di velocità in cambio di una coerenza codifica-decodifica garantita.
| Argomento | Predefinito | Descrizione |
|---|
--language_model | meta-llama/Llama-3.1-8B | Identificativo del modello HuggingFace |
--bit_length | 128 | Lunghezza del messaggio segreto in bit |
--top_k | -1 | Troncamento top-k; -1 = vocabolario completo |
--key | 42 | Chiave simmetrica K (seme del PRNG) |
--part / --part_max | 0 / 2 | Per l'esecuzione parallela su grandi insiemi di prompt |
| Argomento | Predefinito | Descrizione |
|---|
--language_model | meta-llama/Llama-3.1-8B | Deve corrispondere al modello di embedding |
--bit_length | 128 | Deve corrispondere all'impostazione di embedding |
--top_k | -1 | Deve corrispondere all'impostazione di embedding |
--key | 42 | Deve corrispondere alla chiave di embedding |
--input_file | (obbligatorio) | Percorso del file TSV prodotto dall'encoder |