Outils d'utilisateurs

Outils du Site


unicode_comme_canal_steganographique

Différences

Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue

unicode_comme_canal_steganographique [2014/03/14 14:05]
Spawn
unicode_comme_canal_steganographique [2017/04/09 15:33] (Version actuelle)
Ligne 1: Ligne 1:
 +⚠‍͏ cette page utilise beaucoup de caractères que vous ne voyez potentiellement pas, n'hésitez pas à copier&coller dans un terminal du texte ''echo -n 'texte' | hd '' pour constater la présence d'octets invisibles ⚠‍͏
 +
 ===== Qu'est-ce qu'Unicode ? ===== ===== Qu'est-ce qu'Unicode ? =====
  
Ligne 62: Ligne 64:
     00000000  43 d0 a1                                          |C..|     00000000  43 d0 a1                                          |C..|
  
-=== Les espaces ===+==== Les espaces ====
 Un autre vecteur que les homoglyphes, moins fiable : les espaces : Un autre vecteur que les homoglyphes, moins fiable : les espaces :
  
Ligne 94: Ligne 96:
 Le souci avec les espaces, c'est qu'ils ont des tailles variables, et qu'à moins d'être affichés dans un terminal, ils sont carrément visibles. (Sauf le discret U+00A0 « »). Le souci avec les espaces, c'est qu'ils ont des tailles variables, et qu'à moins d'être affichés dans un terminal, ils sont carrément visibles. (Sauf le discret U+00A0 « »).
  
 +==== Les caractères invisibles de combinaison ====
 +
 +Si les espaces peuvent poser problème parce qu'ils se mesurent, il existe des caractères unicode qui ne se voient pas par nature :
 +
 +
 +    $ python -c 'print "a".join([unichr(i) for i in [0x034f,0x200c,0x200d]+range(0xfe00,0xfe10)])'
 +    a‌a‍a︀a︁a︂a︃a︄a︅a︆a︇a︈a︉a︊a︋a︌a︍a︎a️
 +
 +a‌a‍a︀a︁a︂a︃a︄a︅a︆a︇a︈a︉a︊a︋a︌a︍a︎a️
 +
 +Il s'agit des caractères suivants :
 +
 +    U+034F COMBINING GRAPHEME JOINER
 +    U+200C ZERO WIDTH NON-JOINER
 +    U+200D ZERO WIDTH JOINER
 +    U+FE00 VARIATION SELECTOR-1
 +    ...
 +    U+FE0F VARIATION SELECTOR-16
 +    
 +Les 16 premiers sont plutôt invisibles, car présents dans Unicode depuis sa version 3.2.
 +
 +
 +Les suivants ne son présents que depuis la 4.0, et ils sont rangés bien plus loin, de 0xE0100 à 0xE01EF :
 +
 +    $ python -c 'print "a".join([unichr(i) for i in range(0xe0100,0xe01f0)])'
 +    a󠄁a󠄂a󠄃a󠄄a󠄅a󠄆a󠄇a󠄈a󠄉a󠄊a󠄋a󠄌a󠄍a󠄎a󠄏a󠄐a󠄑a󠄒a󠄓a󠄔a󠄕a󠄖a󠄗a󠄘a󠄙a󠄚a󠄛a󠄜a󠄝a󠄞a󠄟a󠄠a󠄡a󠄢a󠄣a󠄤a󠄥a󠄦a󠄧a󠄨a󠄩a󠄪a󠄫a󠄬a󠄭a󠄮a󠄯a󠄰a󠄱a󠄲a󠄳a󠄴a󠄵a󠄶a󠄷a󠄸a󠄹a󠄺a󠄻a󠄼a󠄽a󠄾a󠄿a󠅀a󠅁a󠅂a󠅃a󠅄a󠅅a󠅆a󠅇a󠅈a󠅉a󠅊a󠅋a󠅌a󠅍a󠅎a󠅏a󠅐a󠅑a󠅒a󠅓a󠅔a󠅕a󠅖a󠅗a󠅘a󠅙a󠅚a󠅛a󠅜a󠅝a󠅞a󠅟a󠅠a󠅡a󠅢a󠅣a󠅤a󠅥a󠅦a󠅧a󠅨a󠅩a󠅪a󠅫a󠅬a󠅭a󠅮a󠅯a󠅰a󠅱a󠅲a󠅳a󠅴a󠅵a󠅶a󠅷a󠅸a󠅹a󠅺a󠅻a󠅼a󠅽a󠅾a󠅿a󠆀a󠆁a󠆂a󠆃a󠆄a󠆅a󠆆a󠆇a󠆈a󠆉a󠆊a󠆋a󠆌a󠆍a󠆎a󠆏a󠆐a󠆑a󠆒a󠆓a󠆔a󠆕a󠆖a󠆗a󠆘a󠆙a󠆚a󠆛a󠆜a󠆝a󠆞a󠆟a󠆠a󠆡a󠆢a󠆣a󠆤a󠆥a󠆦a󠆧a󠆨a󠆩a󠆪a󠆫a󠆬a󠆭a󠆮a󠆯a󠆰a󠆱a󠆲a󠆳a󠆴a󠆵a󠆶a󠆷a󠆸a󠆹a󠆺a󠆻a󠆼a󠆽a󠆾a󠆿a󠇀a󠇁a󠇂a󠇃a󠇄a󠇅a󠇆a󠇇a󠇈a󠇉a󠇊a󠇋a󠇌a󠇍a󠇎a󠇏a󠇐a󠇑a󠇒a󠇓a󠇔a󠇕a󠇖a󠇗a󠇘a󠇙a󠇚a󠇛a󠇜a󠇝a󠇞a󠇟a󠇠a󠇡a󠇢a󠇣a󠇤a󠇥a󠇦a󠇧a󠇨a󠇩a󠇪a󠇫a󠇬a󠇭a󠇮a󠇯
 +
 +a󠄁a󠄂a󠄃a󠄄a󠄅a󠄆a󠄇a󠄈a󠄉a󠄊a󠄋a󠄌a󠄍a󠄎a󠄏a󠄐a󠄑a󠄒a󠄓a󠄔a󠄕a󠄖a󠄗a󠄘a󠄙a󠄚a󠄛a󠄜a󠄝a󠄞a󠄟a󠄠a󠄡a󠄢a󠄣a󠄤a󠄥a󠄦a󠄧a󠄨a󠄩a󠄪a󠄫a󠄬a󠄭a󠄮a󠄯a󠄰a󠄱a󠄲a󠄳a󠄴a󠄵a󠄶a󠄷a󠄸a󠄹a󠄺a󠄻a󠄼a󠄽a󠄾a󠄿a󠅀a󠅁a󠅂a󠅃a󠅄a󠅅a󠅆a󠅇a󠅈a󠅉a󠅊a󠅋a󠅌a󠅍a󠅎a󠅏a󠅐a󠅑a󠅒a󠅓a󠅔a󠅕a󠅖a󠅗a󠅘a󠅙a󠅚a󠅛a󠅜a󠅝a󠅞a󠅟a󠅠a󠅡a󠅢a󠅣a󠅤a󠅥a󠅦a󠅧a󠅨a󠅩a󠅪a󠅫a󠅬a󠅭a󠅮a󠅯a󠅰a󠅱a󠅲a󠅳a󠅴a󠅵a󠅶a󠅷a󠅸a󠅹a󠅺a󠅻a󠅼a󠅽a󠅾a󠅿a󠆀a󠆁a󠆂a󠆃a󠆄a󠆅a󠆆a󠆇a󠆈a󠆉a󠆊a󠆋a󠆌a󠆍a󠆎a󠆏a󠆐a󠆑a󠆒a󠆓a󠆔a󠆕a󠆖a󠆗a󠆘a󠆙a󠆚a󠆛a󠆜a󠆝a󠆞a󠆟a󠆠a󠆡a󠆢a󠆣a󠆤a󠆥a󠆦a󠆧a󠆨a󠆩a󠆪a󠆫a󠆬a󠆭a󠆮a󠆯a󠆰a󠆱a󠆲a󠆳a󠆴a󠆵a󠆶a󠆷a󠆸a󠆹a󠆺a󠆻a󠆼a󠆽a󠆾a󠆿a󠇀a󠇁a󠇂a󠇃a󠇄a󠇅a󠇆a󠇇a󠇈a󠇉a󠇊a󠇋a󠇌a󠇍a󠇎a󠇏a󠇐a󠇑a󠇒a󠇓a󠇔a󠇕a󠇖a󠇗a󠇘a󠇙a󠇚a󠇛a󠇜a󠇝a󠇞a󠇟a󠇠a󠇡a󠇢a󠇣a󠇤a󠇥a󠇦a󠇧a󠇨a󠇩a󠇪a󠇫a󠇬a󠇭a󠇮a󠇯
 +
 +
 +
 +==== Un autre vecteur, les tags unicode ====
  
