Principe : modifications différentielles
Patchwork utilise une clé secrète pour sélectionner pseudo-aléatoirement des paires de samples (A, B) dans le signal audio. Pour encoder le watermark, on applique une modification différentielle : augmenter A de δ et diminuer B de δ.
L'impact sur l'énergie totale du signal est nul (A+δ + B-δ = A+B), mais statistiquement, la différence moyenne entre les échantillons A et B devient positive, ce qui constitue la signature détectable.
Signal original : [..., a₁, ..., b₁, ..., a₂, ..., b₂, ...]
↑ ↑
paire 1 (sélectionnée par clé secrète)
Après encodage (+δ sur a, -δ sur b) :
Signal : [..., a₁+δ, ..., b₁-δ, ..., a₂+δ, ..., b₂-δ, ...]
Propriétés :
Énergie locale : (a₁+δ)² + (b₁-δ)² ≈ a₁² + b₁² (si δ petit)
Différence moyenne : E[(aᵢ+δ) - (bᵢ-δ)] = E[aᵢ - bᵢ] + 2δ
→ La différence statistique augmente de 2δ sur toutes les paires !
Détection : mesurer la différence moyenne des paires (avec la clé)
Si diff_moyenne > seuil → watermark présent → bit encodéAlgorithme d'encodage
Initialiser un générateur pseudo-aléatoire avec la clé secrète
Générer n paires d'indices (i, j) aléatoires dans le signal audio
Pour chaque paire (i, j) : aᵢ += δ ; aⱼ -= δ (avec δ = force du watermark, typiquement 5-20)
Pour encoder plusieurs bits : diviser le signal en segments, appliquer l'algorithme à chaque segment selon le bit
Vérifier que les samples restent dans [0, 65535] pour 16 bits (clipping évité)
PATCHWORK ENCODE (pseudo-code) :
function encode(signal, secret_key, delta=10):
rng = PRNG(seed=secret_key)
n = len(signal) // 2 // nb de paires
for i in range(n):
idx_a = rng.next() % len(signal)
idx_b = rng.next() % len(signal)
signal[idx_a] = clamp(signal[idx_a] + delta, 0, 65535)
signal[idx_b] = clamp(signal[idx_b] - delta, 0, 65535)
return signal
PATCHWORK DECODE (sans signal original) :
function detect(signal, secret_key, n_pairs):
rng = PRNG(seed=secret_key)
diff_sum = 0
for i in range(n_pairs):
idx_a = rng.next() % len(signal)
idx_b = rng.next() % len(signal)
diff_sum += signal[idx_a] - signal[idx_b]
avg_diff = diff_sum / n_pairs
return avg_diff > threshold // watermark présent si TrueDétection statistique sans original
La grande force de Patchwork est que la détection ne nécessite pas le signal original. Il suffit de connaître la clé secrète. On recalcule les mêmes paires (i, j) et on mesure la différence moyenne entre les échantillons a et b.
Sans watermark, la différence E[a - b] ≈ 0 (signal naturel). Avec watermark, E[a - b] = 2δ > 0. Un test statistique simple (t-test) permet de décider si le watermark est présent.
→ La fiabilité de la détection augmente avec le nombre de paires n. Pour n = 1000 paires, δ = 10 sur un signal 16 bits, la probabilité de fausse détection est < 10⁻⁶.
Robustesse et limites
Résistance au bruit additif
Le bruit affecte les deux membres de chaque paire de façon indépendante. En moyenne, il s'annule et la différence 2δ est préservée.
Résistance au filtrage
Le filtrage passe-bas ou passe-haut modifie les amplitudes mais préserve les différences relatives entre paires proches.
Vuln. aux attaques collusion
En moyennant plusieurs copies watermarkées avec des clés différentes, l'attaque par collusion peut effacer le watermark.
Vulnérable à la rééchantillonnage
Le changement de sample rate repositionne tous les échantillons. Les indices générés par la clé ne correspondent plus.
Patchwork vs autres watermarks audio
| Technique | Capacité | Robustesse | Original requis |
|---|---|---|---|
| LSB Audio | Haute | Faible | Non |
| Echo Hiding | Moyenne | Moyenne | Non |
| Phase Coding | Haute | Faible | Oui |
| Patchwork | Très faible | Haute | Non |
| Spread Spectrum | Faible | Très haute | Non |
→ Patchwork n'est pas une technique de stéganographie à haute capacité. Son cas d'usage est le watermarking : prouver la propriété d'un fichier audio via quelques bits de signature, robustement.
Questions fréquentes
Quelle est la différence avec le tatouage numérique classique ?
Un tatouage numérique classique peut nécessiter l'image originale pour être détecté. Le patchwork est conçu pour la détection aveugle : en calculant la somme des différences entre paires de pixels, on retrouve le tatouage sans l'image originale. C'est comme une signature statistique de l'image entière.
Peut-on cacher un long message avec patchwork ?
Non, la capacité est très faible (quelques bits à quelques dizaines de bits typiquement). Patchwork est conçu pour des identifiants courts : numéro de copyright, identifiant de source, empreinte numérique. Pour cacher un vrai message, utilisez LSB ou une autre technique à haute capacité.
À quel point est-il robuste aux modifications ?
Modérément robuste. Il résiste à une compression JPEG légère (si la force du tatouage δ est suffisamment grande), à des ajouts de bruit modérés, et à de légères modifications de luminosité. En revanche, un recadrage important, un redimensionnement ou un filtrage agressif peuvent détruire le tatouage.
Pour quels cas d'usage concrets est-il utilisé ?
Copyright d'images pour prouver la paternité lors de contentieux juridiques, identification de la source d'une fuite (chaque copie vendue a un identifiant unique), et en recherche académique pour valider des algorithmes de détection de tatouage. Certaines agences photos l'utilisent pour leurs catalogues.
Est-ce visible sur l'image ?
Non. Les modifications sont symétriques (pixel A monte de δ, pixel B descend de δ) — l'aspect global de l'image reste identique. La variation de luminosité locale est typiquement de 1-5 niveaux sur 255, imperceptible à l'œil humain.
Techniques audio connexes
Expérimentez LSB audio directement dans votre navigateur.