|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- Description du programme "Passerelle chiffree" que l'on se propose de faire.
-
- 1°) La passerelle va permettre de faire l'intermédiare entre deux points du réseau.
- =================================
- -> chiffré avec C1 ->
- A <- chiffré avec C2 <- B
- =================================
- 2°) Elle va chiffrer tous les échanges :
- - chiffrement avec la cle C1 a l'entree A,
- - dechiffrement avec la cle C1 a la sortie B,
- - chiffrement avec la cle C2 a l'entree B,
- - dechiffrement avec la cle C2 a la sortie A,
- Pour simplifier C1 peut etre identique a C2
-
- Un exemple de passerelle :
- - la commande ssh avec l'option -L ou -R.
-
- supposons que nous ayons notre serveur a l'adresse 192.168.56.102.
- Quand on execute la commande suivante :
- $ ssh -f -N -L 2000:localhost:9999 invite@192.168.56.102
- on cree un tunnel entre localhost de notre machine sur le port 2000
- et le localhost de la machine a l'adresse 192.168.56.102 sur le port 9999.
-
- pass port_local nom_ou_IP_destination port_destination
- exemple dans le cas present
- $ pass 2000 192.168.56.102 9999
-
- 3°) Dans le code de la version 1 (attente de 5 sec et coupure) on a montre que la tache liaison est connectée au serveur distant et au client local.
- Elle sert donc de passerelle entre les deux !!
-
- Pour que notre passerelle soit universelle il ne faut pas a avoir d'à priori !
- Les donnees peuvent venir des deux cotes a n'importe quel moment !
-
- Chaque client local va provoquer la creation d'un processus fils de la
- passerelle qui lui est dedié.
- Et ce processus va créer deux threads :
- - un qui va faire suivre les donnees du CL vers SD,
- - l'autre qui va faire la meme chose dans l'autre sens (SD -> CL).
-
- S'appuyer sur les exemples de code de multithreading ecrits en fevrier 2019.
-
- 4°) Notre passerelle va s'installer en 2 etapes.
- Supposons que nous voulions acceder au serveur qui tourne sur la machine d'IP
- 192.168.56.102 MAIS qui attend sur le port 9999 de l'interface localhost
- interne.
- Il va donc falloir, un supposant que mon client est sur la machine d'IP
- 192.168.56.1 :
- a) établir une passerelle comme vu ci-dessus entre le port 2000 sur l'interface
- localhost de la machine 192.168.56.1 :
- Sur cette machine on fait :
- $ pass 2000 192.168.56.102 3000
- b) Sur la machine d'IP 192.168.56.102 on fait :
- $ pass 3000 localhost 9999
- c) Et evidemment le serveur est lance dans la machine 192.168.56.102 sur le port
- 9999 de l'interface localhost.
- d) et le client echange sur son interface localhost (port 2000).
-
- 5°) Comment va se faire le chiffrement ?
-
- Si on represente le montage que l'on a effectue avec ces 2 etapes :
- Sur 192.168.56.1 Sur 192.168.56.102
- ========================= ==========================
- 0.0.0.0 192.168.56.102 0.0.0.0 localhost
- Client <-> port=2000 port=3000 <-> port 3000 port 9999 <-> Serveur
- ========================= ==========================
- Le Client se connecte Le serveur n'echange
- sur son localhost QUE sur son localhost
-
- La partie gauche de la passerelle (sur la machine 56.1) va chiffrer ce qui sort
- sur l'interface distante et dechiffrer de qui rentre par cette insterface.
- Alors que la partie droite (sur la machine 56.102) le fait sur l'interface
- locale (c'est a dire le port 3000 !!).
- Il va donc falloir specifier dans commande si le chiffrement se fait sur
- l'interface locale ou distante !!!
-
- Donc la commande pass va s'enrichir d'un nouveau parametre : -l pour local
- ou -d pour distant.
- On aura donc dans notre exemple :
- a) établir une passerelle comme vu ci-dessus entre le port 2000 sur l'interface
- localhost de la machine 192.168.56.1 avec chiffrement distant :
- $ pass -d 2000 192.168.56.102 3000
- b) Sur la machine d'IP 192.168.56.102 avec chiffrement local :
- $ pass -l 3000 localhost 9999
-
- On pourra même avoir l'option -s : sans chiffrement !
-
- 6°) Exemple pratique :
- On veut accéder à la fois au serveur qui est sur le port 9999 et au serveur ssh qui est sur le port 22.
- a) du cote du client :
- $ pass -d 2000 192.168.56.102 3000
- $ pass -d 2001 192.168.56.102 3001
- b) du cote du serveur :
- $ pass -l 3000 localhost 9999
- $ pass -l 3001 localhost 22
-
- Pour se connecter au serveur 9999 :
- $ ./client localhost 2000
- $ ssh -p 2001 invite@localhost
-
- 7°) Methodes pour le chiffrement
-
- a) simple avec cle symetrique
- a.1) avec la fonction XOR
- Table de verite
- A B A xor B Axor0=A Axor1=Comp(A) A xor A
- 0 0 0 0 1 0
- 0 1 1 0 1 0
- 1 0 1 1 0 0
- 1 1 0 1 0 0
-
- A xor K = DC
- DC xor K = A xor K xor K = A xor 0 = A
-
- D'ou l'interet d'utiliser xor car c'est une fonction involutive.
-
- 8°) Principe détaillé avec une cle de longueur fixe :
-
- Cle : abcd
- Buf : xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- Xor : abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd
-
- Ce qui veut dire que le chiffrement dépend de la manière dont sont découpées les
- données !!
-
- Exemple :
- Data: azertyuiopqsdfghjklm
- 1er cas : on les envoie en 1 seul morceau :
- Data: azertyuiopqsdfghjklm
- Xor : abcdabcdabcdabcdabcd
- 2em cas : on les envoie en 2 morceaux :
- Data: azerty uiopqsdfghjklm
- Xor : abcdabcd abcdabcdabcdabcd
-
-
-
-
|