-=== Encore un autre vecteur, les tags unicode === 
 Comme le fait habilement remarquer la page : [[http://www.irongeek.com/i.php?page=security/unicode-steganography-homoglyph-encoder]], le bloc 0xE0000 - 0xE007F contient des «Tags», plutôt invisibles, voyez-vous même : Comme le fait habilement remarquer la page : [[http://www.irongeek.com/i.php?page=security/unicode-steganography-homoglyph-encoder]], le bloc 0xE0000 - 0xE007F contient des «Tags», plutôt invisibles, voyez-vous même :
  
Ligne 101: Ligne 134:
    󠀀 A󠀁A󠀂A󠀃A󠀄A󠀅A󠀆A󠀇A󠀈A󠀉A󠀊A󠀋A󠀌A󠀍A󠀎A󠀏A󠀐A󠀑A󠀒A󠀓A󠀔A󠀕A󠀖A󠀗A󠀘A󠀙A󠀚A󠀛A󠀜A󠀝A󠀞A󠀟A󠀠A󠀡A󠀢A󠀣A󠀤A󠀥A󠀦A󠀧A󠀨A󠀩A󠀪A󠀫A󠀬A󠀭A󠀮A󠀯A󠀰A󠀱A󠀲A󠀳A󠀴A󠀵A󠀶A󠀷A󠀸A󠀹A󠀺A󠀻A󠀼A󠀽A󠀾A󠀿A󠁀A󠁁A󠁂A󠁃A󠁄A󠁅A󠁆A󠁇A󠁈A󠁉A󠁊A󠁋A󠁌A󠁍A󠁎A󠁏A󠁐A󠁑A󠁒A󠁓A󠁔A󠁕A󠁖A󠁗A󠁘A󠁙A󠁚A󠁛A󠁜A󠁝A󠁞A󠁟A󠁠A󠁡A󠁢A󠁣A󠁤A󠁥A󠁦A󠁧A󠁨A󠁩A󠁪A󠁫A󠁬A󠁭A󠁮A󠁯A󠁰A󠁱A󠁲A󠁳A󠁴A󠁵A󠁶A󠁷A󠁸A󠁹A󠁺A󠁻A󠁼A󠁽A󠁾A󠁿    󠀀 A󠀁A󠀂A󠀃A󠀄A󠀅A󠀆A󠀇A󠀈A󠀉A󠀊A󠀋A󠀌A󠀍A󠀎A󠀏A󠀐A󠀑A󠀒A󠀓A󠀔A󠀕A󠀖A󠀗A󠀘A󠀙A󠀚A󠀛A󠀜A󠀝A󠀞A󠀟A󠀠A󠀡A󠀢A󠀣A󠀤A󠀥A󠀦A󠀧A󠀨A󠀩A󠀪A󠀫A󠀬A󠀭A󠀮A󠀯A󠀰A󠀱A󠀲A󠀳A󠀴A󠀵A󠀶A󠀷A󠀸A󠀹A󠀺A󠀻A󠀼A󠀽A󠀾A󠀿A󠁀A󠁁A󠁂A󠁃A󠁄A󠁅A󠁆A󠁇A󠁈A󠁉A󠁊A󠁋A󠁌A󠁍A󠁎A󠁏A󠁐A󠁑A󠁒A󠁓A󠁔A󠁕A󠁖A󠁗A󠁘A󠁙A󠁚A󠁛A󠁜A󠁝A󠁞A󠁟A󠁠A󠁡A󠁢A󠁣A󠁤A󠁥A󠁦A󠁧A󠁨A󠁩A󠁪A󠁫A󠁬A󠁭A󠁮A󠁯A󠁰A󠁱A󠁲A󠁳A󠁴A󠁵A󠁶A󠁷A󠁸A󠁹A󠁺A󠁻A󠁼A󠁽A󠁾A󠁿
          
-Enfin, ça dépend de la police, voyez vous même :  +Enfin, ça dépend de la police, voyez vous même : 
-python3 -c 'print("A".join([chr(i) for i in range(0xe0000,0xe0080)]))'󠀀A󠀁A󠀂A󠀃A󠀄A󠀅A󠀆A󠀇A󠀈A󠀉A󠀊A󠀋A󠀌A󠀍A󠀎A󠀏A󠀐A󠀑A󠀒A󠀓A󠀔A󠀕A󠀖A󠀗A󠀘A󠀙A󠀚A󠀛A󠀜A󠀝A󠀞A󠀟A󠀠A󠀡A󠀢A󠀣A󠀤A󠀥A󠀦A󠀧A󠀨A󠀩A󠀪A󠀫A󠀬A󠀭A󠀮A󠀯A󠀰A󠀱A󠀲A󠀳A󠀴A󠀵A󠀶A󠀷A󠀸A󠀹A󠀺A󠀻A󠀼A󠀽A󠀾A󠀿A󠁀A󠁁A󠁂A󠁃A󠁄A󠁅A󠁆A󠁇A󠁈A󠁉A󠁊A󠁋A󠁌A󠁍A󠁎A󠁏A󠁐A󠁑A󠁒A󠁓A󠁔A󠁕A󠁖A󠁗A󠁘A󠁙A󠁚A󠁛A󠁜A󠁝A󠁞A󠁟A󠁠A󠁡A󠁢A󠁣A󠁤A󠁥A󠁦A󠁧A󠁨A󠁩A󠁪A󠁫A󠁬A󠁭A󠁮A󠁯A󠁰A󠁱A󠁲A󠁳A󠁴A󠁵A󠁶A󠁷A󠁸A󠁹A󠁺A󠁻A󠁼A󠁽A󠁾A󠁿.+ 
 +󠀀A󠀁A󠀂A󠀃A󠀄A󠀅A󠀆A󠀇A󠀈A󠀉A󠀊A󠀋A󠀌A󠀍A󠀎A󠀏A󠀐A󠀑A󠀒A󠀓A󠀔A󠀕A󠀖A󠀗A󠀘A󠀙A󠀚A󠀛A󠀜A󠀝A󠀞A󠀟A󠀠A󠀡A󠀢A󠀣A󠀤A󠀥A󠀦A󠀧A󠀨A󠀩A󠀪A󠀫A󠀬A󠀭A󠀮A󠀯A󠀰A󠀱A󠀲A󠀳A󠀴A󠀵A󠀶A󠀷A󠀸A󠀹A󠀺A󠀻A󠀼A󠀽A󠀾A󠀿A󠁀A󠁁A󠁂A󠁃A󠁄A󠁅A󠁆A󠁇A󠁈A󠁉A󠁊A󠁋A󠁌A󠁍A󠁎A󠁏A󠁐A󠁑A󠁒A󠁓A󠁔A󠁕A󠁖A󠁗A󠁘A󠁙A󠁚A󠁛A󠁜A󠁝A󠁞A󠁟A󠁠A󠁡A󠁢A󠁣A󠁤A󠁥A󠁦A󠁧A󠁨A󠁩A󠁪A󠁫A󠁬A󠁭A󠁮A󠁯A󠁰A󠁱A󠁲A󠁳A󠁴A󠁵A󠁶A󠁷A󠁸A󠁹A󠁺A󠁻A󠁼A󠁽A󠁾A󠁿.
  
 Ceux-ci ne sont pas forcément affichés de la même manière en fonction des navigateurs. Ceux-ci ne sont pas forcément affichés de la même manière en fonction des navigateurs.
 On peut stocker 6 bits par tag avec le range ''[ 0xE0040 : 0xE0080 ]''. On peut stocker 6 bits par tag avec le range ''[ 0xE0040 : 0xE0080 ]''.
 +
 +==== Les caractères coréens Hangûl  ====
 +
 +Vous l'aurez peut-être remarqué, les caractères Hangûl sont organisés par morceaux : 쟪푫폁킟쵑즩왚쌄쁳뷛몥뛇담깘.
 +Il existe des méthodes d'organisation des caractères élémentaires pour en faire des gros (décrites ici : [[ https://en.wikipedia.org/wiki/Hangul#Morpho-syllabic_blocks ]] ), et certains caractères invisibles permettent de «remplir» la place manquante :
 +
 +    U+115F HANGUL CHOSEONG FILLER
 +    U+1160 HANGUL JUNGSEONG FILLER
 +    U+3164 HANGUL FILLER
 +    U+FFA0 HALFWIDTH HANGUL FILLER
 +
 +
 +Cela dit, l'utilisation de ceux-ci peut déclencher un affichage plus large que d'ordinaire des caractères, aussi ils ne sont pas très utiles.
 +
 +
 +==== Les caractères invisibles ====
 +
 +Invisibles par nature :
 +
 +    $ unicode invisible | grep ^U+
 +    U+2062 INVISIBLE TIMES
 +    U+2063 INVISIBLE SEPARATOR
 +    U+2064 INVISIBLE PLUS
 +
 +    $ python -c 'print ">"+"a".join([unichr(i) for i in [0x2062,0x2063,0x2064]])+"<"'
 +    >⁢a⁣a⁤<
 +
 +Dans une autre police : >⁢a⁣a⁤<
  
 ===== Unicode comme transport de données ===== ===== Unicode comme transport de données =====
unicode_comme_canal_steganographique.1394802303.txt.gz · Dernière modification: 2017/04/09 15:33 (modification externe)