Psychoacoustique : l'oreille et la phase
Le système auditif humain est très sensible à l'amplitude des composantes fréquentielles (le volume de chaque fréquence), mais presque insensible à la phase absolue de chacune d'elles. Ce phénomène est bien documenté en psychoacoustique depuis les années 1970.
En revanche, l'oreille est sensible aux différences de phase entre composantes adjacentes (cohérence de phase), car ces différences affectent la perception du timbre. Phase Coding exploite l'insensibilité à la phase absolue tout en préservant la cohérence inter-fréquences.
Expérience de Schroeder (1970) :
Signal A : sin(2πft + 0) ← phase = 0
Signal B : sin(2πft + π/2) ← phase = π/2 décalée
→ Amplitude identique dans les deux cas
→ Sons perçus comme identiques par l'oreille humaine
→ Mais numériquement différents !
Implication stéganographique :
→ On peut stocker des bits dans la phase de chaque
composante fréquentielle sans que l'oreille le perçoive
→ À condition de ne pas trop perturber les DIFFÉRENCES
de phase entre composantes voisines (cohérence de phase)Algorithme : segmentation et FFT
Phase Coding découpe le signal audio en segments de taille fixe, puis modifie la phase du premier segmentpour encoder le message. Les segments suivants voient leurs phases ajustées pour maintenir la cohérence.
Découper le signal audio en N segments de taille S (ex: 1024 ou 2048 samples)
Appliquer la FFT à chaque segment → vecteurs d'amplitudes et de phases
Calculer les différences de phase entre segments adjacents (cohérence)
Encoder les bits du message dans la phase du premier segment : bit 0 → phase = π/2, bit 1 → phase = -π/2
Recalculer les phases des segments suivants pour maintenir les différences de phase originales
Appliquer IFFT à chaque segment → signal stéganographié
PHASE CODING ENCODE :
Signal audio → segments [S₁, S₂, S₃, ...]
FFT(Sₖ) = Aₖ × e^(iφₖ)
Aₖ = amplitudes (inchangées)
φₖ = phases (à modifier)
Calcul des différences de phase inter-segments :
Δφₖ = φₖ - φₖ₋₁ (pour k = 2, 3, ...)
Encodage dans le premier segment S₁ :
Pour chaque bin fréquentiel i :
bit à cacher = 0 → φ'₁[i] = +π/2
bit à cacher = 1 → φ'₁[i] = -π/2
Propagation : φ'ₖ = φ'ₖ₋₁ + Δφₖ (cohérence maintenue)
IFFT(Aₖ × e^(iφ'ₖ)) → segments stéganographiés
→ concaténer → signal finalCohérence de phase inter-segments
La cohérence de phase est le point critique de Phase Coding. Si on modifie la phase du premier segment sans ajuster les suivants, les différences de phase entre segments changent abruptement — créant un artefact perceptible comme une légère discontinuité ou un changement de timbre.
En propageant les phases modifiées (φ'ₖ = φ'ₖ₋₁ + Δφₖ original), on garantit que les différences de phase entre composantes restent identiques à l'original — seule la phase absolue change, ce que l'oreille ne perçoit pas.
Capacité et qualité
La capacité dépend de la taille des segments et du nombre de bins fréquentiels utilisables. Pour un segment de 1024 samples, la FFT donne 512 bins positifs, chacun pouvant coder un bit — soit 512 bits par segment.
| Taille segment | Bits par segment | 44 100 Hz, 1 min |
|---|---|---|
| 512 samples | 256 bits | ~330 Ko |
| 1 024 samples | 512 bits | ~165 Ko |
| 2 048 samples | 1 024 bits | ~83 Ko |
| 4 096 samples | 2 048 bits | ~41 Ko |
→ Attention : l'encodage dans tous les bins fréquentiels peut dégrader la qualité. En pratique on limite aux bins de hautes fréquences (>4kHz) où la sensibilité à la phase est encore plus faible.
Détection
Phase Coding laisse une empreinte statistique dans la distribution des phases : les phases des bins encodés se concentrent artificiellement autour de ±π/2, au lieu d'une distribution plus uniforme typique des signaux naturels.
Inaudible
L'oreille humaine est insensible à la phase absolue. Aucun artefact perceptible si la cohérence est maintenue.
Bonne capacité
Plusieurs Ko par minute d'audio. Bien supérieur à Echo Hiding.
Distribution de phase
Les phases concentrées autour de ±π/2 sont statistiquement anormales et détectables par analyse spectrale.
Fragile aux transformations
Réencodage MP3, changement de sample rate ou égalisation détruisent le message.
Questions fréquentes
L'oreille humaine n'entend-elle vraiment pas la phase ?
En grande partie oui. L'oreille perçoit bien l'amplitude (volume) et la fréquence (hauteur du son), mais est très peu sensible à la phase absolue d'une onde sonore. C'est une propriété bien établie en psychoacoustique depuis les années 1970 (travaux de Schroeder). La phase coding exploite directement cette lacune perceptive.
Le message résiste-t-il à la conversion de format ?
Mieux que le LSB audio dans certains cas, mais la compression MP3 et AAC modifient aussi les phases. WAV et FLAC préservent les phases. Pour toute communication sérieuse, utilisez uniquement des formats sans perte. Évitez absolument les plateformes qui recompressent l'audio.
Pour quoi utilise-t-on la phase coding en pratique ?
Tatouage audio robuste (marquer les fichiers musicaux pour tracking des fuites), protection des droits d'auteur dans l'industrie musicale, authentification de contenu audio numérique, et en recherche académique pour comprendre les limites perceptives du système auditif humain.
Comment l'identifier dans un CTF ?
En CTF, la phase coding est moins courante que le LSB audio. Signes caractéristiques : l'audio semble normal mais aucun LSB ne ressort avec les outils habituels. Analysez la phase avec scipy.signal.stft en Python, cherchez des patterns réguliers dans la phase du premier segment. Des scripts CTF spécifiques existent sur GitHub.
Y a-t-il des outils faciles pour l'utiliser ?
SilentEye propose cette fonctionnalité avec interface graphique. Des implémentations Python avec scipy (fft, ifft) permettent de créer sa propre version. La compréhension de base nécessite de connaître les transformées de Fourier, mais les bibliothèques abstraient la complexité mathématique.
Techniques audio connexes
Expérimentez LSB audio directement dans votre navigateur ou comparez avec Echo Hiding.