Comprendre l'Esteganografia Basada en Matrius
Què és l'Esteganografia?
L'esteganografia és la pràctica d'ocultar informació dins d'altres dades no secretes. A diferència del xifratge, que fa que les dades siguin ilegibles, l'esteganografia amaga la mateixa existència del missatge. Les imatges digitals són portadors perfectes perquè contenen milers de píxels i les modificacions lleus són imperceptibles per a l'ull humà.
Com Funcionen les Matrius de Píxels
Les imatges digitals s'emmagatzemen com a matrius (quadrícules) de píxels. Cada píxel conté informació de color codificada com a números. En el model de color RGB, cada píxel té tres valors que van de 0 a 255:
- R (Vermell): 0-255
- G (Verd): 0-255
- B (Blau): 0-255
Per exemple, el vermell pur és (255, 0, 0), el verd pur és (0, 255, 0) i el blau pur és (0, 0, 255).
Representació de matriu d'una imatge 3×3:
Píxel[0,0]: (245, 130, 88) Píxel[0,1]: (120, 200, 150) Píxel[0,2]: (90, 110, 200)
Píxel[1,0]: (200, 50, 100) Píxel[1,1]: (180, 180, 180) Píxel[1,2]: (75, 95, 210)
Píxel[2,0]: (255, 0, 0) Píxel[2,1]: (0, 255, 0) Píxel[2,2]: (0, 0, 255)
Cada píxel és accessible per la seva posició [fila, columna] a la matriu.
Codificació del Bit Menys Significatiu (LSB)
La tècnica LSB aprofita el fet que canviar l'últim bit d'un valor de color produeix una diferència visual insignificant. Per exemple, canviar el blau de 154 a 155 és imperceptible.
Representació binària:
154 en binari: 10011010
155 en binari: 10011011 ← Només l'últim bit ha canviat!
Diferència visual: IMPERCEPTIBLE per a l'ull humà
Aquest petit canvi és invisible per a l'ull humà però ens permet emmagatzemar dades.
Aritmètica Modular (mod 2) per LSB
Utilitzem l'aritmètica modular per manipular bits de manera eficient:
- Codificació:
píxel = (píxel & 0xFE) | bit
píxel & 0xFE: Operació AND bit a bit amb 11111110 que esborra l'últim bit (el posa a 0)
| bit: Operació OR bit a bit que estableix l'últim bit al nostre bit de missatge (0 o 1)
- Descodificació:
bit = píxel & 1
- Operació AND amb 00000001 que extreu només l'últim bit del valor del píxel
Exemple pràctic d'operacions bit a bit:
Valor original del píxel: 154 (10011010)
Bit a emmagatzemar: 1
Pas 1 - Esborrar LSB:
10011010 (154)
& 11111110 (0xFE)
-----------
10011010 (154 - LSB ja era 0)
Pas 2 - Establir el nou bit:
10011010
| 00000001 (bit = 1)
-----------
10011011 (155)
Resultat: 154 → 155 (bit 1 emmagatzemat)
Xifratge amb Aritmètica Modular Afí
Per afegir una capa addicional de seguretat, utilitzem el xifratge afí, un tipus d'encriptació basada en aritmètica modular. Abans d'emmagatzemar cada caràcter a la imatge, el transformem utilitzant la fórmula:
Fórmula d'Encriptació:
E(x) = (a·x + b) mod 256
On:
x = Valor ASCII del caràcter (0-255)
a = Multiplicador (ha de ser coprimer amb 256)
b = Desplaçament (0-255)
E(x) = Valor encriptat resultant
Per Què Funciona el Xifratge Afí?
El xifratge afí combina dues operacions matemàtiques:
- Multiplicació per 'a': Dispersa els valors de forma no lineal
- Suma de 'b': Desplaça tots els valors una quantitat fixa
- Mòdul 256: Assegura que el resultat estigui dins del rang 0-255 (un byte)
Condicions Matemàtiques per al Paràmetre 'a'
El valor de 'a' ha de complir condicions específiques per permetre la desencriptació:
Requisit: MCD(a, 256) = 1
El Màxim Comú Divisor entre 'a' i 256 ha de ser 1. Això significa que 'a' i 256 són coprimers (no comparteixen factors comuns excepte 1).
Exemples de valors VÀLIDS per 'a':
1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25...
(tots els números senars que no són múltiples de altres factors)
Exemples de valors NO VÀLIDS per 'a':
2, 4, 6, 8, 10, 12, 14, 16... (parells - comparteixen el factor 2 amb 256)
Per què? 256 = 2⁸
Qualsevol número parell comparteix el factor 2 amb 256
Això fa impossible calcular l'invers modular necessari per desencriptar
Càlcul de l'Invers Modular
Per desencriptar, necessitem trobar l'invers modular de 'a' respecte a 256, denotat com a⁻¹. Aquest és un número tal que:
a · a⁻¹ ≡ 1 (mod 256)
Exemple amb a = 5:
Necessitem trobar a⁻¹ tal que (5 · a⁻¹) mod 256 = 1
Provant valors:
5 · 51 = 255 mod 256 = 255 ✗
5 · 77 = 385 mod 256 = 129 ✗
5 · 205 = 1025 mod 256 = 1 ✓
Per tant, l'invers modular de 5 és 205
Mètode de càlcul: Utilitzem l'Algoritme d'Euclides Estès per trobar l'invers modular de forma eficient. Aquest algoritme troba els coeficients de l'identitat de Bézout.
Fórmula de Desencriptació
Un cop tenim l'invers modular, podem revertir el procés d'encriptació:
Fórmula de Desencriptació:
D(y) = a⁻¹ · (y - b) mod 256
On:
y = Valor encriptat
a⁻¹ = Invers modular de 'a'
b = Mateix desplaçament utilitzat en l'encriptació
D(y) = Valor original desencriptat
Exemple Complet d'Encriptació i Desencriptació
Paràmetres: a = 5, b = 8
Invers modular: a⁻¹ = 205
Caràcter a encriptar: 'H'
Pas 1: Obtenir valor ASCII
'H' → ASCII = 72
Pas 2: Aplicar fórmula d'encriptació
E(72) = (5 · 72 + 8) mod 256
E(72) = (360 + 8) mod 256
E(72) = 368 mod 256
E(72) = 112
Pas 3: Emmagatzemar 112 a la imatge (en binari: 01110000)
Pas 4: Per desencriptar, recuperem el valor 112
D(112) = 205 · (112 - 8) mod 256
D(112) = 205 · 104 mod 256
D(112) = 21320 mod 256
D(112) = 72
Pas 5: Convertir a caràcter
ASCII 72 → 'H' ✓ Recuperat correctament!
Per Què Aquest Mètode És Segur?
- Ocultació doble: El missatge està amagat (esteganografia) I encriptat (xifratge afí)
- Clau secreta: Sense conèixer els valors de 'a' i 'b', és impossible desencriptar
- Espai de claus: Amb múltiples valors vàlids per 'a' (128 opcions) i 256 opcions per 'b', hi ha 32.768 combinacions possibles
- Resistència a anàlisi visual: Els canvis al LSB són imperceptibles
Exemple Manual Pas a Pas: Codificar 'A' amb Encriptació
Tasca: Codificar la lletra 'A' en una imatge amb a=5, b=8
Pas 1: Convertir 'A' a ASCII i encriptar
Valor ASCII de 'A' = 65
Encriptació: (5 · 65 + 8) mod 256 = 333 mod 256 = 77
77 en binari = 01001101
Pas 2: Agafar els valors del canal blau dels primers 8 píxels
Valors blaus originals (en binari):
Píxel 1: 154 (10011010)
Píxel 2: 200 (11001000)
Píxel 3: 87 (01010111)
Píxel 4: 123 (01111011)
Píxel 5: 201 (11001001)
Píxel 6: 45 (00101101)
Píxel 7: 99 (01100011)
Píxel 8: 176 (10110000)
Pas 3: Reemplaçar el LSB de cada píxel amb els bits del valor encriptat (77 = 01001101)
Bits a emmagatzemar: 0 1 0 0 1 1 0 1
Píxel 1: 10011010 → 10011010 (bit 0) = 154 (sense canvi)
Píxel 2: 11001000 → 11001001 (bit 1) = 201 (+1)
Píxel 3: 01010111 → 01010110 (bit 0) = 86 (-1)
Píxel 4: 01111011 → 01111010 (bit 0) = 122 (-1)
Píxel 5: 11001001 → 11001001 (bit 1) = 201 (sense canvi)
Píxel 6: 00101101 → 00101101 (bit 1) = 45 (sense canvi)
Píxel 7: 01100011 → 01100010 (bit 0) = 98 (-1)
Píxel 8: 10110000 → 10110001 (bit 1) = 177 (+1)
Pas 4: La imatge modificada ara conté 'A' encriptada com a 77!
Pas 5: Per desencriptar:
Llegir LSBs: 01001101 = 77
Aplicar fórmula inversa: D(77) = 205 · (77 - 8) mod 256
D(77) = 205 · 69 mod 256 = 14145 mod 256 = 65
ASCII 65 = 'A' ✓
Estructura d'Emmagatzematge a la Imatge
Format de dades a la imatge:
Bits 0-15: Longitud del missatge (16 bits, màx 65535 caràcters)
Bits 16-23: Primer caràcter encriptat (8 bits)
Bits 24-31: Segon caràcter encriptat (8 bits)
... Caràcters restants
Exemple per "Hola" (4 caràcters, a=5, b=8):
Bits 0-15: 0000000000000100 (longitud = 4)
Bits 16-23: 01110000 ('H'→72→112)
Bits 24-31: 11111101 ('o'→111→253)
Bits 32-39: 00011100 ('l'→108→28)
Bits 40-47: 10101101 ('a'→97→173)
Per Què el Canal Blau?
Codifiquem només en el canal blau per raons fisiològiques i tècniques:
- Sensibilitat ocular: L'ull humà és menys sensible als canvis en el blau (conté menys cons sensibles al blau)
- Percepció de luminositat: El verd contribueix més a la percepció de luminositat (~59%), el vermell ~30%, i el blau només ~11%
- Minimització de distorsió: Modificar el blau produeix els canvis visuals menys perceptibles
Càlcul de Capacitat d'Emmagatzematge
Capacitat = (Amplada × Alçada × 1 bit) / 8 bits per byte
Exemple per imatge 800×600:
Píxels totals = 800 × 600 = 480.000 píxels
Bits disponibles = 480.000 bits (1 per píxel al canal blau)
Bytes disponibles = 480.000 / 8 = 60.000 bytes
Descomptant 2 bytes per la longitud:
Capacitat real ≈ 59.998 caràcters
Bibliografia