Documentation Meshbell
Meshbell est un instrument d'urgence à l'échelle du quartier. Son principe de conception est inhabituel pour une application grand public : la vérification est le socle, pas une fonctionnalité. Voici comment cela fonctionne.
Aperçu
Dans Meshbell, une alerte de danger est un petit enregistrement signé — une assertion. Les assertions sont adressées par leur contenu (nommées par le hachage de leurs propres octets), signées avec une clé d'appareil et jamais modifiées : une correction est une nouvelle assertion qui référence l'ancienne. C'est cette immuabilité qui permet à un avertissement et à sa correction de voyager ensemble à travers un réseau maillé, et qui permet à n'importe quel appareil de re-vérifier n'importe quel message qu'il reçoit.
Tout ce qui se trouve au-dessus du réseau est conçu de sorte que perdre une connexion, un serveur ou un modèle vous coûte une annotation, jamais l'alerte.
Le modèle de confiance
Meshbell garde deux questions séparées, parce que ce sont des faits différents et que les confondre est la manière dont la désinformation se répand :
| Question | Ce qui y répond | Ce qu'elle peut dire |
|---|---|---|
| De quel enregistrement s'agit-il, et est-il intact ? | Adresse par contenu + vérification de signature sur votre appareil | lié / aperçu / altéré |
| Qui l'a signé, et puis-je le vérifier ? | Le trousseau de clés sur l'appareil | vérifié · impossible de vérifier qui a signé · falsifié |
Le second axe est délibérément à trois valeurs. Une falsification (vérifiée par rapport à une clé connue, échouée) n'est pas la même chose qu'une clé inconnue (encore aucun moyen de vérifier) — les regrouper en un seul « invalide » masquerait exactement la distinction dont une personne a besoin. Un message n'est stocké comme digne de confiance que lorsque le trousseau dit verified.
Vérifié directement sur les ondes, sans copie préalable
Une courte trame radio est un aperçu — un pointeur vers un enregistrement. Mais un enregistrement peut aussi être envoyé en entier sous forme d'enveloppe auto-authentifiante, répartie sur plusieurs trames et réassemblée à l'arrivée. Un appareil qui n'a jamais vu l'enregistrement auparavant peut alors le reconstruire, re-dériver son adresse par contenu et vérifier sa signature — atteignant un verdict verified sur un quartier purement radio, sans aucun accès Internet dans la boucle.
Le pare-feu d'instructions
La seule chose qu'une application d'urgence ne doit jamais faire, c'est transformer une rumeur en ordre. Meshbell fait respecter cela structurellement, pas par une discipline de relecture :
- L'écran qui affiche une instruction (« quoi faire ») ne peut même pas être construit à partir d'un message non vérifié — le système de types le refuse.
- Le texte de consigne provient d'un guide intégré et versionné, indexé par identifiant, jamais d'un texte libre transmis sur les ondes et jamais d'un modèle de langage. Un modèle peut résumer une situation, en prose, étiquetée comme déduite — il n'a aucun champ où placer une consigne.
- Une alerte officielle relayée est présentée comme un voisin qui se porte garant, pas comme officielle, à moins qu'elle ne prouve une justification d'identité auprès d'un point de terminaison faisant autorité.
La promesse, en une ligne : l'application ne transforme jamais une rumeur en instruction — et cette phrase est une propriété du code, pas une déclaration d'intention.
La couche de coordination
Les alertes vérifiées répondent à « que se passe-t-il, et puis-je m'y fier ? » Mais un quartier en situation d'urgence a aussi une logistique ordinaire à gérer : qui est recensé, où se trouve l'abri, qui a un générateur. Meshbell transporte une seconde couche, délibérément séparée, pour ce travail — accessible nativement dans l'onglet Quartier de l'application, et dans un navigateur pour quiconque n'a pas l'application.
Ce qu'elle contient
| Surface | Ce que c'est | Forme de confidentialité |
|---|---|---|
| Appel de sécurité | Se signaler en sécurité en un geste ; chacun ne voit qu'un décompte agrégé par rapport à un total approximatif de foyers. | Aucun nom, aucune adresse, aucune localisation. Le décompte est retenu jusqu'à ce qu'une poignée de personnes se soient signalées, afin qu'un foyer isolé ne puisse pas être déduit. |
| Listes de ressources | Listes partagées et modifiables — abri/réchauffement, eau/fournitures, énergie/recharge, et une liste « qui peut aider » où l'on s'inscrit soi-même. Les éléments peuvent porter une étiquette de lieu. | Toute personne sur la passerelle peut ajouter ou modifier. Inscription volontaire uniquement ; personne n'est ajouté par quelqu'un d'autre. |
| Tableau d'affichage | De courts messages étiquetés par canal (info, offre, demande, question) et filtrés par récence, publiés sous un nom saisi librement. | Le nom que vous saisissez — aucun compte, aucune identité vérifiée. |
| Instantané imprimable | Un rendu d'une page /coord/print de l'appel, des listes et du dernier tableau, pour quand les batteries s'épuisent. | Même appel agrégé uniquement ; peut être affiché sans risque sur un panneau physique. |
Pourquoi elle est tenue à l'écart
Mêler des notes de voisins modifiables à un journal d'alertes signé et en ajout-seul briserait les deux. La mémoire de coordination est donc une chose à part : uniquement en réseau local, modifiable, et servie par la passerelle à côté — jamais à l'intérieur — du flux vérifié. Un opérateur détient un jeton d'administration pour l'entretien (effacer des données de test, élaguer un tableau qui déborde) ; publier et se signaler ne nécessitent aucune justification d'identité. Les deux couches partagent un écran, jamais une frontière de confiance.
Fonctionnement hors ligne
La dégradation est l'état attendu, pas une erreur. Lorsqu'une voie de données est coupée, Meshbell sert les dernières données valides connues étiquetées avec leur ancienneté (« à partir d'il y a 40 minutes ») plutôt qu'un vide à l'apparence assurée. Le niveau sans apprentissage automatique — un vieux téléphone sans modèle embarqué — est un niveau de produit à part entière : une application d'urgence qui ne fonctionne que sur le matériel le plus récent laisse tomber les personnes les plus susceptibles d'en avoir besoin.
Radios et matériel
Meshbell fonctionne sur votre téléphone seul. Les radios étendent sa portée quand le réseau est coupé. Un réseau maillé de quartier se construit à partir de matériel LoRa bon marché et prêt à l'emploi, exécutant le micrologiciel ouvert MeshCore :
| Élément | Rôle |
|---|---|
| Une radio LoRa compagnon (par ex. un nœud Heltec) | Votre téléphone s'y appaire par Bluetooth pour envoyer et entendre des bulletins sur le réseau maillé. |
| D'autres radios dans le quartier | Chacune est un saut. Trois ou plus commencent à former une véritable portée multi-sauts à travers les pâtés de maisons et les crêtes. |
| Un nœud toujours actif optionnel (par ex. un Raspberry Pi) | Fait le pont entre le réseau maillé et l'Internet plus large dès qu'un lien montant est disponible, et conserve un journal durable — « le téléphone est la tête, le réseau maillé est le corps ». |
Mettre en place une passerelle
Une « passerelle » est un nœud toujours actif dans la rue — généralement un Raspberry Pi — qui transporte le flux vérifié et la couche de coordination sur le Wi-Fi local, afin que le téléphone ou le navigateur de chaque voisin puisse les atteindre sans réseau cellulaire ni Internet. Meshbell est conçu pour que deux personnes très différentes y parviennent sans mode d'emploi.
Si vous êtes l'hôte (un voisin préparé)
L'installateur de passerelle est livré à l'intérieur de l'application. Une configuration guidée vous accompagne pour flasher le nœud, et il démarre autonome : il sert les écrans de coordination de l'application, une application web installable pour les voisins qui n'ont que le navigateur, et une vue d'administration pour l'entretien. Il n'y a rien à configurer à la main et aucun compte à créer — le nœud s'annonce sur le réseau local, et c'est l'application qui fait la recherche.
Si vous êtes un voisin (jamais entendu parler d'un réseau maillé)
Rejoignez le Wi-Fi de la rue et ouvrez l'onglet Quartier. L'application recherche la passerelle automatiquement et s'y connecte ; les écrans de coordination sont natifs, ils fonctionnent donc même là où un simple navigateur ne peut pas atteindre le nœud. Quand la détection a besoin d'un coup de main, l'application propose un diagnostic en langage clair — est-ce le bon réseau ? la passerelle est-elle éveillée ? — et un champ d'adresse manuel comme solution de repli, ainsi qu'une vue intégrée de l'application web du navigateur si vous préférez l'utiliser.
Architecture
La logique métier est pure et portable — elle se compile et se teste sur un Raspberry Pi sans aucun matériel Apple dans la boucle, de sorte que les parties qui décident si un message est digne de confiance sont vérifiées en continu, pas seulement à la publication. L'application iOS n'est qu'un mince moteur de rendu par-dessus.
- Canonical JSON (clés triées, ASCII figé) donne à chaque appareil une pré-image identique octet pour octet, de sorte qu'une adresse par contenu calculée sur un téléphone correspond à celle calculée sur un nœud.
- Signature et vérification Ed25519, une seule implémentation entre Apple et Linux.
- Un journal en ajout-seul, en insertion-seule : les enregistrements ne sont jamais mis à jour ni supprimés, de sorte que l'historique — y compris les corrections — est préservé et re-vérifiable.
- Une barrière de conformité multi-langage : les mêmes trames sont décodées par l'application et par un nœud Python indépendant, et vérifiées octet pour octet, de sorte que les deux ne peuvent jamais dériver en silence.
Limites assumées
Énoncées franchement, parce qu'un outil d'urgence qui se survend est dangereux :
- Meshbell est une bêta précoce. Il a transporté un bulletin signé à travers de vraies radios LoRa et l'a vérifié sur un téléphone — mais il ne remplace pas encore les canaux d'urgence officiels. Gardez vos alertes existantes actives.
- La distribution des clés — comment votre appareil apprend quelle clé publique appartient à qui — est un domaine en travaux actifs ; une signature prouve la détention d'une clé, et lier une clé à une identité réelle est un problème distinct et délibéré.
- Les clés de signature sur l'appareil résident dans le trousseau de l'appareil et sont extractibles par tout ce qui peut déjà lire le trousseau de l'application ; nous ne revendiquons pas une protection par enclave matérielle que nous ne pouvons pas assurer.
- La couche de coordination — l'appel de sécurité, les listes de ressources et le tableau, natifs dans l'application et sur la passerelle — est non vérifiée par conception et séparée du canal d'alertes signé : utile pour la logistique, jamais une source d'instruction officielle, et non couverte par le modèle de confiance ci-dessus. Elle est uniquement en réseau local, elle atteint donc quiconque se trouve sur la passerelle, pas le réseau maillé plus large.