
Stéganographie linguistique prouvablement sécurisée intégrant des messages secrets dans du texte généré par LLM via un codage par plage de rotation. Comprend des scripts d'encodage, d'extraction et de vérification en boucle.
Stéganographie par codage de plage avec rotation (RRC) — une méthode stéganographique linguistique efficace et prouvablement sécurisée qui intègre des messages secrets dans du texte en langage naturel généré par de grands modèles de langage.
Article : Stéganographie linguistique efficace et prouvablement sécurisée via le codage de plage
| Étape | Description |
|---|---|
| Intégration (Algorithme 3) | Convertir le message secret en une valeur décimale et faire pivoter itérativement dans un intervalle rétrécissant guidé par la distribution de probabilité du LM et un décalage généré par PRNG. Chaque étape de rotation produit un jeton. |
| Extraction (Algorithme 4) | Réexécuter le LM sur le stégotexte pour récupérer les bornes de l'intervalle, puis inverser la rotation pour revenir à la valeur décimale d'origine et la binariser. |
Le mécanisme de rotation résout deux problèmes du codage de plage classique en stéganographie :
.
├── 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
Installer les dépendances :
pip install -r requirements.txt
Le test aller-retour utilise meta-llama/Llama-2-7b-hf et s'exécute sur CPU/CUDA :
python test_roundtrip.py
Sortie attendue :
>>> Step 3: Verification
Original: 10110011001010111010011100101011...
Extracted: 10110011001010111010011100101011...
✅ SUCCESS — extracted message matches perfectly!
Préparez un fichier d'invites 0.Prompts.tsv avec les colonnes idx et text, puis exécutez :
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
⚠️ Important : L'expéditeur et le destinataire doivent utiliser le même modèle de langage, la même clé, la même longueur de bit et le même paramètre top-k pour une extraction correcte.
RRC_embed.pyRRC_extract.pyLe type Decimal de Python utilise une division tronquée pour l'opérateur %, ce qui peut retourner des restes négatifs (par exemple Decimal('-19672') % Decimal('65536') → -19672 au lieu de 45864). Cette implémentation utilise une fonction d'aide decimal_mod qui garantit que le résultat est toujours dans [0, m) :
def decimal_mod(a, m):
return a - m * (a / m).to_integral_value(rounding=ROUND_FLOOR)
⚠️ Pour une extraction fiable du secret, certaines opérations (tri, cumsum) sont déportées sur le CPU en précision float64 pour éviter le non-déterminisme CUDA. Cela échange une certaine vitesse contre une cohérence garantie du codage-décodage.
| Argument | Défaut | Description |
|---|
--language_model | meta-llama/Llama-3.1-8B | Identifiant du modèle HuggingFace |
--bit_length | 128 | Longueur du message secret en bits |
--top_k | -1 | Troncature top-k ; -1 = vocabulaire complet |
--key | 42 | Clé symétrique K (graine PRNG) |
--part / --part_max | 0 / 2 | Pour une exécution parallèle sur de grands ensembles d'invites |
| Argument | Défaut | Description |
|---|
--language_model | meta-llama/Llama-3.1-8B | Doit correspondre au modèle d'intégration |
--bit_length | 128 | Doit correspondre au réglage d'intégration |
--top_k | -1 | Doit correspondre au réglage d'intégration |
--key | 42 | Doit correspondre à la clé d'intégration |
--input_file | (requis) | Chemin vers le TSV provenant du codeur |