Journal Namecoin : DNS décentralisé ou BDD clé/valeur en p2p ?

Posté par . Licence CC by-sa
Tags :
11
5
juin
2012

Sommaire

Namecoin

Le logiciel Namecoin a été créé à l'origine pour répondre au besoin de fournir des noms de domaine non censurables. Les données sont stockées sous forme de clé/valeur, répliquées en p2p, en en faisant de ce fait un logiciel utilisable pour d'autres besoins que les DNS (comme un gestionnaire d'identité numérique, un horodatage de documents, etc. Voir plus bas).

Pour éviter la censure, Namecoin, qui est un fork du logiciel Bitcoin, utilise un chiffrage avec clés privées/publiques. Chaque enregistrement créé dans le logiciel est signé avec une clé privée de son propriétaire (de manière transparente), autorisant seulement son propriétaire à modifier la valeur.

Bitcoin

Le logiciel Bitcoin est une monnaie électronique en p2p qui utilise un système complexe, utile au fonctionnement du logiciel Namecoin. Le logiciel Namecoin a donc sa propre monnaie qui fonctionne selon les mêmes principes que Bitcoin.

Les besoins couverts

Voici les besoins auxquels répond Namecoin :

Empêcher le spam

Grâce à sa monnaie intégrée, chaque enregistrement peut être payant (une somme modique), pour éviter qu'une personne crée 1 millions d'enregistrements.

Empêcher un contrôle central

Il n'y a pas une seule personne qui décide quel enregistrement accepter, mais des milliers de personnes. Pour qu'un enregistrement soit accepté par le réseau, il doit être intégré dans ce qui est appelé un bloc.
Un bloc contient un hash du précédent bloc + la liste des nouvelles transactions + un hash de ces transactions et d'un nombre "aléatoire". Ce dernier hash doit correspondre à certains critères pour être considéré comme valide par un autre nœud du réseau. En faisant varier le nombre aléatoire et en testant des millions de combinaisons, un bloc correspondant aux critères va être trouvé, de manière aléatoire, par un des nœuds du réseau (ce hash est appelé "proof-of-work").

Empêcher les conflits d'enregistrement

Grâce à la présence du hash du précédent bloc dans le bloc en cours, il se forme une chaîne de hash qui définit un ordre d'arrivée des transactions. Il est ainsi aisé de refuser une transaction pour une clé déjà existante dans un bloc précédent.

Être le seul maître de ses enregistrements

Chaque clé étant unique, la règle du premier arrivé premier servi s'applique pour les nouveaux enregistrements. Pour mettre à jour un enregistrement, il faut prouver que l'on possède le précédent. Cela se fait de manière transparente grâce au système de clé privée/publique.

Ne pas dépendre d'un tiers de confiance

Toutes les données sont repliquées en local et vérifiables, chaque requête vers la bdd est ensuite faite en local.

Les différentes utilisations de Namecoin

Vous me direz que c'est bien beau tout ça, mais que peut-on faire avec et comment ça marche concrètement ?

Les noms de domaines

Description

La première utilisation du logiciel Namecoin ainsi que la raison de sa création est pour l'enregistrement de noms de domaines. Le premier nom de domaine de premier niveau créé est le .bit.

Spécification

La clé correspond, en gros, au nom de domaine, et la valeur contient les données d'un nom de domaine formatées selon la spécification suivante : http://dot-bit.org/Namespace:Domain_names_v2.0

Exemple pour le domaine dot-bit.bit (le préfixe est "d/" pour les noms de domaine en .bit) :
$ namecoind name_show d/dot-bit
{
"name" : "d/dot-bit",
"value" : "{\"info\":{\"description\":\"Dot-BIT Project - Official Website\",\"registrar\":\"http://register.dot-bit.org\"},\"ns\":[\"ns0.web-sweet-web.net\",\"ns1.web-sweet-web.net\"],\"email\":\"register@dot-bit.org\"}"
}

De façon un peu plus lisible :
(
'info' =>
(
'description' => 'Dot-BIT Project - Official Website',
'registrar' => 'http://register.dot-bit.org',
),
'ns' =>
(
0 => 'ns0.web-sweet-web.net',
1 => 'ns1.web-sweet-web.net',
),
'email' => 'register@dot-bit.org',
)

Cette spécification décrit aussi comment associer une url tor ou i2p à un nom de domaine .bit. Il peut donc être utilisé pour avoir des noms de domaine tout beau pour ces 2 logiciels, sans faire une requête vers l'extérieur. Ceci étant bien sûr non compatible avec un serveur dns, il faut utiliser un logiciel qui fait proxy. Cet aspect a pour l'instant assez peu été développé (même si fonctionnel en partie), mais pour les curieux, voir nmcsocks, http://dot-bit.org/DNS_and_Proxy_softwares http://dot-bit.org/forum/viewtopic.php?f=9&t=349 http://dot-bit.org/forum/viewtopic.php?f=5&t=291.

Comment naviguer sur des sites en .bit

Il existe plusieurs solutions simples, mais qui dépendent d'un serveur tiers :
http://dot-bit.org/How_To_Browse_Bit_Domains

Pour les solutions qui utilisent directement la base de données sans passer par un tiers, il y a :
- NamecoinToBind : il convertit les entrées de la BDD dans le format utilisé par le serveur DNS bind. Vous pouvez donc faire votre propre serveur DNS résolvant aussi les .bit
- nmcsocks : fait à la fois serveur DNS et proxy, directement connecté à Namecoin. Ce logiciel n'est malheureusement plus maintenu par son auteur (il est codé en nodejs, un volontaire ?)

Gestion de votre identité numérique

Un brouillon est en cours de finalisation pour gérer son identité numérique. Cela permet d'associer des informations à un "alias" : adresse email, jabber/xmpp, adresse bitcoin/namecoin, clé gpg, etc.

Voici la spécification actuelle : http://dot-bit.org/Namespace:Identity

Chaque application définit le format des données qu'il est possible et utile d'enregistrer. Ainsi, le champ "gpg" pourra contenir une empreinte de clé ainsi qu'un lien vers la clé publique complète alors que le champ xmpp contiendra une adresse jabber.
Une autre application peut ainsi récupérer les données associées à un id dont elle a besoin en lançant la commande suivante :

Un exemple d'enregistrement (formaté pour la lisibilité) :
$ namecoind name_show id/khal
{
"nick" : "Khalahan",
"email" : "khaldot-bit.org",
"xmpp" : "khalsrv0.eu",
"bitcoin" : "1J3EKMfboca3SESWGrQKESsG1MA9yK6vN4",
"namecoin" : "N2pGWAh65TWpWmEFrFssRQkQubbczJSKi9"
}

Horodatage de documents

Chaque bloc possède un timestamp. If suffit donc de publier le hash d'un document et qu'il soit accepté dans un bloc pour que cela suffise à prouver l'existance d'un document à un date donnée.

Autres utilisations possibles

Voici quelques idées, à compléter, d'utilisations possible d'une base de données décentralisée et répliquée :
http://dot-bit.org/Use_cases

Quelques chiffres

  • Bitcoin existe depuis 5 ans
  • Namecoin existe depuis 1 an
  • 67000 enregistrements dans la bdd
  • 64000 noms de domaines enregistrés dans la bdd
  • 5500 noms de domaines convertis par NamecoinToBind

Développement

Le logiciel Namecoin est codé en c++, NamecoinToBind en php et nmcsocks en nodejs.

Roadmap

  • L'objectif à moyen terme est de fournir une solution à la fois simple et sans tiers de confiance, un peu comme nmcsocks, qui puisse répondre aux différentes utilisations de Namecoin (cli + gui).
  • Mettre en avant l'utilité pour Tor et I2P
  • Développer et promouvoir les différentes utilisations
  • Développer une GUI pour faciliter la création des enregistrements
  • Faire un beau site web :p

Des volontaires pour filer un coup de main ?

Site : http://dot-bit.org/
Forum : http://dot-bit.org/forum/
Dépôt : https://github.com/khalahan/namecoin

  • # saga

    Posté par (page perso) . Évalué à 3.

    et pour une saga des épisodes bitcoin, voir le tag :)

  • # Paiement modique... mais à qui?

    Posté par . Évalué à 10.

    Une somme modique permettrait effectivement qu'un abruti n'enregistre la moitié des combinaisons de caractères possibles.
    Mais à qui ira l'argent? Qui en décidera?

    De plus, on a déjà des cyber-squatteurs, en quoi auront-ils moins de prise sur ce système que sur l'actuel (j'ai vu qu'un Chinois a enregistré mon nom de famille en .com, et si on essaie de le traduire en Chinois mon nom de famille, il fait peur!!)?

    Si quelqu'un enregistre un nom de domaine "khalaha-fricote-avec-des-chèvres.bit", quel recours auras-tu? À qui t'adresser en cas de problème?

    Ensuite, on parle de "milliers de personnes" pour décider si un nom peut être enregistré ou pas. Mais encore?
    Si une grosse boite demande à tous ses employés de créer un nom de domaine, elle pourra ensuite faire approuver ce qu'elle veut via ses employés.
    Maintenant remplace grosse boite par extrémiste religieux, gourou de secte, dictateur, et tu verras où je voulais t'emmener…

    Bitcoin reposait sur une complexité croissante à augmenter "le total". Est-ce que c'est le cas ici aussi? Si j'enregistre mes domaines maintenant, c'est simple. Si j'attends 1an, il faudra 2 semaines de calcul pour ajouter le nom?

    • [^] # Re: Paiement modique... mais à qui?

      Posté par . Évalué à 2.

      Le paiement se fait à soi-même. Lors de la mise à jour de ton domaine, tu devras ne pas avoir dépensé ce petit sou pour que ton opération soit acceptée par le réseau.

      Le problème des cyber-squatteurs est le même qu'avec les noms de domaine traditionnels.

      Si quelqu'un a envie d'enregistrer un domaine de ce genre, rien ne peut l'en empêcher, c'est même le but du système. Si quelqu'un met en place un serveur DNS public à partir des données de Namecoin, là, tu peux intervenir de manière "classique" (demande de retrait polie, plainte :p)

      Pour le "millier de personnes" qui décide, je me suis mal exprimé. Si la transaction créée suit les règles du réseau (prix normal, taille et format des données normales, etc), alors elle sera acceptée par tout le monde. Il n'y a pas de notion de masse qui peut voter pour ou contre une transaction. Vu que tu as l'air de connaître Bitcoin, pour forcer des ajouts dans Bitcoin ou Namecoin, il faut avoir + de 50% de la puissance totale du réseau, ce qui signifie avoir autant de puissance de calcul que la puissance actuelle totale.

      Pour qu'un block soit accepté par le réseau, il faut que son hash dépasse la difficulté du moment, calculée tous les ~2000 blocks. Si la difficulté augmente, c'est parce que plus de monde génère des blocs, ce qui a pour effet que les blocs seront trouvés plus vite qu'1 par 10mn. La difficulté s'adapte pour qu'un bloc soit trouvable en 10mn (ça augmente ou ça baisse).
      Étant donné le prix d'un nom de domaine, il te faudra environ 1 journée. Dans 20 ans il te faudra peut-être 1 mois, qui sait, mais il est aussi possible de changer le prix moyennant une mise à jour de tout le monde (donc à ne pas faire à la légère :p). Il est possible de faire ne sorte que le changement s'applique à partir du block XXX, ce qui permet d'annoncer le changement par exemple 2 ans avant qu'il soit effectif, ce qui laisse 2 ans aux gens pour mettre à jour.

    • [^] # Re: Paiement modique... mais à qui?

      Posté par (page perso) . Évalué à 2.

      Bitcoin reposait sur une complexité croissante à augmenter "le total". Est-ce que c'est le cas ici aussi? Si j'enregistre mes domaines maintenant, c'est simple. Si j'attends 1an, il faudra 2 semaines de calcul pour ajouter le nom?

      Je lis ici : http://dot-bit.org/HowToGetNamecoins#Mining

      Namecoins are mined in the same method as bitcoins.

      La complexité doit donc augmenter.

      PS : je n'ai pas réussi à faire deux citations à la suite sans qu'elles fusionnent, c'est frustrant.

      Il existe deux catégories de gens : ceux qui divisent les gens en deux catégories et les autres.

      • [^] # Re: Paiement modique... mais à qui?

        Posté par . Évalué à 2.

        Protip: ajoute un truc est transformé en vide par markdown entre les 2 citations, comme par exemple :

        > foo
        
        # #
        
        > bar
        
        

        Il y a aussi la méthode "nbsp" mais elle est moche parce que markdown génère un paragraphe vide, pas juste du vide.

  • # Tech ?

    Posté par . Évalué à 5.

    Y'a une spec quelque part ? Y'a beaucoup de blahblah mais pas beaucoup de matière pour se faire une idée du système, de son fonctionnement, de sa robustesse et de son interaction avec le reste d'internet ?

  • # Lapin compris

    Posté par (page perso) . Évalué à 5.

    C'est curieux, j'ai lu plusieurs fois cette longue description, et je n'ai pas trouvé la réponse à la première question qui me vient à l'esprit : quelle tête ça a, un nom de domaine Namecoin ?

    • [^] # Re: Lapin compris

      Posté par . Évalué à -2.

      $ namecoind name_show d/dot-bit
      {
        "name" : "d/dot-bit",
        "value" : "{\"info\":{\"description\":\"Dot-BIT Project - Official Website\",\"registrar\":\"http://register.dot-bit.org\"},\"ns\":[\"ns0.web-sweet-web.net\",\"ns1.web-sweet-web.net\"],\"email\":\"register@dot-bit.org\"}"
      }
      
      

      name correspond à la clé et donc au nom de domaine, et value contient les données du domaine au format json (ici, 2 serveurs de nom)
      d/dot-bit correspond au domaine http://dot-bit.bit

      • [^] # Re: Lapin compris

        Posté par (page perso) . Évalué à 6.

        Désolé mais j'ai vraiment du mal à comprendre. Je sais comment fonctionne le DNS, ce qu'est un enregistrement, mais là faute d'explication c'est difficile.

        Visiblement, Namecoin se détache assez fortement du DNS, en introduisant un annuaire dont les clefs sont je ne sais quoi, et dont les valeurs sont un ensemble de données qui n'ont pas grand chose à voir avec le DNS. Ça me semblerait plus proche du système WHOIS qui est utilisé par les registres de niveau supérieur pour en dériver le contenu de leurs zones de délégation. Si quelqu'un pouvait préciser un peu comment cela fonctionne, en utilisant des notations humaines (c'est à dire pas ce qui précède), ce serait bienvenu.

        d/dot-bit correspond au domaine http://dot-bit.bit

        Ça c'est le genre d'information qui serait appréciable.

        • [^] # Re: Lapin compris

          Posté par . Évalué à 1. Dernière modification le 06/06/12 à 12:17.

          Namecoin permet d'enregistrer les noms de domaine en .bit sous le format "d/" + nom de domaine sans extension.

          À ce nom de domaine peuvent être associées diverses infos :
          - des "ns" comme dans un whois pour indiquer un serveur à qui déléguer
          - des "ip" pour associer directement des "hostname" à des ip
          - ainsi que diverses autres choses décrites dans la spec comme "ip6" et les sous-domaines

          Namecoin en lui-même ne fait que stocker et garantir la fiabilité des données. Il ne fait pas DNS en lui-même (d'où son côté générique, qui fait qu'il peut servir à d'autres choses).

          Pour faire DNS à partir des données de Namecoin, il faut soit utiliser NamecoinToBind soit nmcsocks :
          > - NamecoinToBind : il convertit les entrées de la BDD dans le format utilisé par le serveur DNS bind. Vous pouvez donc faire votre propre serveur DNS résolvant aussi les .bit
          > - nmcsocks : fait à la fois serveur DNS et proxy, directement connecté à Namecoin. Vous pouvez ensuite utiliser Foxyproxy, par exemple, pour naviguer sur des sites en .bit. Ce logiciel n'est malheureusement plus maintenu par son auteur (il est codé en nodejs, un volontaire ?)

          • [^] # Re: Lapin compris

            Posté par (page perso) . Évalué à 2.

            • NamecoinToBind : il convertit les entrées de la BDD dans le format utilisé par le serveur DNS bind. Vous pouvez donc faire votre propre serveur DNS résolvant aussi les .bit

            Comment cela s'utilise-t-il en pratique ? Toutes les X heures, récupérer l'annuaire Namecoin complet pour en faire une énorme zone DNS ?

            • [^] # Re: Lapin compris

              Posté par . Évalué à 1.

              C'est ça en gros : toutes les minutes, un cron tourne pour récupérer les derniers ajouts et modifications dans Namecoin et générer la zone pour le domaine .bit si nécessaire. NamecoinToBind est le script (php) qui s'occupe de ça.

              La zone contient actuellement 25000 lignes pour 17000 domaines (je me suis planté avec mon chiffre de 5500… Une vieille stat.) et le fichier fait 1,1Mo.

  • # NamePAN !

    Posté par (page perso) . Évalué à 6.

    Il fallait bien que quelqu'un la fasse :

    ▙ ▌          ▛▀▖▞▀▖▙ ▌ ▐ 
    ▌▌▌▝▀▖▛▚▀▖▞▀▖▙▄▘▙▄▌▌▌▌ ▐ 
    ▌▝▌▞▀▌▌▐ ▌▛▀ ▌  ▌ ▌▌▝▌ ▝ 
    ▘ ▘▝▀▘▘▝ ▘▝▀▘▘  ▘ ▘▘ ▘ ▝ 
    
    

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.