Programme passerelle dans le cadre du projet Prosecco
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

passerelle.txt 5.1 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. Description du programme "Passerelle chiffree" que l'on se propose de faire.
  2. 1°) La passerelle va permettre de faire l'intermédiare entre deux points du réseau.
  3. =================================
  4. -> chiffré avec C1 ->
  5. A <- chiffré avec C2 <- B
  6. =================================
  7. 2°) Elle va chiffrer tous les échanges :
  8. - chiffrement avec la cle C1 a l'entree A,
  9. - dechiffrement avec la cle C1 a la sortie B,
  10. - chiffrement avec la cle C2 a l'entree B,
  11. - dechiffrement avec la cle C2 a la sortie A,
  12. Pour simplifier C1 peut etre identique a C2
  13. Un exemple de passerelle :
  14. - la commande ssh avec l'option -L ou -R.
  15. supposons que nous ayons notre serveur a l'adresse 192.168.56.102.
  16. Quand on execute la commande suivante :
  17. $ ssh -f -N -L 2000:localhost:9999 invite@192.168.56.102
  18. on cree un tunnel entre localhost de notre machine sur le port 2000
  19. et le localhost de la machine a l'adresse 192.168.56.102 sur le port 9999.
  20. pass port_local nom_ou_IP_destination port_destination
  21. exemple dans le cas present
  22. $ pass 2000 192.168.56.102 9999
  23. 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.
  24. Elle sert donc de passerelle entre les deux !!
  25. Pour que notre passerelle soit universelle il ne faut pas a avoir d'à priori !
  26. Les donnees peuvent venir des deux cotes a n'importe quel moment !
  27. Chaque client local va provoquer la creation d'un processus fils de la
  28. passerelle qui lui est dedié.
  29. Et ce processus va créer deux threads :
  30. - un qui va faire suivre les donnees du CL vers SD,
  31. - l'autre qui va faire la meme chose dans l'autre sens (SD -> CL).
  32. S'appuyer sur les exemples de code de multithreading ecrits en fevrier 2019.
  33. 4°) Notre passerelle va s'installer en 2 etapes.
  34. Supposons que nous voulions acceder au serveur qui tourne sur la machine d'IP
  35. 192.168.56.102 MAIS qui attend sur le port 9999 de l'interface localhost
  36. interne.
  37. Il va donc falloir, un supposant que mon client est sur la machine d'IP
  38. 192.168.56.1 :
  39. a) établir une passerelle comme vu ci-dessus entre le port 2000 sur l'interface
  40. localhost de la machine 192.168.56.1 :
  41. Sur cette machine on fait :
  42. $ pass 2000 192.168.56.102 3000
  43. b) Sur la machine d'IP 192.168.56.102 on fait :
  44. $ pass 3000 localhost 9999
  45. c) Et evidemment le serveur est lance dans la machine 192.168.56.102 sur le port
  46. 9999 de l'interface localhost.
  47. d) et le client echange sur son interface localhost (port 2000).
  48. 5°) Comment va se faire le chiffrement ?
  49. Si on represente le montage que l'on a effectue avec ces 2 etapes :
  50. Sur 192.168.56.1 Sur 192.168.56.102
  51. ========================= ==========================
  52. 0.0.0.0 192.168.56.102 0.0.0.0 localhost
  53. Client <-> port=2000 port=3000 <-> port 3000 port 9999 <-> Serveur
  54. ========================= ==========================
  55. Le Client se connecte Le serveur n'echange
  56. sur son localhost QUE sur son localhost
  57. La partie gauche de la passerelle (sur la machine 56.1) va chiffrer ce qui sort
  58. sur l'interface distante et dechiffrer de qui rentre par cette insterface.
  59. Alors que la partie droite (sur la machine 56.102) le fait sur l'interface
  60. locale (c'est a dire le port 3000 !!).
  61. Il va donc falloir specifier dans commande si le chiffrement se fait sur
  62. l'interface locale ou distante !!!
  63. Donc la commande pass va s'enrichir d'un nouveau parametre : -l pour local
  64. ou -d pour distant.
  65. On aura donc dans notre exemple :
  66. a) établir une passerelle comme vu ci-dessus entre le port 2000 sur l'interface
  67. localhost de la machine 192.168.56.1 avec chiffrement distant :
  68. $ pass -d 2000 192.168.56.102 3000
  69. b) Sur la machine d'IP 192.168.56.102 avec chiffrement local :
  70. $ pass -l 3000 localhost 9999
  71. On pourra même avoir l'option -s : sans chiffrement !
  72. 6°) Exemple pratique :
  73. On veut accéder à la fois au serveur qui est sur le port 9999 et au serveur ssh qui est sur le port 22.
  74. a) du cote du client :
  75. $ pass -d 2000 192.168.56.102 3000
  76. $ pass -d 2001 192.168.56.102 3001
  77. b) du cote du serveur :
  78. $ pass -l 3000 localhost 9999
  79. $ pass -l 3001 localhost 22
  80. Pour se connecter au serveur 9999 :
  81. $ ./client localhost 2000
  82. $ ssh -p 2001 invite@localhost
  83. 7°) Methodes pour le chiffrement
  84. a) simple avec cle symetrique
  85. a.1) avec la fonction XOR
  86. Table de verite
  87. A B A xor B Axor0=A Axor1=Comp(A) A xor A
  88. 0 0 0 0 1 0
  89. 0 1 1 0 1 0
  90. 1 0 1 1 0 0
  91. 1 1 0 1 0 0
  92. A xor K = DC
  93. DC xor K = A xor K xor K = A xor 0 = A
  94. D'ou l'interet d'utiliser xor car c'est une fonction involutive.
  95. 8°) Principe détaillé avec une cle de longueur fixe :
  96. Cle : abcd
  97. Buf : xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  98. Xor : abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd
  99. Ce qui veut dire que le chiffrement dépend de la manière dont sont découpées les
  100. données !!
  101. Exemple :
  102. Data: azertyuiopqsdfghjklm
  103. 1er cas : on les envoie en 1 seul morceau :
  104. Data: azertyuiopqsdfghjklm
  105. Xor : abcdabcdabcdabcdabcd
  106. 2em cas : on les envoie en 2 morceaux :
  107. Data: azerty uiopqsdfghjklm
  108. Xor : abcdabcd abcdabcdabcdabcd