
Provably secure linguistic steganography embedding secret messages into LLM-generated text via rotation range-coding. Includes embed, extract, and round-trip verification scripts. Esteganografia linguística comprovadamente segura que incorpora mensagens secretas em texto gerado por LLM por meio de codificação de intervalo por rotação. Inclui scripts de incorporação, extração e verificação de ida e volta.
Esteganografia por Range-Coding Rotacional (RRC) — um método esteganográfico linguístico eficiente e comprovadamente seguro que incorpora mensagens secretas em texto em linguagem natural gerado por grandes modelos de linguagem.
Artigo: Esteganografia Linguística Eficiente e Comprovadamente Segura via Range Coding
| Etapa | Descrição |
|---|---|
| Inserir (Algoritmo 3) | Converte a mensagem secreta em um valor decimal e iterativamente rotaciona esse valor dentro de um intervalo decrescente, guiado pela distribuição de probabilidade do LM e por um deslocamento gerado por PRNG. Cada etapa de rotação produz um token. |
| Extrair (Algoritmo 4) | Reexecuta o LM sobre o estegotexto para recuperar os limites dos intervalos e, em seguida, desfaz a rotação de volta para o valor decimal original e o binariza. |
O mecanismo de rotação resolve dois problemas da esteganografia por range-coding tradicional:
.
├── 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
Instale as dependências:
pip install -r requirements.txt
O teste de ida e volta usa meta-llama/Llama-2-7b-hf e é executado em CPU/CUDA:
python test_roundtrip.py
Saída esperada:
>>> Step 3: Verification
Original: 10110011001010111010011100101011...
Extracted: 10110011001010111010011100101011...
✅ SUCCESS — extracted message matches perfectly!
Prepare um arquivo de prompts 0.Prompts.tsv com as colunas idx e text e, em seguida, execute:
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: O remetente e o destinatário devem usar o mesmo modelo de linguagem, chave, comprimento de bits e configuração de top-k para que a extração seja correta.
RRC_embed.pyRRC_extract.pyO tipo Decimal do Python usa divisão truncada para o operador %, o que pode retornar restos negativos (por exemplo, Decimal('-19672') % Decimal('65536') → -19672 em vez de 45864). Esta implementação usa um auxiliar decimal_mod que garante que o resultado esteja sempre em [0, m):
def decimal_mod(a, m):
return a - m * (a / m).to_integral_value(rounding=ROUND_FLOOR)
⚠️ Para uma extração confiável do segredo, algumas operações (sort, cumsum) são transferidas para a CPU com precisão float64 para evitar o não-determinismo da CUDA. Isso troca um pouco de velocidade por consistência garantida entre codificação e decodificação.
| Argumento | Padrão | Descrição |
|---|
--language_model | meta-llama/Llama-3.1-8B | Identificador de modelo HuggingFace |
--bit_length | 128 | Comprimento da mensagem secreta em bits |
--top_k | -1 | Truncamento top-k; -1 = vocabulário completo |
--key | 42 | Chave simétrica K (semente do PRNG) |
--part / --part_max | 0 / 2 | Para execução paralela em grandes conjuntos de prompts |
| Argumento | Padrão | Descrição |
|---|
--language_model | meta-llama/Llama-3.1-8B | Deve corresponder ao modelo usado na inserção |
--bit_length | 128 | Deve corresponder à configuração de inserção |
--top_k | -1 | Deve corresponder à configuração de inserção |
--key | 42 | Deve corresponder à chave de inserção |
--input_file | (obrigatório) | Caminho para o TSV gerado pelo codificador |