Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Le web décentralisé, comment ça marche ? - Devoxx Paris 2018

Le web décentralisé, comment ça marche ? - Devoxx Paris 2018

(Vidéo : https://www.youtube.com/watch?v=rcY5wBNtGNU)

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

April 19, 2018
Tweet

Transcript

  1. #DevoxxFR Antoine Cailly 1 Le web décentralisé

  2. #DevoxxFR 2 Qui suis-je ? @AntoineCailly acailly

  3. Il était une fois le web en 2018...

  4. Censure

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

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

  8. Suppression des données

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

  11. https://www.datarefuge.org/

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

  14. Centralisation des services

  15. None
  16. et Google, Amazon, Microsoft, Apple, Uber...

  17. Centralisation du trafic

  18. None
  19. Un point commun ?

  20. None
  21. Single point of failure

  22. Single point of control

  23. Une solution ?

  24. Décentralisé

  25. None
  26. https://joinmastodon.org/

  27. Distribué

  28. None
  29. None
  30. None
  31. None
  32. Comment ça marche ?

  33. ?

  34. Bootstraping

  35. Node publique

  36. Multicast DNS (ZeroConf, Apple Bonjour)

  37. Démo Trouver une node publique Bitcoin

  38. None
  39. None
  40. foo.txt ?

  41. Discovery

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

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

    foo.txt ? foo.txt ? foo.txt ? foo.txt ? foo.txt ? foo.txt ? Query Flooding
  44. Distributed Hash Table foo.txt ? foo.txt ? foo.txt ?

  45. Distributed Hash Table DHT ?

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

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

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

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

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

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

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

    11 12 13 14 15 5 Trouvé en O(log N)
  59. Démo Les magnet links sur Bittorrent

  60. None
  61. None
  62. None
  63. None
  64. None
  65. None
  66. None
  67. None
  68. None
  69. None
  70. Peer to Peer != Privé

  71. Et la blockchain dans tout ca ?

  72. tx tx tx tx tx tx tx tx tx tx

    Gossip protocol Chaque node se connecte à un grand nombre de nodes
  73. None
  74. None
  75. ? ? ? ? ? ? ? ? ? ?

    ? ? ?
  76. Transport

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

    µTP WEB RTC ... CLIENT SERVEUR
  78. None
  79. ?

  80. A A’ diff ?

  81. Data integrity

  82. Merkle “Tree” Merkle Directed Acyclic Graph

  83. Merkle “Tree” Merkle Directed Acyclic Graph

  84. DATA #1

  85. DATA #1 HASH #1

  86. DATA #1 HASH #1 ROOT HASH #1

  87. DATA #1 HASH #1 DATA #2 HASH #2 ROOT HASH

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

  90. 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
  91. 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
  92. 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
  93. 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
  94. 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
  95. 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 !
  96. Utilisé ?

  97. 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
  98. 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
  99. 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
  100. PIECE #1 PIECE HASH #1 PIECE #2 PIECE HASH #2

    TORRENT PIECE #3 PIECE HASH #3 PIECE #4 PIECE HASH #4
  101. 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
  102. https://ipld.io

  103. None
  104. 0 0

  105. 0 1 +1

  106. 1 +2 2

  107. 1 ? 2

  108. Conflict resolution

  109. Conflict-free Replicated Data Types CRDT ?

  110. None
  111. 1 ? 2

  112. 1 2 2 1

  113. 1 2 2 1 ADD ADD 3 3

  114. 1 2 2 1 ADD ADD 3 3

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

  116. 1 2 2 1 ADD ADD 3 3 -1

  117. 1 2 2 1 ADD ADD 2 3 -1 1

    - ADD
  118. 1 2 2 1 ADD ADD 2 0 -1 1

    -3 - ADD - ADD 3
  119. 1 2 2 1 ADD ADD 2 0 1 -

    ADD - ADD 3
  120. 1 2 2 1 ADD ADD -1 -1 1 -

    ADD - ADD 3 3 1
  121. 1 2 2 1 ADD ADD -1 -1 1 -

    ADD - ADD 3 3 1
  122. 1 2 2 1 ADD ADD -1 -1 1 -

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

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

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

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

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

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

  129. Bases de données distribuées

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

    des localisations favorites
  131. Mais aussi...

  132. Démo à la fin... https://acailly.github.io/roti/

  133. Et si on quittait le monde des bisounours ?

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

  135. None
  136. None
  137. Réseau privé Réseau privé Réseau public

  138. NAT Traversal

  139. Session Traversal Utilities for NAT (STUN)

  140. Adresse IP privée Adresse IP privée

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

    mon adresse IP publique ? Suis-je accessible de l’extérieur ?
  142. Adresse IP privée Adresse IP privée Serveur STUN Vous êtes

    208.141.55.130:3255 Vous êtes 208.124.56.102:4562
  143. 208.141.55.130:3255 Adresse publique du routeur Port unique pour chaque device

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

  146. 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
  147. None
  148. Que nous réserve le futur ?

  149. None
  150. Impact écologique ? Arnaques ? Centralisation ? Scalabilité ?

  151. https://ipfs.io/ https://libp2p.io/

  152. https://ipfs.io/ https://libp2p.io/

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

  154. https://datproject.org/

  155. https://beakerbrowser.com/

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

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

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

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

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

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

  162. Mais aussi...

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

  164. None
  165. Démo Rotonde, twitter peer to peer https://louis.center/p2p-social-networking/

  166. Démo ROTI en peer to peer https://acailly.github.io/roti/

  167. Merci