Bitmessage : Différence entre versions
m (→Technique) |
m (→Technique) |
||
Ligne 14 : | Ligne 14 : | ||
==Technique== | ==Technique== | ||
− | * le whitepaper n'emploie nulle part le mot <i>blockchain</i>. Pour la bonne raison qu'il n'y en a pas (au sens bitcoin). Il n'y a pas de production de blocs toutes les n minutes, pas de scellement de blocs, etc. Chaque noeud maintient simplement un fichier SQL qui contient tous les messages datés de moins de 48 heures. Il n'y a pas lieu d'y avoir d'identicité de tous ces fichiers SQL, étant donné qu'il est envisagé (pour des raisons de scalabilité) que les fichiers de messages puissent différer entre différentes branches de noeuds. | + | * le whitepaper n'emploie nulle part le mot <i>blockchain</i>. Pour la bonne raison qu'il n'y en a pas (au sens bitcoin). Il n'y a pas de production de blocs toutes les n minutes, pas de scellement de blocs, etc. Chaque noeud maintient simplement un fichier SQL propre, qui contient tous les messages datés de moins de 48 heures. Il n'y a pas lieu d'y avoir d'identicité de tous ces fichiers SQL, étant donné qu'il est envisagé (pour des raisons de scalabilité) que les fichiers de messages puissent différer entre différentes branches de noeuds. |
− | |||
* sauf erreur, la propagation est par flooding. Chaque noeud reçoit tout (enfin du moins de son voisinage), | * sauf erreur, la propagation est par flooding. Chaque noeud reçoit tout (enfin du moins de son voisinage), |
Version du 27 décembre 2017 à 18:38
P2P, décentralisé, chiffré
Top language : python
- https://github.com/Bitmessage/PyBitmessage sur github, projet actif en 2017
Sommaire
Technique
- le whitepaper n'emploie nulle part le mot blockchain. Pour la bonne raison qu'il n'y en a pas (au sens bitcoin). Il n'y a pas de production de blocs toutes les n minutes, pas de scellement de blocs, etc. Chaque noeud maintient simplement un fichier SQL propre, qui contient tous les messages datés de moins de 48 heures. Il n'y a pas lieu d'y avoir d'identicité de tous ces fichiers SQL, étant donné qu'il est envisagé (pour des raisons de scalabilité) que les fichiers de messages puissent différer entre différentes branches de noeuds.
- sauf erreur, la propagation est par flooding. Chaque noeud reçoit tout (enfin du moins de son voisinage),
- et de plus, un noeud essaie systématiquement de décoder tout ce qu'il reçoit (du fait que les identités de l'expéditeur et du/des destinataire(s) sont cryptées)
- (... tel quel, ça pose(rait) un gros problème de scalabilité, mais des améliorations sont envisagées sur ce point).
- l'envoi d'un message passe par une PoW (pour éviter spam et attaques sybil)
- l'envoi d'un message est précédé d'une demande de clé au destinataire (vérifier les détails)
- les messages ont une durée de vie de 48h, donc pas de blockchain qui s'allonge à l'infini
- plusieurs personnes ont écrit leur propre code, dans des langages autres que python, eg go, pour leur noeud
- il y a des noeuds qui tournent sur VPS ( https://bitmessage.org/forum/index.php?topic=5219.0 )
- a priori, serait aussi utilisable directement depuis une clé USB
- Points communs avec bisq bitsquare https://bisq.network/blog/new-p2p-network/
Additionally to the publicly readable data like the offers there are data stored which need to remain private. There are trade process messages which are stored in a kind of mailbox in case the peer is offline. Those data are encrypted and signed and also sent to every node for storage. Only the receiver (who has the private key) can decrypt the data. A similar approach is used in Bitmessage.
Install
Sur raspberry 3 / raspbian.
Install des paquets nécessaires
... /home/pi# lsb_release -a Description: Raspbian GNU/Linux 9.3 (stretch)
apt-get update ; apt-get upgrade ; apt-get dist upgrade ; as usual
apt-get install python ; déjà installé ici
apt-get install openssl ; déjà installé ici
apt-get install libssl-dev ; ~ 10Mo consommés
apt-get install git ; déjà installé ici
apt-get install python-msgpack ; 228 Ko
apt-get install python-qt4 ; 59.4 Mo
On note l'intérêt d'avoir des paquets déjà présents dans les distros de base.
Docs (si vous voulez savoir ce que font ces paquets) :
- https://packages.debian.org/stretch/python par défaut sur Debian
- https://packages.debian.org/stretch/openssl
- https://packages.debian.org/stretch/libssl-dev
- https://packages.debian.org/stretch/git
- https://packages.debian.org/stretch/python-msgpack
- https://packages.debian.org/stretch/python-qt4 sauf erreur, c'est une couche graphique
download du code source :
git clone https://github.com/Bitmessage/PyBitmessage $HOME/PyBitmessage
360 fichiers, 14.1Mo.
NB : a priori, rien n'oblige à procéder via git clone
un download classique fonctionne a priori tout aussi bien.
Mais bon, avec git on peut évidemment faire éventuellement plus de choses.
Petite vérif avec le script fourni
pi@RPI110:~/PyBitmessage $ python checkdeps.py cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++ Missing optional dependencies: pyopencl If you install pyopencl, you will be able to use GPU acceleration for proof of work. You also need a compatible GPU and drivers. All the dependencies satisfied, you can install PyBitmessage
Lancement
pi@RPI110:~/PyBitmessage/src $ bitmessagemain.py bash: bitmessagemain.py : commande introuvable pi@RPI110:~/PyBitmessage/src $ python bitmessagemain.py ERROR:root:/home/pi/.namecoin/namecoin.conf unreadable or missing, Namecoin support deactivated Creating new config files in /home/pi/.config/PyBitmessage/ Using default logger configuration make : on entre dans le répertoire « /home/pi/PyBitmessage/src/bitmsghash » g++ -Wall -O3 -march=native -fPIC -c bitmsghash.cpp g++ bitmsghash.o -shared -fPIC -lcrypto -lpthread -o bitmsghash.so make : on quitte le répertoire « /home/pi/PyBitmessage/src/bitmsghash » 2017-12-27 16:25:17,697 - ERROR - /home/pi/.namecoin/namecoin.conf unreadable or missing, Namecoin support deactivated ... un peu d'attente 2017-12-27 16:27:03,575 - WARNING - No notification.message plugin found 2017-12-27 16:27:08,713 - WARNING - No notification.sound plugin found
Contenu
- 153 fichiers *.py , 1 fichier *.cpp
Le fichier cpp s'occupe de la PoW. Serait-il pas plus judicieux de ne pas effectuer la PoW en cpp, mais plutôt en python, quitte à abaisser la difficulté ? Pas trivial. Je présume qu'un utilisateur malveillant pourrait alors ne pas passer par le prouveur python, mais passer par un prouveur rapide, et cela sur une preuve facile (abaissée), donc pas top. Faudrait une astuce pour obliger à passer par le prouveur python ? comment faire ? pas évident même si le code était fermé, encore moins évident avec un code ouvert ?
Contributions possibles
- https://bitmessage.org/forum/index.php?topic=5276.0 cherche dev python pour pondre des stats sur bitmessage (nb de nodes, etc). ça date de 2016, mais on peut demander où ça en est ?
Soucis possibles
- il y a des IPs en clair dans le code source. a priori il s'agirait des noeuds de bootstrap. Un attaquant du réseau Bitmessage pourrait cibler ces IPs (attaque DoS ou autre).
- NB : Les IPs 2017 ne sont pas les mêmes qu'en 2013.
- on ne peut pas exclure que ces IPs soient des honey pots ?
- comment pourrait-on contourner ce souci ?
Concurrents
- https://crypviser.network/ pour le 20 août 2018 ... site souvent inaccessible ? semble payant, au moins en partie.
- https://www.coingecko.com/en/coins/cvcoin
- https://www.coingecko.com/en/price_charts/cvcoin/usd#panel chart date du 30/10/2017
- scayl ? BTsync ?
Liens
- http://linuxfr.org/users/julmx/journaux/bitmessage-envoi-de-messages-chiffres-en-p2p article de 2013
- https://bitmsg.me/ send and receive Bitmessages directly from a web browser
- https://bitmessage.org/forum/index.php?topic=1666.0 critique détaillée des faiblesses de bitmessage
- Bitmessage : lorsque le protocole de Bitcoin protège vos conversations https://www.nextinpact.com/news/80282-bitmessage-lorsque-protocole-bitcoin-protege-vos-conversations.htm
Pages connexes