Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Ève

Bitmessage, le courrier enfin sécurisé ?

Première rédaction de cet article le 8 juillet 2013


Le système de messagerie Bitmessage est publié depuis plusieurs mois mais il a acquis une soudaine célébrité avec les révélations sur le programme PRISM. Il y a déjà eu beaucoup d'articles (y compris en français) sur Bitmessage donc je vais ici plutôt me concentrer sur des détails qui n'ont pas toujours été mentionnés.

Un rappel d'abord : Bitmessage est prévu pour faire de la messagerie sécurisée, notamment protégée contre l'espionnage de la NSA ou de la DGSE. Il opère en utilisant des adresses qui sont un condensat d'une clé publique (la mienne est BM-2D8rwZkR1KvUMCnBhH7MGzTwVRXnDvhMC9, vous pouvez m'écrire mais vous pouvez aussi essayer l'auto-répondeur BM-orkCbppXWSqPpAxnz6jnfTZ2djb5pJKDb). Les messages sont transmis au monde entier (Bitmessage n'a pas de préoccupations écologiques et fait travailler toutes les machines du réseau) mais seul le récepteur pourra le lire. Au bout d'une heure trente de fonctionnement de mon logiciel, j'ai traité :

2791 messages person-to-person
700 broadcast
6072 public keys

Autre point pas écologique : Bitmessage dépend de « preuves de travail » (résolution de problèmes nécessitant la force brute comme de trouver une collision dans une fonction de condensation) pour limiter le spam et les attaques Sybil.

Bitmessage est documenté dans un (très court et très elliptique) whitepaper et a une mise en œuvre de référence en Python.

Comme tous les systèmes à preuve de travail, il est très difficile à régler. Si le problème à résoudre est trop difficile, on ne pourra pas envoyer de Bitmessage depuis son smartphone. Et s'il est trop facile, un botnet pourra envoyer autant de spam que ça lui chante.

Les adresses Bitmessage sont une bonne illustration de ma conjecture comme quoi on ne peut pas avoir tout à la fois dans un identificateur. Ici, les concepteurs de Bitmessage ont sacrifié l'utilisabilité à la sécurité.

Notez qu'il existe une autre catégorie d'adresses, dérivée d'une phrase de passe et pas d'une clé publique (la mienne est BM-2DBbqaL9CSi7pVhzfHahy9vPD2hY3aTt5c). Le whitepaper n'en parle pas et je ne trouve pas de documentation sur leur principe. C'est en problème courant avec Bitmessage : la documentation est courte, et en retard sur le code.

Le lien avec Bitcoin, souvent cité, n'est pas clair non plus, à part quelques vagues analogies.

Bitmessage ne semble pas non plus très bien sécurisé contre les attaques par déni de service. Les nœuds de bootstrap, et les relais, sont publics et connus (ils sont même dans le code, en src/defaultKnownNodes.py). Ils peuvent être attaqués.

Attention aussi à la sécurité du poste local. Dans la version actuelle (0.3) du client de référence, la base de données SQLite contenant les messages, le carnet d'adresses, etc, est en clair. Même si on a effacé les messages, ils sont juste marqués détruits mais ils restent dans la boîte. Attention donc en cas de vol ou de perquisition. Il est recommandé d'avoir un disque local chiffré.

Enfin, attention, l'adresse de l'émetteur est vue par tout le réseau (où tout le monde peut s'inscrire). Cela ne donne pas accès au contenu des messages mais cela permet de savoir qui parle avec qui. La solution est de changer d'adresse souvent (ce que permet le client actuel facilement) au prix d'une perte de continuité dans sa réputation.

Je n'ai pas encore vu de comparaison systématique avec des systèmes concurrents comme TorChat, Freemail ou Cryptocat.

Bref, Bitmessage est intéressant et prometteur mais loin d'être fini.

Quelques articles utiles :

Je voulais remercier nominativement les personnes qui m'ont aidé à explorer Bitmessage mais la plupart d'entre elles étaient anonymes... Donc, remerciements aux anonymes et à Changaco.

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)