Skip to main content

Bibliothèque Python unifiée de stéganographie d'images et de stéganalyse, du LSB au deep learning.

Project description

secure-stegano

Bibliothèque Python unifiée de stéganographie d'images et de stéganalyse, du LSB historique au deep learning moderne.

Moteur algorithmique du projet TPI. Voir le cahier des charges pour le périmètre détaillé et l'état de l'art pour le cadrage théorique.

Vue d'ensemble

Le package implémente :

  • Embedding / extraction — LSB, LSBMR, S-UNIWARD (spatial), F5 (JPEG), HiDDeN (deep).
  • Stéganalyse — chi-square, RS analysis, SRNet (CNN pré-entraîné).
  • Métriques — PSNR, SSIM, BER, capacité.
  • Canaux réseaux sociaux — Facebook, Instagram, Twitter, WhatsApp (simulateurs).
  • Signature de traçabilité — HMAC embarqué pour identification d'origine.

Conventions de nommage

Aspect Valeur Pourquoi
Dossier secure-stegano Convention PyPI (tiret).
Distribution secure-stegano Idem, c'est ce qu'on installe via pip.
Nom d'import Python secure_stegano Python interdit les tirets dans les modules.
import secure_stegano
from secure_stegano.spatial import lsb  # à venir en Phase A1

Installation

Prérequis : Python 3.11+.

cd algorithms/secure-stegano
pip install -e ".[dev]"

Avec les notebooks d'exploration :

pip install -e ".[dev,notebooks]"

Utilisation rapide (CLI)

# Aide
python -m secure_stegano --help

# Cacher un message (lsb, lsbmr, s-uniward)
python -m secure_stegano encode --algorithm lsb --cover cover.png --payload "hello" --out stego.png

# Extraire — sans --algorithm : décodage aveugle (algo lu dans l'en-tête)
python -m secure_stegano decode --stego stego.png

# Simuler le passage par Facebook
python -m secure_stegano channel --profile facebook --input stego.png --out stego_after_fb.jpg

Via la façade Python :

import secure_stegano
from secure_stegano.core import load_image, save_image

res = secure_stegano.embed(load_image("cover.png"), b"hello", "lsb")
save_image(res.stego, "stego.png")
assert secure_stegano.extract(load_image("stego.png")) == b"hello"  # aveugle

État Phase A1 (+ A5/A6) : encode/decode/channel opérationnels pour LSB, LSBMR (aller-retour réel) et S-UNIWARD (simulateur d'embedding, non extractible). analyze (stéganalyse), F5 et HiDDeN lèvent encore NotImplementedError.

Tests et qualité

pytest              # suite de tests   (barrière bloquante)
ruff check src      # lint              (barrière bloquante)
mypy src            # types — NON strict (cf. note Structure ci-dessous)

Structure

Structuration par rôle pipeline (regroupement codecs/ et evaluation/) :

src/                 (mappé sur le paquet « secure_stegano » par setuptools)
├── __init__.py      Re-export de la façade (embed/extract/sign/verify)
├── api.py           FAÇADE centrale — seul point d'entrée à appeler
├── __main__.py      CLI = fin appelant de api.py
├── core/            types, io, payload (conteneur auto-descriptif + permutation)
├── codecs/          chaque module = encode() + decode()
│   ├── spatial/     lsb.py, lsbmr.py, s_uniward.py
│   ├── jpeg/        f5 (stub — hors périmètre)
│   └── deep/        hidden (stub — hors périmètre)
├── analysis/        stéganalyse (stub — hors périmètre)
├── evaluation/      mesure & benchmark
│   ├── metrics/     psnr, ssim, ber, capacity
│   └── channels/    facebook, instagram, twitter, whatsapp, generic
└── signature/       hmac_sig — filigrane de traçabilité

Divergence assumée vs cahier §10. Le cahier prévoit une arborescence plate (un sous-paquet par concern). Nous regroupons plutôt par rôle : codecs/ (chaque codec fait encode+decode ; « extraire » est la fonction inverse, pas un dossier), evaluation/ (métriques + canaux), et une façade api.py qui centralise le dispatch (« backend fin, package gras », cahier §3). Le décodage aveugle s'appuie sur l'en-tête auto-descriptif (MAGIC + algo_id + CRC32) écrit par core/payload.py.

Layout src/ plat (choix assumé). Le contenu vit directement dans src/ (pas de src/secure_stegano/). setuptools remappe le nom d'import secure_stegano sur src/ via [tool.setuptools] package-dir. Conséquence : mypy ne peut pas résoudre le paquet par le système de fichiers (le remap n'existe qu'à l'install) → typage non strict assumé. pytest et ruff restent la barrière qualité bloquante. Le layout standard src/secure_stegano/ rétablirait mypy --strict si besoin un jour.

Feuille de route Phase A

Tâche Périmètre État
A0 Scaffolding (ce commit) ✅ fait
A1 LSB, LSBMR, S-UNIWARD + tests + CLI branchée ✅ fait
A2 F5 JPEG à venir
A3 Stéganalyse (chi-square, RS, SRNet) à venir
A4 HiDDeN inférence à venir
A5 Module signature HMAC ✅ fait
A6 Canaux réseaux sociaux ✅ fait
A7 Métriques + benchmarks reproductibles à venir
A8 Doc et notebooks à venir

Détails dans le cahier des charges §11.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

secure_stegano-1.1.4.tar.gz (31.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

secure_stegano-1.1.4-py3-none-any.whl (35.1 kB view details)

Uploaded Python 3

File details

Details for the file secure_stegano-1.1.4.tar.gz.

File metadata

  • Download URL: secure_stegano-1.1.4.tar.gz
  • Upload date:
  • Size: 31.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for secure_stegano-1.1.4.tar.gz
Algorithm Hash digest
SHA256 2a7101a29457c26967dc8b45aef467804face50a7eb1652dce39c71afe68f91c
MD5 86c7931d5ba3b839987d19e09ed9a2ed
BLAKE2b-256 5d762850bf3670b03e31239daab82569c3ccc78efafac2fdff02b630a885b9cf

See more details on using hashes here.

File details

Details for the file secure_stegano-1.1.4-py3-none-any.whl.

File metadata

  • Download URL: secure_stegano-1.1.4-py3-none-any.whl
  • Upload date:
  • Size: 35.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for secure_stegano-1.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 a2fa674082e40fbaa395542d26b6c52a3746deab6abbcfb072e54cd964eeda10
MD5 f430064c5100894994ffb7b759e6e076
BLAKE2b-256 5f6a724412fc349a5f92ce9951832055cd3874dddd40d167e4b21f0dd13dc342

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page