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. Le web décentralisé TOURAINE TECH 2018 @AntoineCailly acailly

  2. Il était une fois le web en 2017...

  3. Censure

  4. None
  5. https://ipfs.io/ipfs/QmT5NvUtoM5nWFfrQdVrFtvGfKFmG7AHE8P34isapyhCxX/wiki/Anasayfa.html

  6. https://ipfs.io/ipns/QmZxWEBJBVkGDGaKdYPQUXX4KC5TCWbvuR4iYZrTML8XCR/

  7. Suppression des données

  8. None
  9. http://www.climatecentral.org/news/trump-delete-climate-change-webpage-21091

  10. https://www.datarefuge.org/

  11. None
  12. https://datproject.org/explore

  13. Centralisation des services

  14. None
  15. Centralisation du trafic

  16. None
  17. Un point commun ?

  18. None
  19. Single point of failure

  20. Single point of control

  21. Une solution ?

  22. Décentralisé

  23. None
  24. https://joinmastodon.org/

  25. Distribué

  26. None
  27. None
  28. None
  29. Comment ca marche ? ?

  30. ?

  31. Bootstraping Comment on entre ?

  32. Node publique

  33. Multicast DNS (ZeroConf, Apple Bonjour)

  34. Démo Trouver une node publique Bitcoin

  35. None
  36. None
  37. foo.txt ?

  38. Discovery Où est Charlie ?

  39. Retour dans les années 2000...

  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
  41. Distributed Hash Table foo.txt ? foo.txt ? foo.txt ?

  42. Distributed Hash Table DHT ?

  43. 0 1 2 4 3 6 7 8 9 10

    11 12 13 14 15 5 Kademlia
  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.
  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
  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
  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
  48. qui possède foo.txt ? 0 1 2 4 3 6

    7 8 9 10 11 12 13 14 15 5
  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
  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
  51. 0 1 2 4 3 6 7 8 9 10

    11 12 13 14 15 5 On prend le plus près
  52. 0 1 2 4 3 6 7 8 9 10

    11 12 13 14 15 5
  53. 0 1 2 4 3 6 7 8 9 10

    11 12 13 14 15 5
  54. 0 1 2 4 3 6 7 8 9 10

    11 12 13 14 5 15
  55. 0 1 2 4 3 6 7 8 9 10

    11 12 13 14 15 5 Trouvé en O(log N)
  56. Démo Magnet link sur bittorent

  57. None
  58. None
  59. None
  60. None
  61. None
  62. None
  63. None
  64. None
  65. None
  66. None
  67. Et la blockchain dans tout ca ?

  68. tx tx tx tx tx tx tx tx tx tx

    Gossip protocol Chaque node se connecte à un grand nombre de nodes
  69. None
  70. None
  71. ? ? ? ? ? ? ? ? ? ?

    ? ? ?
  72. Transport email ? Téléphone ? Courrier ? Pigeon ?

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

    µTP WEB RTC ... CLIENT SERVEUR
  74. None
  75. ?

  76. A A’ diff ?

  77. Content addressed data C’est la bonne donnée ?

  78. Merkle “Tree” Merkle Directed Acyclic Graph

  79. Merkle “Tree” Merkle Directed Acyclic Graph

  80. DATA #1

  81. DATA #1 HASH #1

  82. DATA #1 HASH #1 ROOT HASH #1

  83. DATA #1 HASH #1 DATA #2 HASH #2 ROOT HASH

    #12 ça a changé !
  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é !
  85. #3 ?

  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
  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
  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
  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
  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
  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 !
  92. Utilisé ?

  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
  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
  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
  96. PIECE #1 PIECE HASH #1 PIECE #2 PIECE HASH #2

    TORRENT PIECE #3 PIECE HASH #3 PIECE #4 PIECE HASH #4
  97. CAT.JPG /FOO/CAT.JPG HASH INDEX.HTML /FOO/INDEX.HTML HASH / HASH PACKAGE.JSON /BAR/PACKAGE.JSON

    HASH APP.JS /BAR/APP.JS HASH /FOO/ HASH /BAR/ HASH
  98. https://ipld.io

  99. None
  100. 0 0

  101. 0 1 +1

  102. 1 +2 2

  103. 1 ? 2

  104. Conflict resolution Salt u! ca Comment ca ?va

  105. Conflict-free Replicated Data Types CRDT ?

  106. None
  107. 1 ? 2

  108. 1 2 2 1

  109. 1 2 2 1 ADD ADD 3 3

  110. 1 2 2 1 ADD ADD 3 3 Grow-only Counter

  111. 1 2 2 1 ADD ADD 2 0 -1 1

    -3 - ADD - ADD 3
  112. 1 2 2 1 ADD ADD 2 0 1 -

    ADD - ADD 3
  113. 1 2 2 1 ADD ADD -1 -1 1 -

    ADD - ADD 3 3 1
  114. 1 2 2 1 ADD ADD -1 -1 1 -

    ADD - ADD 3 3 1 Positive-Negative Counter
  115. 1 2 APPEND 2 Grow-only Set 2 3 1 3

    1 2 APPEND 2 2 3 1 3
  116. 1 2 APPEND 2 2-Phase Set 2 3 1 2

    APPEND 2 2 3 1 3 - APPEND 1 3 - APPEND 1 1
  117. 2-Phase Set + Timestamp = Last-Write-Wins-Element-Set

  118. OR-Set MC-Sets U-Set LWW-Register MV-Register Add-only monotonic DAG Add-Remove Partial

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

    Compromis sur les fonctionnalités (Ajout, Suppression, Modification…) ?
  120. Utilisé ?

  121. Bases de données distribuées

  122. Mais aussi... Chat (70M utilisateurs) Distributed Data News feed Sync.

    des localisations favorites
  123. Mais aussi...

  124. Démo à la fin de la présentation https://acailly.github.io/roti/

  125. Et si on quittait le monde des bisounours ?

  126. http://slideplayer.com/slide/9719156/ Sybil attack

  127. None
  128. None
  129. Réseau privé Réseau privé Réseau public

  130. NAT Traversal (Network Address Translation ) p*$# de proxy !

  131. Session Traversal Utilities for NAT (STUN)

  132. Adresse IP privée Adresse IP privée

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

    mon adresse IP publique ? Suis-je accessible de l’extérieur ?
  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
  135. 208.141.55.130:3255 Adresse publique du routeur Port unique pour chaque device

    derrière le routeur
  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
  137. Traversal Using Relays around NAT (TURN)

  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
  139. None
  140. Que nous réserve le futur ?

  141. None
  142. Impact écologique ? Arnaques ? Centralisation ? Scalabilité ?

  143. https://ipfs.io/ https://libp2p.io/

  144. https://ipfs.io/ https://libp2p.io/

  145. https://www.coindesk.com/257-million-filecoin-breaks-time-record-ico-funding/

  146. https://datproject.org/

  147. https://beakerbrowser.com/

  148. https://github.com/kewitz/dat-medium

  149. http://hex22.org/projects/ntain/

  150. https://github.com/louiscenter/hypercast

  151. https://github.com/beakerbrowser/fritter

  152. https://louis.center/p2p-social-networking/

  153. https://blog.mozilla.org/addons/2018/01/26/extensions-firefox-59/

  154. Mais aussi...

  155. http://scuttlebot.io/ https://unhosted.org/ https://remotestorage.io/ https://solid.mit.edu/ https://matrix.org/ https://ethereum.org/

  156. http://dci.mit.edu/decentralizedweb

  157. Démo Rotonde https://louis.center/p2p-social-networking/

  158. Démo ROTI en pair à pair https://acailly.github.io/roti/ @AntoineCailly acailly

  159. None