Principe de l'écho
Un écho est simplement le signal original décalé dans le temps et atténué : echo(t) = signal(t - d) × α, où d est le délai et α est l'amplitude (entre 0,1 et 0,3). Deux délais distincts sont utilisés : d0 pour le bit 0 et d1 pour le bit 1, typiquement d0 = 50–100 samples et d1 = 100–200 samples.
L'oreille humaine ne perçoit pas les échos inférieurs à environ 30 ms. À 44 100 Hz, 30 ms correspond à 1 323 samples — les délais utilisés (50–200 samples) sont bien en dessous de ce seuil de perception. La superposition est donc totalement inaudible.
Signal original : [s0, s1, s2, ..., sN]
Bit à cacher : 0
Écho (bit 0) : signal décalé de d0=75 samples, atténué α=0.2
s_echo[t] = s[t-75] × 0.2
Signal stégo : s_stego[t] = s[t] + s[t-75] × 0.2
(superposition du signal et de son écho)
Bit à cacher : 1 → délai d1=125 samples
s_stego[t] = s[t] + s[t-125] × 0.2Encodage bit par bit
Pour chaque bit du message, on choisit entre d0 et d1 et on applique le filtre d'écho correspondant à un segment du signal. Une transition douce (windowing) est appliquée entre segments pour éviter les artefacts audibles aux jointures.
Le signal porteur est découpé en autant de segments que le message possède de bits. Chaque segment reçoit un écho dont le délai encode le bit correspondant.
MESSAGE : "A" = 01000001 Segment 1 (bit 0) → écho avec délai d0=75 samples Segment 2 (bit 1) → écho avec délai d1=125 samples Segment 3 (bit 0) → écho avec délai d0=75 samples ... Chaque segment = durée_signal / nb_bits Ex: signal de 1 sec, 44100 Hz → 44100 samples "A" = 8 bits → 8 segments de ~5512 samples (~125ms chacun)
Segmentation du signal
Plus le message est long, plus les segments sont courts. Des segments trop courts rendent les transitions d'écho audibles, car le filtre n'a pas le temps de se stabiliser. Le compromis pratique est d'environ 100 bits maximum par seconde d'audio (1 bit ≈ 10 ms minimum).
La capacité d'Echo Hiding est donc nettement inférieure à celle du LSB audio — mais la technique est bien plus robuste aux compressions légères.
| Configuration | Durée | LSB Audio | Echo Hiding |
|---|---|---|---|
| 44100 Hz, 16bit, Mono | 1 min | ~661 000 chars | ~500 chars |
| 44100 Hz, 16bit, Mono | 5 min | ~3 300 000 chars | ~2 500 chars |
| 44100 Hz, 16bit, Stéréo | 1 min | ~1 323 000 chars | ~500 chars |
⚠ La faible capacité d'Echo Hiding n'est pas un bug : c'est le prix de la robustesse. Chaque bit nécessite un segment audio suffisamment long pour que l'écho soit stable et cohérent.
Détection — Analyse Cepstrale
Le cepstre est la transformée de Fourier inverse du logarithme du spectre de puissance d'un signal. Un écho dans le signal crée un pic caractéristique dans le cepstre à la position t = d (le délai de l'écho). L'analyse cepstrale révèle donc le délai exact utilisé — et trahit immédiatement la présence d'une stéganographie Echo Hiding.
Cette méthode est très utilisée en forensique audio. Les outils d'analyse comme MATLAB ou SciPy permettent de calculer le cepstre en quelques lignes et d'identifier les pics à d0 ou d1.
Signal stégo → FFT → |X(f)|² → log → IFFT → Cepstre
│
Pic à t=d0 ou t=d1 ──► ici
→ révèle le délai d'écho
→ trahit la stéganographie→ L'analyse cepstrale peut être faite sur un simple extrait du signal — pas besoin du fichier entier. Un segment de quelques secondes suffit à révéler les délais d'écho.
Echo Hiding vs LSB Audio
Les deux techniques opèrent sur des fichiers audio non compressés (WAV PCM), mais leurs approches sont fondamentalement différentes : LSB modifie directement les valeurs des samples, tandis qu'Echo Hiding agit sur la structure temporelle du signal en ajoutant une résonance.
| Critère | LSB Audio | Echo Hiding |
|---|---|---|
| Modification directe | ✓ Bits des samples | ✗ Filtre temporel |
| Robustesse compression | ✗ Aucune (MP3 détruit) | ~ Partielle |
| Capacité | ~661k chars/min | ~500 chars/min |
| Complexité | Très simple | Modérée |
| Détection | Analyse pairs/impairs | Analyse cepstrale |
Questions fréquentes
Comment un écho peut-il cacher de l'information ?
Deux délais légèrement différents (50 samples vs 125 samples) sont imperceptibles à l'oreille mais distinguables mathématiquement. Le délai d0 encode le bit 0, d1 encode le bit 1. Pour retrouver le message, le récepteur calcule le cepstre du signal et identifie les pics correspondant aux délais.
L'Echo Hiding est-il plus sécurisé que le LSB audio ?
Il est plus robuste face à certaines transformations légères (légère compression MP3, normalisation du volume), car l'écho est une propriété structurelle du signal. En revanche, il est moins discret statistiquement — le cepstre révèle facilement les délais d'écho. LSB est plus discret mais plus fragile. Les deux techniques ne sont pas sécurisées sans chiffrement préalable.
Dans quels cas concrets utilise-t-on Echo Hiding ?
Principalement en watermarking audio : intégrer des identifiants invisibles dans des morceaux de musique pour tracer les fuites ou prouver la propriété. C'est une alternative robuste au LSB audio quand le fichier risque d'être légèrement retraité (conversion format, normalisation) sans être complètement recompressé.
Comment détecter qu'un fichier audio contient une stéganographie Echo Hiding ?
En calculant le cepstre du signal (FFT → module au carré → log → FFT inverse). Si des pics inhabituels apparaissent à des positions inférieures à 1323 samples (30ms à 44100Hz), c'est suspect. MATLAB, Python (scipy.signal) ou Audacity peuvent calculer le cepstre. L'analyse est réalisable sur n'importe quel extrait de quelques secondes.
Peut-on cacher beaucoup d'information avec Echo Hiding ?
Non — c'est sa grande limite. Environ 100 bits par seconde d'audio (contre 661 000 bits/seconde avec LSB). Pour une chanson de 3 minutes, on peut cacher environ 2 200 octets. C'est suffisant pour un identifiant ou un hash de 256 bits, pas pour un fichier complet. Cette faible capacité est inhérente : chaque bit nécessite un segment audio d'au moins 10ms.
Tester la stéganographie audio
Encodez un message dans un fichier WAV directement dans votre navigateur avec la technique LSB audio.