| name | stegano-llm |
| description | Encodage/décodage steganographique de texte dans du texte de même longueur en tokens via Calgacus (Norelli & Bronstein 2026). Cache un message secret M dans un texte porteur S coherent mais de sujet/ton completement different. Self-verification automatique a l encodage detecte si le round-trip va echouer. Emetteur et recepteur doivent partager le meme modele Llama-3-8B et la meme cle. USE WHEN l utilisateur demande /stegano-encode, /stegano-decode, "cache ce message dans...", "decode ce texte stegano", "stegano LLM", "Calgacus", ou veut transformer un texte en un autre tout en cachant l original. Necessite llama-cpp-python + GGUF Llama-3-8B (reuse blob Ollama si dispo). |
Stegano-LLM (Calgacus)
Encode un message secret dans un texte completement different mais avec le meme nombre de tokens. Le porteur est plausible, coherent, et peut etre poste sur X/LinkedIn sans eveiller de soupcons.
Algorithme
Calgacus encode chaque token du message secret par son rang dans la distribution de probabilites du LLM, conditionnellement au prefix. Pour generer le stegotext, on prend une nouvelle cle (prompt) et on selectionne a chaque etape le token au meme rang. Le decodage inverse l operation. Cf. arXiv:2510.20075.
Triggers
/stegano-encode "<secret>" --key "<cle>"
/stegano-decode "<stegotext>" --key "<cle>"
- "cache ce message dans un tweet sur X"
- "decode ce stegotext, la cle etait Y"
Workflow d encodage
-
Identifier les inputs :
secret : message a cacher
key : cle/prompt qui guide style et sujet du stegotext
prefix (optionnel, defaut A text:) : prompt qui prime le LLM pour le type de message secret. CRITIQUE pour la qualite : si secret en francais, mettre prefix francais. Si code, mettre "Python code:". Mauvais prefix = stegotext illisible.
-
Executer :
cd ~/.claude/skills/stegano-llm
.venv/bin/python scripts/encode.py \
--secret "<secret>" \
--key "<key>" \
--prefix "<prefix>" \
2> /tmp/stegano-meta.json
-
Verifier l exit code :
0 : stegotext OK, round-trip auto-verifie. Securise pour publication.
3 : self-verification FAILED. Le stegotext ne decodera PAS correctement. Refaire l encodage avec une autre cle ou prefix.
-
Presenter le resultat : stegotext + rappel au recepteur des params (key, prefix, modele).
Workflow de decodage
- Inputs : stegotext + key + prefix (DOIT matcher l encodage)
- Executer :
cd ~/.claude/skills/stegano-llm
.venv/bin/python scripts/decode.py \
--stego "<stegotext>" \
--key "<key>" \
--prefix "<prefix>"
- Presenter le message reconstruit.
Pieges connus
- Round-trip tokenization : la regeneration depuis stegotext peut tokeniser differemment des tokens emis. La self-verification d encode.py detecte ce cas et leve exit code 3. Sans elle, l echec est silencieux.
- Determinisme model + lib : encodeur et decodeur doivent utiliser exactement le meme fichier GGUF + meme version de llama-cpp-python + meme seed (1337).
- Edition du stegotext casse le decodage : un seul caractere change modifie la tokenisation.
- Caracteres speciaux shell : si secret ou key contiennent
", $, etc., utiliser --secret-file et --key-file.
Modele
Par defaut : Llama-3-8B-Instruct Q4_0 depuis le blob Ollama. Si absent : ollama pull llama3:8b.
Installation
cd ~/.claude/skills/stegano-llm
bash setup.sh