Les bit-planes expliqués
Une image couleur 8 bits par canal peut être vue non pas comme une seule image, mais comme 8 couches binaires superposées — les bit-planes. Chaque bit-plane extrait le bit de rang k de chaque pixel pour former une image entièrement en noir et blanc (0 ou 1).
Le bit-plane 7 (MSB) contient la structure principale de l'image — il est très organisé et visuellement reconnaissable. Le bit-plane 0 (LSB) est quasi-aléatoire, ressemblant à du bruit de capteur. Les bit-planes intermédiaires présentent des degrés variables de structure.
Pixel RGB (8 bits par canal) Canal rouge : 10110101 Bit-plane 7 (MSB) : 1 ← très visible, structure principale de l'image Bit-plane 6 : 0 Bit-plane 5 : 1 Bit-plane 4 : 1 Bit-plane 3 : 0 Bit-plane 2 : 1 Bit-plane 1 : 0 Bit-plane 0 (LSB) : 1 ← peu visible, quasi-aléatoire Image RGB complète → 3 canaux × 8 bit-planes = 24 bit-planes au total Chaque bit-plane : même résolution que l'image originale, valeurs 0 ou 1
Bit-planes hauts (6-7)
STRUCTURETrès structurés. Contiennent la forme et la structure visuelle principale de l'image. Toute modification est immédiatement visible à l'œil.
Bit-planes bas (0-3)
EXPLOITABLESQuasi-aléatoires, ressemblent à du bruit. Les modifications s'y fondent naturellement. C'est ici que BPCS cherche ses blocs complexes.
Mesure de complexité
Le cœur de BPCS repose sur une mesure de complexité locale. On découpe chaque bit-plane en blocs 8×8 de pixels binaires, puis on calcule la complexité de chaque bloc comme le rapport entre le nombre de transitions de bord (passages de 0 à 1 ou de 1 à 0 entre pixels voisins) et le nombre maximum possible de transitions.
Un seuil α (typiquement 0.3) sépare les blocs "lisses" (complexité < α) des blocs "complexes" (complexité > α). Seuls les blocs complexes peuvent accueillir des données stéganographiques.
Bloc simple (complexité ≈ 0.05) Bloc complexe (complexité ≈ 0.95) ┌────────────────────┐ ┌────────────────────┐ │ 0 0 0 0 0 0 0 0 │ │ 1 0 1 0 1 0 1 0 │ │ 0 0 0 0 0 0 0 0 │ │ 0 1 0 1 0 1 0 1 │ │ 0 0 0 0 0 0 0 0 │ │ 1 0 1 0 1 0 1 0 │ │ 0 0 0 0 0 0 0 0 │ │ 0 1 0 1 0 1 0 1 │ └────────────────────┘ └────────────────────┘ → NE PAS utiliser → UTILISER pour cacher Formule : complexité = nb_transitions_bord / max_transitions_possible Pour un bloc 8×8 : max = 2 × 8 × (8-1) = 112 transitions Damier parfait → 112 transitions → complexité = 1.0 Bloc uniforme → 0 transitions → complexité = 0.0 Seuil α = 0.3 → bloc utilisable si complexité > 0.3
→ Le seuil α est le paramètre clé de BPCS. Plus α est bas, plus de blocs sont considérés complexes, plus la capacité est grande — mais plus le risque de modifier des blocs visibles augmente. α = 0.3 est le compromis standard.
Algorithme BPCS
L'algorithme BPCS comporte une étape délicate absente des autres techniques : la conjugaison. Lorsque les données du message elles-mêmes forment un bloc trop "lisse" (complexité < α), elles ne peuvent pas remplacer directement un bloc complexe — cela rendrait ce dernier soudainement lisse et trahirait la manipulation.
La solution est d'appliquer un XOR avec un damier (le pattern le plus complexe possible) pour rendre le bloc de données artificiellement complexe. Un bit de flag marque les blocs qui ont été conjugués pour permettre le décodage inverse.
Décomposer l'image en 8 bit-planes (R, G, B) → 24 plans binaires au total
Découper chaque bit-plane en blocs 8×8 pixels binaires
Calculer la complexité de chaque bloc selon la formule de transitions de bord
Si complexité > seuil α : remplacer le contenu du bloc par 8×8 bits du message
Si le bloc de données message est trop simple (complexité < α) : le conjuguer (XOR avec damier)
Marquer les blocs conjugués via un bit de flag stocké dans le bit-plane 1 du canal B
BPCS ENCODE : 1. Image → 8 bit-planes (R×8, G×8, B×8 = 24 plans) 2. Plan → blocs 8×8 → calcul complexité de chaque bloc 3. Bloc complexe (complexité > α = 0.3) → remplacer par données stego 4. Si données stego trop simples → XOR avec damier (conjugaison) 5. Stocker flag "conjugué" dans bit-plane 1 du canal B Capacité théorique : α = 0.3 → ~50% des blocs sont complexes dans une photo naturelle 1 bloc 8×8 = 64 bits = 8 bytes Image 512×512 pixels, 24 plans = 3 072 blocs au total → ~1 536 blocs utilisables → 12 288 bytes = 12 Ko soit ~30% de la taille du fichier image (vs ~6% pour LSB 1 bit/pixel) BPCS DECODE : 1. Lire les blocs complexes de chaque bit-plane 2. Pour chaque bloc : vérifier le flag de conjugaison 3. Si conjugué → appliquer XOR avec damier → données originales 4. Réassembler les bits dans l'ordre → message reconstruit
Capacité vs autres techniques
L'avantage de capacité de BPCS est considérable. Sa force tient à une astuce conceptuelle brillante : les bit-planes complexes ressemblent déjà à du bruit aléatoire dans une photo naturelle. Les remplacer par des données stéganographiques (elles-mêmes arbitraires, donc "complexes") ne crée aucun artefact — ni visuellement, ni statistiquement.
| Technique | Capacité (512×512) | % taille image |
|---|---|---|
| LSB-1 (1 bit/pixel) | ~98 Ko | ~37% |
| DCT (JPEG) | ~2–3 Ko | ~1% |
| DWT-HH (niveau 1) | ~8 Ko | ~3% |
| BPCS (α = 0.3) | ~50 Ko | ~20% |
| BPCS (α = 0.1) | ~120 Ko | ~50% |
→ L'astuce de BPCS : les bit-planes complexes ressemblent déjà à du bruit → la substitution est indétectable à l'œil ET statistiquement cohérente avec une image naturelle. C'est ce qui distingue BPCS de toutes les autres approches haute capacité.
Détection & robustesse
BPCS est plus résistant que LSB aux méthodes de détection classiques, car il ne modifie pas directement les valeurs de pixels dans le domaine spatial. L'analyse chi-carré standard et la RS Analysis sont moins efficaces contre lui.
Sa vulnérabilité principale est la distribution des complexités de bit-planes : une image stéganographiée présente une distribution anormalement uniforme des complexités (trop de blocs exactement au-dessus du seuil α). Sans connaître le seuil α exact utilisé, la détection reste néanmoins difficile.
Résistance analyse visuelle
Les bit-planes modifiés sont déjà complexes par nature. Aucun artefact visible, même en examinant les bit-planes individuellement.
Résistance chi-carré
La distribution des valeurs de pixels reste naturelle. Les tests statistiques classiques (chi-carré, RS Analysis) ne détectent pas BPCS directement.
Distribution de complexité
La distribution des complexités de blocs peut trahir BPCS : les blocs complexes sont trop nombreux et leur complexité trop uniforme.
Transformations géométriques
Comme toute stéganographie dans le domaine image, BPCS est détruit par le redimensionnement, la rotation ou la recompression avec perte.
Implémentation
BPCS est significativement plus complexe à implémenter que LSB ou DCT. La phase de conjugaison est la plus délicate : il faut garantir que tout bloc de données inséré respecte le seuil de complexité α, et que le bit de flag de conjugaison lui-même soit stocké dans une zone protégée sans créer de récursion infinie.
Le format PNG est impératif : BPCS opère sur les bit-planes bruts des pixels, et toute compression avec perte (JPEG) détruirait les données cachées en altérant les valeurs exactes des pixels.
BPCS-Steganography
Open SourceImplémentation open source de référence. Disponible sur GitHub. Écrite en C/C++, ligne de commande.
Implémentations custom
DIYDes bibliothèques existent en Python (Pillow + numpy). La complexité vient principalement de la gestion correcte de la conjugaison.
Format PNG requis
ContrainteLes bit-planes doivent être préservés exactement. PNG lossless est obligatoire. BMP non compressé est également compatible.
⚠ Piège d'implémentation : le bit de flag de conjugaison doit être stocké dans un bit-plane séparé (typiquement bit-plane 1 du canal B), et ce bit-plane doit lui-même être traité en dernier — après avoir encodé tous les autres — pour éviter qu'il invalide sa propre carte de conjugaison.
Questions fréquentes
Pourquoi BPCS peut-il cacher 10× plus de données que LSB ?
LSB remplace 1 bit par pixel. BPCS remplace des zones entières de l'image par des données, là où le contenu est déjà 'chaotique' (textures denses, bruit). Ces zones ressemblent déjà à des données aléatoires, donc on peut y substituer n'importe quelles données sans changer l'apparence. C'est comme cacher une feuille dans une forêt.
Est-ce adapté aux débutants ?
Non, BPCS est une technique de niveau intermédiaire à avancé. Des outils existent (OpenStego avec plugin BPCS) mais comprendre la segmentation en bit-planes demande un peu de bagage. Pour commencer, partez avec LSB ou DCT, puis progressez vers BPCS une fois à l'aise avec les concepts de base.
Peut-on être détecté malgré la haute capacité ?
Oui. Des outils d'analyse d'entropie détectent des zones anormalement aléatoires qui ne correspondent pas au contenu visuel. La règle : ne remplissez jamais plus de 60-70 % de la capacité théorique, chiffrez le message (les données chiffrées ont une entropie naturellement haute), et choisissez des images très texturées.
Quels formats d'image fonctionnent avec BPCS ?
PNG et BMP non compressés idéalement. TIFF lossless aussi. Évitez JPEG : la compression DCT détruit la structure des bit-planes. Les images haute résolution avec beaucoup de zones texturées (photos de nature, tissu, foule) sont les meilleures candidates.
Pour quels cas d'usage concrets l'utilise-t-on ?
Stockage de fichiers entiers dans une image (archives, exécutables) grâce à la haute capacité. Exfiltration de données dans des contextes surveillés. Tatouage numérique haute capacité. Les CTF avancés utilisent parfois BPCS — si LSB ne donne rien, tentez une analyse BPCS.
Découvrir d'autres techniques
BPCS n'est pas encore disponible en outil interactif. Explorez en attendant la technique LSB ou DCT pour expérimenter la stéganographie directement dans votre navigateur.