Le web décentralisé, comment ça marche ? - Touraine Tech 2018

Le web décentralisé, comment ça marche ? - Touraine Tech 2018

Aujourd’hui l’inquiétude monte devant l’emprise qu’ont certaines entreprises ou gouvernement sur notre utilisation d’internet.

Face à cette situation, beaucoup de personnes prônent la décentralisation du web un peu à la manière de Mastodon face à Twitter, néanmoins les concepts nécessaires sont assez éloignés des traditionnelles application client-serveur qui restent aujourd’hui majoritaires.

Que faut il pour décentraliser le web ? C’est ce que je vais tenter de vous présenter simplement et avec des exemples, tout en m’attardant sur certains mécanismes un peu plus techniques (DHT, Merkle-trees, CRDT...) que vous utilisez peut être déjà sans le savoir.

Je parlerais également de quelques initiatives qui commencent à faire le buzz et qui pourraient bouleverser nos usages à l’avenir.

De3b2ef28385b01a1b44a9debc66dd6e?s=128

Antoine CAILLY

February 23, 2018
Tweet

Transcript

  1. 3.
  2. 4.
  3. 8.
  4. 11.
  5. 14.
  6. 16.
  7. 18.
  8. 23.
  9. 26.
  10. 27.
  11. 28.
  12. 30.

    ?

  13. 35.
  14. 36.
  15. 37.
  16. 40.

    foo.txt ? foo.txt ? foo.txt ? foo.txt ? foo.txt ?

    foo.txt ? foo.txt ? foo.txt ? foo.txt ? foo.txt ? foo.txt ? Query Flooding
  17. 43.

    0 1 2 4 3 6 7 8 9 10

    11 12 13 14 15 5 Kademlia
  18. 44.

    0 1 2 4 3 6 7 8 9 10

    11 12 13 14 15 5 GUID sur 4 bits 0 → 15 15 pairs max.
  19. 45.

    0 1 2 4 3 6 7 8 9 10

    11 12 13 14 15 5 Chaque pair référence 4 autres pairs à une distance 2N, N: 0 → 4
  20. 46.

    0 1 2 4 3 6 7 9 10 11

    12 13 14 15 5 Si une node est absente du réseau, on prend le GUID au dessus
  21. 47.

    La fonction de distance utilisée est XOR (simplicité, symétrie et

    unicité) 0 1 2 4 3 6 7 8 9 10 11 12 13 14 15 5
  22. 48.

    qui possède foo.txt ? 0 1 2 4 3 6

    7 8 9 10 11 12 13 14 15 5
  23. 49.

    qui possède foo.txt ? 0 1 2 4 3 6

    7 8 9 10 11 12 13 14 15 5 infohash(foo.txt) = 15
  24. 50.

    qui possède foo.txt ? il sait ! 0 1 2

    4 3 6 7 8 9 10 11 12 13 14 15 5 infohash(foo.txt) = 15
  25. 51.

    0 1 2 4 3 6 7 8 9 10

    11 12 13 14 15 5 On prend le plus près
  26. 52.

    0 1 2 4 3 6 7 8 9 10

    11 12 13 14 15 5
  27. 53.

    0 1 2 4 3 6 7 8 9 10

    11 12 13 14 15 5
  28. 54.

    0 1 2 4 3 6 7 8 9 10

    11 12 13 14 5 15
  29. 55.

    0 1 2 4 3 6 7 8 9 10

    11 12 13 14 15 5 Trouvé en O(log N)
  30. 57.
  31. 58.
  32. 59.
  33. 60.
  34. 61.
  35. 62.
  36. 63.
  37. 64.
  38. 65.
  39. 66.
  40. 68.

    tx tx tx tx tx tx tx tx tx tx

    Gossip protocol Chaque node se connecte à un grand nombre de nodes
  41. 69.
  42. 70.
  43. 73.

    WEB RTC BLUETOOTH ... HTTP WEB SOCKET ... UDP TCP

    µTP WEB RTC ... CLIENT SERVEUR
  44. 74.
  45. 75.

    ?

  46. 80.
  47. 84.

    DATA #1 HASH #1 DATA #2 HASH #2 ROOT HASH

    #1234 DATA #3 HASH #3 DATA #4 HASH #4 HASH #12 HASH #34 ça a encore changé !
  48. 85.
  49. 86.

    DATA #1 HASH #1 DATA #2 HASH #2 DATA #3

    HASH #3 DATA #4 HASH #4 HASH #12 HASH #34 je connais le root hash de source sûre ROOT HASH #1234
  50. 87.

    DATA #1 HASH #1 DATA #2 HASH #2 ROOT HASH

    #3 DATA #3 HASH #3 DATA #4 HASH #4 HASH #12 HASH #34 voilà la donnée demandée ROOT HASH #1234
  51. 88.

    DATA #1 HASH #1 DATA #2 HASH #2 ROOT HASH

    #3 DATA #3 HASH #3 DATA #4 HASH #4 HASH #12 HASH #34 ROOT HASH #1234 je vérifie
  52. 89.

    DATA #1 HASH #1 DATA #2 HASH #2 ROOT HASH

    #3 DATA #3 HASH #3 DATA #4 HASH #4 HASH #12 HASH #34 ROOT HASH #1234 je vérifie
  53. 90.

    DATA #1 HASH #1 DATA #2 HASH #2 ROOT HASH

    #3 DATA #3 HASH #3 DATA #4 HASH #4 HASH #12 HASH #34 ROOT HASH #1234 je vérifie
  54. 91.

    DATA #1 HASH #1 DATA #2 HASH #2 ROOT HASH

    #3 DATA #3 HASH #3 DATA #4 HASH #4 HASH #12 HASH #34 ROOT HASH #1234 ok !
  55. 93.

    DATA #1 BLOB HASH #1 DATA #2 BLOB HASH #2

    COMMIT HASH DATA #3 BLOB HASH #3 DATA #4 BLOB HASH #4 TREE HASH #12 TREE HASH #34
  56. 94.

    TRANSACTION #1 HASH #1 TRANSACTION #2 HASH #2 ROOT HASH

    TRANSACTION #3 HASH #3 TRANSACTION #4 HASH #4 HASH #12 HASH #34 PREVIOUS HASH NONCE BLOCK HEADER
  57. 95.

    TRANSACTION #1 HASH #1 TRANSACTION #2 HASH #2 ROOT HASH

    TRANSACTION #3 HASH #3 TRANSACTION #4 HASH #4 HASH #12 HASH #34 PREVIOUS HASH NONCE BLOCK HEADER
  58. 96.

    PIECE #1 PIECE HASH #1 PIECE #2 PIECE HASH #2

    TORRENT PIECE #3 PIECE HASH #3 PIECE #4 PIECE HASH #4
  59. 99.
  60. 100.

    0 0

  61. 101.
  62. 102.
  63. 103.
  64. 106.
  65. 107.
  66. 108.
  67. 111.

    1 2 2 1 ADD ADD 2 0 -1 1

    -3 - ADD - ADD 3
  68. 112.
  69. 113.

    1 2 2 1 ADD ADD -1 -1 1 -

    ADD - ADD 3 3 1
  70. 114.

    1 2 2 1 ADD ADD -1 -1 1 -

    ADD - ADD 3 3 1 Positive-Negative Counter
  71. 115.

    1 2 APPEND 2 Grow-only Set 2 3 1 3

    1 2 APPEND 2 2 3 1 3
  72. 116.

    1 2 APPEND 2 2-Phase Set 2 3 1 2

    APPEND 2 2 3 1 3 - APPEND 1 3 - APPEND 1 1
  73. 119.

    Compromis sur la performance (bande passante, perte de paquet, mémoire...)

    Compromis sur les fonctionnalités (Ajout, Suppression, Modification…) ?
  74. 120.
  75. 127.
  76. 128.
  77. 133.

    Adresse IP privée Adresse IP privée Serveur STUN Quelle est

    mon adresse IP publique ? Suis-je accessible de l’extérieur ?
  78. 134.

    Adresse IP privée Adresse IP privée Serveur STUN Vous êtes

    208.141.55.130:3255 Vous êtes 208.124.56.102:4562
  79. 136.

    Adresse IP privée Adresse IP privée Serveur STUN Vous êtes

    208.141.55.130:3255 Derrière un NAT symétrique Vous êtes 208.124.56.102:4562 Derrière un NAT symétrique Qui n’accepte que les connexions entrante s’il y a une connexion sortante sur ce pair
  80. 138.

    Adresse IP privée Adresse IP privée Serveur STUN Vous êtes

    208.141.55.130:3255 Derrière un NAT symétrique Vous êtes 208.124.56.102:4562 Derrière un NAT symétrique Serveur TURN
  81. 139.
  82. 141.
  83. 159.