-
Notifications
You must be signed in to change notification settings - Fork 16
/
steganography.theory.txt
390 lines (363 loc) · 22.1 KB
/
steganography.theory.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
STEGANOGRAPHY
Histoire :
- fin XVIème : Bacon, stego avec {A..Z} == {0..25}, encodé sur 5 bits en BCD (binary coded decimal), un 0 signifiant une majuscule dans le carrier, un 1 une minuscule.
Liste logiciels : jjtc.com
SARC : Steganography Analysis and Research Center
Peter Wayner : spécialisé dans grammar-generated stego
steganographie : le fait de dissimuler
stegananalyse : le fait de chercher à voir si un fichier est steganographique
Qualité de stego :
- but principal :
- suspectability (confidentiality au sens stego) :
- difficulté de détection :
- pas suspicieux à un humain (invisible à l'oeil nu, etc.)
- pas suspicieux à un ordi :
- propriétés : absence de motif ou de signature binaire
- métapropriétés : non-modification de metapropriétés du fichier (par exemple la taille)
- même connaissant algo, impossible de déterminer si steganisé ou non
- donc pas besoin de clef stego : but de stégo n'est pas de chiffrer (mais message peut/devrait l'être, c'est le
problème de la crypto, pas de la stego)
- le channel n'a pas à être supposé secure
- autres buts :
- survivabilité :
- peu/pas de perte du payload si dégradation du carrier, volontaire ou non
- availibility :
- moyens :
- peu moyens cognitifs :
- génération : facile à utiliser, peu de connaissance préliminaires
- transmission :
- facile pour transmettre
- facilité de la rétention
- peu moyens en termes d'outils (physiques) :
- génération : utilisable sans aide d'un PC
- transmission :
- utilisable sur divers carriers, dont non électroniques
- temps :
- génération : rapide à utiliser/générer
- transmission :
- rapide à communiquer
- lieu :
- pas besoin d'être dans un lieu quelconque
- taille maximale du payload :
- absolue ou relative
- affectent availibility et suspectability (car plus grande la communication, plus suspecte)
- autres autres buts :
- deniability :
- deniable encryption
- deniable authentication
- buts propres à une situation particulière
- notamment watermarking (difficulté de détruire payload)
- ces buts me semblent redondants avec la crypto :
- confidentialité au sens crypto du terme :
- utilisation d'une clef stego lors extraction
- intégrité
- authentication
Idées pour améliorer :
- Permettre de stéganographier le logiciel de stégano lui-même ? (ne pas savoir qu'il s'agit d'un logiciel de stégano)
- un seul payload divisé sur plusieurs carriers (mieux : pas forcément contigus)
- utilisations créatives de la stégano, de même que la crypto a de nombreuses utilisations, pq pas la stégano ?
Idées pour le logiciel :
Stégano :
Attention aux patents !
Penser à la backward-compatibility des algorithmes
Stéganalyse :
- offrir diagrammes d'analyse statistiques (GUI) => proposer les stats pour
Vocabulaire :
- carrier/host file/overt message + payload/covert message
- channel : type du carrier
- ajouter info : "adding noise" au carrier (dépend noise tolerance du channel)
Carrier :
- plusieurs niveaux :
- ex: PNG file est un carrier, mais on pourrait le généraliser aux image files, voire aux electronic data
- conséquence :
- quand on considère si carrier est suspect, considérer tous les niveaux
Suspectability :
- chercher à comprendre ce que signifie cela exactement
- tout peut être suspect dans une communication :
(Contexte)
Carrier
Emetteur ------Message------> Destinataire
- en général on considère suspectability du message par rapport aux sets possibles du carrier
- mais il peut y avoir aussi :
- émetteur/destinataire susprenant pour le contexte
- Contexte incohérent ou surprenant (heure, lieu, incohérence avec le message)
- pour suspectability du message par rapport aux sets possibles du carrier :
- définir profil statistique du carrier (ex: texte anglais .txt) avec toutes analyses stats possibles
- un profil statistique diffère selon la situation de communication (ex: langue d'un .txt, date de l'année (occurence du
mot "Christmas"), etc.)
- introduire le payload en altérant message (noise adding) en suivant ce profil statistique de manière aléatoire
- penser aux différents degrés de carrier :
- s'il est possible de créer des .xcf non-suspects, mais que tout le monde le fait, les .xcf en eux-même parmi les
autres types d'images deviendront suspects : c'est parce que l'on ne respecte pas alors le profil statistique des .xcf
parmi le carrier supérieur (fichiers images). Il faudrait produire le type d'image de manière statistique et aléatoire
selon le profil statistique de la situation de communication donnée
Techniques stego (rangées par carrier) :
- images :
- least-significant-bit : modifie bits faibles (1 à 3 derniers LSB) :
- de chaque channel pour une image 24 bits/pixel (.bmp)
- => pour dissimuler un octet, on utilise souvent 3 pixels => 1 des 9 channels est pas utilisé => peu être détecté
- modification coefficient .jpeg
- modification palette couleurs (.gif, .png)
- son :
- modification de l'amplitude de chaque sample, avec LSB (attention bit parity de .wav)
- modification de la fréquence
- modification du pitch
- dans un exécutable :
- dans segments orphelins
- utiliser des arrays non-initialisés et non utilisés dans le source, compiler (attention optimisation), et modifier ces arrays dans le fichier compilé.
- injecter des NOP
- dans un fichier 3D
- dans des paquets réseaux :
- IP :
- Header : IP id number (4 octets). Peut être n'importe quoi du moment que tous les paquets d'une transmission ont le même. En théorie sinon, incrémente de 1 à chaque transmission.
- TCP :
- Header : initial sequence number et initial ACK number (sinon choisis aléatoirement) (4 octets chacun)
- attention : sont incrémentés. Donc ne doit pas dépassé int_max
- UDP : possible aussi, mais moins de place
- ICMP : possible aussi, mais moins de place
- SMS
- HTTP (souvent pour faire du tracking) :
- hidden form field
- URL ("URL embedding")
- textes :
- espace en fin de ligne
- ponctuation
- changer un mot par un équivalent (par exemple un ékivalent en langage SMS)
- programme :
- le langage constitué de seulement des whitespaces
- fichier en général :
- cacher dans les metadatas
- Word document : comment field dans properties section
- HTML : dans commentaires
- .rtf : injection après le {\rtf1 ... }
- système de fichier steganographique :
- exemple : rubberhose, filesystem avec deniable encryption
- Generation grammar-based :
- Steganart : generation de fichiers ressemblant à art abstrait. Peut être fait sans ordinateur.
- certains esoteric program langages
Idées de techniques évoluées :
- Watermarking invisible de code source GPL (pour éviter utilisation dans code proprio, et détecter facilement et sans
rétro-ingénieurie) : injection de ligne de code dans le code source, donnant un ensemble limité de code machine possible,
pouvant être détecté par une recherche binaire.
Clef == payload == ligne de code source à introduire (créer clef en plus du payload ??)
Challenges :
- Survivabilité :
- marche pour les compilateurs les plus courants (compilateur/version/OS/architecture)
- résiste aux optimisations des compilos
- résiste aux modifications tel que "strip" ou autre
- Singularité du payload :
- le code machine généré est très peu probable à générer de manière involontaire
- Difficulté de détection :
- ligne de code source anodine et non-suspecte.
- ligne de code source assez aléatoire pour éviter scannage automatique de toutes variantes possibles dans code source
(ou détection de ligne de code source inutile)
- impossible de détecter si et où code machine injecté (notamment détection de code machine inutile)
Catégorisation de stego :
- par channel
- par technique (old way) :
- insertion : payload toujours au même endroit (injection ou transformation)
- en général à un endroit ne détériorant pas le carrier de manière détectable (LSB, headers, color table, fin du fichier; etc.)
- algorithmique : endroit où mettre le payload est déterminé par un algo qui prend des arguments variables et/ou pseudo-aléatoire (injection ou transformation).
- attention, car si l'endroit est mal choisi par l'algo => détérioration du carrier
- "spread spectrum" : but est de spread le payload de manière étendue et aléatoire dans le carrier, pour réduire risque de détection
- grammar : (generation). La carrier généré est dans un langage et une grammaire donnée, et la stégo utilise cette grammaire avec le payload comme seul input pour générer le carrier.
- le carrier doit ressembler au langage cible de manière :
- statistique (par un ordi, "mimic function")
- non suspecte (par un humain)
- par technique (new way) :
- injection (parfois appelé insertion) : ajoute le covert message au carrier.
- modification méta-propriétés (taille du carrier, etc.)
- substitution : modifie le carrier en fonction du covert message.
- dégradation du carrier
- ne modifier que les zones de forte entropie
- il y a une taille maximale du payload. Plus payload est grand, plus carrier est détérioré.
- generation : création d'un carrier en fonction du covert message, et seulement de celui-ci
- évite comparaison avant/après.
- attention à nature suspicieuse du channel
- qualité dépend aussi du ratio taille payload / taille carrier
- exemples :
- fractals (peut attirer l'attention), utilisant l'angle de la fractal, etc., ou autre random-generated file
- phrase en anglais, français, etc. (ex : spams)
- audio files :
- créer des ondes ou bouts de mélodies
- possible aussi en substition (injecter ces bouts de mélodies dans fichier existant)
But possible de stego :
- cacher clef de licence
- cacher payload d'un virus dans fichier inoffensif pour éviter scan-antivirus
Théorie générale de la stego :
- stego = communication, soit : message < channel < contexte
- message (quoi ?) :
- peut être info normale (phrase, image, etc.) ou autres
- est considéré comme une black-box dont la stego ne se soucie pas : le chiffrement, compression, transcription d'une
info sous forme digitale sont laissées à la crypto, compression et information theory. Tout cela est "post-stego" et
est éludé.
- est considéré comme un pool d'entropie random ou non, peu importe
- seule propriété intéressante : sa taille et sa finitude
- channel (comment ?) :
- plus spécifiquement, algorithme permettant de dissimuler un message quelconque, payload, (cf dessus) dans un ou plusieurs carriers appartenant à des channels spécifiques
- "dissimuler" :
- minimaliser la possibilité pour Eve de percevoir que le carrier contient/peut contenir un payload
- "percevoir" : indices peuvent être plus ou moins sensibles ou intellectuels
- "peut contenir" :
- coeur de la stego et seule mission est la notion de soupçon du channel.
- Si Eve a des soupçon qu'un channel stéganisé l'est, la stego a complètement échoué, même si elle ne parvient
pas à (par ordre de progession) :
a) déterminer si le channel est bien stéganisé ou non
b) extraire le payload
c) déchiffrer le payload
- c) appartient à la crypto, b) à un éventuel algo de stégo cryptographique (que je trouve redondant avec c) et
inutile), a) à l'information theory (en général, messages sont chiffrés donc aléatoires et donc impossibles de
déterminés si signifiant ou non)
- Eve peut (et devrait être supposée comme) avoir un soupçon général sur tout channel utilisé par Alice.
Mais l'échec de la stégo vient quand Eve a un soupçon supérieur pour un channel particulier par rapport aux
autres (et que ce channel est bien stéganisé)
- tout en permettant à Bob d'extraire le payload.
- il s'agit d'une forme de confidentialité par l'obscurité
- il peut être possible de considérer l'ensemble du protocole, au-delà de l'algorithme
- par ex., le timing de la communication ne doit pas être suspicieux
- contexte (pourquoi ? ) :
- contexte motivant la dissimulation de l'acte de communication
- et non l'acte de communication en lui-même, qui est insignifiant, même s'il peut revetir toute forme possible dans un contexte non stego
- par ex., il peut contenir identité de l'émetteur (authentication). Mais cela est une question post-stego.
- détermine plusieurs propriétés de l'algo de stego, par ex:
- channels utilisés
- ressources utilisées, telles que le temps ou connaissances requises
Différents types de stégo :
- deux changements :
- ou modification du channel
- ou modification du contexte (plus fondamental que le channel)
- trouver idées originales :
- channel :
- type normal : informatique, par image, fichier son, etc.
- idées originales :
- non-informatique, tel que langage, ou caché dans un Rubik's cube
- contexte :
- type normal : dissimulation d'information stratégique à un ennemi militaire ou diplomatique
- ex. original :
- internaute dissimulant navigation à Isaac et Gordon pour des questions de vie privée ou censure
- ado cachant discussion privée de parents sur Facebook
- watermark invisible : copyright holder cachant "détecteur d'infrigment"
Transmission de stego :
- dans un attachment : le payload est mis dans un carrier, et le carrier est :
- envoyé par mail (pièce-jointe ou contenu du message (spam-looking))
- laissé comme une digital dead drop :
- ftp site
- site web (souvent image)
- dans un protocole réseau
- substitution dans les headers des paquets
- "data camouflaging" : imite un "overt protocol" :
- utilise le même port
- imite la syntaxe, pour ne pas être détecté (donc par le firewall), mais contient le payload
- protocole avec beaucoup de traffic => difficile de scanner
Input de stego :
- peut être compressé et/ou chiffré.
- permet extraction plus difficile
- est moins détectable par analyse statistique
- en général peut être n'importe quel input (fichier, array, socket, ...), sauf certains cas où l'input doit être forcément du texte par exemple
- peut y avoir souvent plusieurs inputs, concaténés. Il faut alors penser à comment les déconcaténés (par exemple : compression/décompression).
Visual cryptography : décompose une image en deux feuilles transparentes. Chacune seule ne permet de deviner le covert message, mais la superposition oui.
Autre (pas vraiment stego) :
- chaffing et winnowing : pour chaque bit, Alice envoie à Charles :
- le bit
- son index
- un authentif. number (le même pendant tout le message, et partagé par Alice et Bob, mais pas forcément Charles)
Charles envoie chaque paquet à Bob en ajoutant des paquets forgés par lui, avec le même index, mais des bits et authentif. numbers aléatoires.
Permet de se protégé de l'obligation légale de déchiffrer, car l'authentif. number n'est pas utilisé pour chiffrer, mais authentifier.
Social steganography :
- vraie vie
- peut être par une technique de stégo normale, souvent interprétation double du carrier. Exemple : ados sur Facebook, veut parler aux amis mais les parents sont en contact. De même avec Twitter.
Comparaison avant/après :
- si utilisation du même carrier pour plusieurs payloads.
- détection :
- avec substitution, modification visuelle => aussi faible que possible.
- avec injection, attention : modification taille.
- avec substition et injection, ne pas modifier checksum (possible seulement sur hash crackable)
Deniable encryption :
- possibilité de nier chiffrement d'un message
- sert à lutter contre rubberhose cryptanalysis
- deux types :
- message chiffré qui, ayant une parfaite diffusion, peut être dit non-chiffré et seulement aléatoire
- but : dissimuler fait d'utiliser chiffrement
- souvent mélange message chiffrés avec garbage aléatoire pour rendre non seulement possible mais probable la dissimulation
- message chiffré délivrant plusieurs plaintexts selon plusieurs clefs
- but : dissimuler quantité d'information chiffrée, et donc certaines infos chiffrées
- permet de délivrer plaintext peu important (decoy), et garder confidentiel plaintext important
- équivaut à ambiguité du ciphertext, maîtrisée
- malléability implique souvent cela
- premier type peut mener eu deuxième : peut mettre des decoys parmi garbage aléatoire
Deniable authentication :
- possibilité de nier authentication d'un message
- principe :
- permettre authentication pour Alice et Bob
- mais empêcher à Gordon de prouver que l'authenticité des messages
- ex :
- donner possibilité à tout attaquant ayant compromis la clef privée/secrète, de forger des MAC, en chiffrant le MAC avec
la clef privée/secrète
-> personne ayant compromis confidentialité ne peut pas prouver ne pas avoir forger l'authenticité
-> on ne peut pas comprendre message (confidentialité) + l'attribuer à quelqu'un (authentication) et prouver qu'il n'y
a eu aucune forgery
- présent dans notamment OTR (messaging protocol)
But de steganalyse :
- "cracker" -> deviner qu'il y a un message caché, pas lire ce message.
- "Inférence tracking" : deviner qu'il y a une communication crypto ou stégo en cours et, même sans comprendre le message, enquêter en conséquence.
- Contre-mesure : stego d'un payload chiffré, sur un carrier chiffré lui-aussi, mais insignifiant (si risque de crackage), pour faire croire à une communication chiffrée sur carrier.
- peut être de détruire le payload aussi.
Stéganalyse :
- analyse :
- calcul du PSNR (peak signal-to-noise ratio) : 20.log10(255/RMSE) (RSME : root mean squared error). Valeur typique : entre 20 et 40.
- linear discriminant analysis :
- étant donné un algo de stego s(x) (où x est un carrier), deviner une fonction de détection d(x), tel que d(x) donne des résultats différenciables de d(s(x))
- si s(x) est inconnu, calculer caractéristiques statistiques d'un channel donné, et le comparer aux carriers suspects
- stats possibles :
- KHI2
- average bytes
- variation of the bytes
- skew
- kurtosis
- average deviation
- differential values
- suppression :
- recompression .jpg
- modification tel qu'étirement, etc.
- impression papier + scannage
- détection :
- color table :
- regarder couleurs doublons, ou presque doublons
- regarde ordre des couleurs
- reverse www shell :
- ratio send data / emitted data est étrange.
- comparaison avant/après
- DCT coefficients : normalement distribution des DCT est lisse et symétrique, sinon staircase et asymétrique.
Watermarking :
- visible vs invisible
- 3 principaux marchés :
- audio : Audiomark (Alphatec), Verance
- video : Videomark (Alphatec)
- images : EIKONAmark (Alphatec)
- Autres marchés :
- tous : Digimarc, Giovanni (bluespike), Syscop
- 3D image : Volmark
- Je considère le watermarking invisible comme de la stégo, mais visible non. Il s'agit plutôt de quelque chose proche de
la compression, mais incompressible et gardant propriété de l'input
+-------------------------------------+----------------------------------------+
| Watermarking | Stéganographie |
+-------------------------------------+----------------------------------------+
| Petite taille du payload | Aussi grand que possible |
| Résistance à destruction payload | Pas forcément |
| +--> Répétition possible | |
| +--> Place est importante | |
| Carrier important | Carrier insignifant |
| Signification payload insignifiant | Payload important (besoin de chiffrer) |
| (donc pas besoin de chiffrer) | |
| Si visible, important que soit vu | Ne doit pas être détecté |
| Attaque : détruire payload | Attaque : détecter payload |
| But : signature pour prouver | But : communication cachée |
| copyright | |
| +--> Singularité payload importante| |
| Pas de problème de passage de clef, | Question du passage de la clef. |
|car personne chiffrant et déchiffrant| |
| est la même (tout est local) | |
+-------------------------------------+----------------------------------------+
"Singularité" : probabilité d'avoir un carrier paraissant stéganisé, mais ne l'étant pas (juste pattern aléatoire ressemblant
par hasard à un payload valide) : %chance d'avoir payload semblant valide mais ne l'étant pas, pour un algorithme stego donné.
Singularité du payload peut augmenter suspicion (si watermark invisible)