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

Le web décentralisé, comment ça marche ? (Breiz...

Le web décentralisé, comment ça marche ? (BreizhCamp 2019)

Vidéo : https://www.youtube.com/watch?v=e_0Go41pU2E

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.

Antoine CAILLY

March 20, 2019
Tweet

More Decks by Antoine CAILLY

Other Decks in Programming

Transcript

  1. ?

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

    foo.txt ? foo.txt ? foo.txt ? foo.txt ? foo.txt ? foo.txt ? Query Flooding
  3. 0 1 2 4 3 6 7 8 9 10

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

    11 12 13 14 15 5 GUID sur 4 bits 0 → 15 16 pairs max.
  5. 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
  6. 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
  7. 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
  8. qui possède foo.txt ? 0 1 2 4 3 6

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

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

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

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

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

    11 12 13 14 15 5 Trouvé en O(log N)
  16. tx tx tx tx tx tx tx tx tx tx

    Gossip protocol Chaque node se connecte à un grand nombre de nodes
  17. ?

  18. 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é !
  19. 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
  20. 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
  21. 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
  22. 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
  23. 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
  24. 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 !
  25. 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
  26. 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
  27. 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
  28. PIECE #1 PIECE HASH #1 PIECE #2 PIECE HASH #2

    TORRENT PIECE #3 PIECE HASH #3 PIECE #4 PIECE HASH #4
  29. 0 0

  30. 1 2 2 1 ADD ADD 2 0 -1 1

    -3 - ADD - ADD 3
  31. 1 2 2 1 ADD ADD -1 -1 1 -

    ADD - ADD 3 3 1
  32. 1 2 2 1 ADD ADD -1 -1 1 -

    ADD - ADD 3 3 1
  33. 1 2 2 1 ADD ADD -1 -1 1 -

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

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

    APPEND 2 2 3 1 3 - APPEND 1 3 - APPEND 1 1
  36. Compromis sur la performance (bande passante, perte de paquet, mémoire...)

    Compromis sur les fonctionnalités (Ajout, Suppression, Modification…) ?
  37. Adresse IP privée Adresse IP privée Serveur STUN Quelle est

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

    208.141.55.130:3255 Vous êtes 208.124.56.102:4562
  39. 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
  40. 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