Documentazione
Meshbell è uno strumento di emergenza su scala di quartiere. La verifica è il substrato, non una funzione. Questa pagina dice come, e dove stanno i confini.
Panoramica
In Meshbell un avviso di pericolo è un piccolo documento firmato. È denominato dall'hash dei propri byte, firmato con una chiave del dispositivo, e mai modificato. Una correzione è un nuovo documento che rimanda a quello vecchio, ed è questo che permette a un avviso e alla sua correzione di viaggiare insieme e permette a qualsiasi dispositivo di ricontrollare tutto ciò che riceve.
Il tuo telefono ha due collegamenti, e nessuno dei due ha bisogno di internet
Questo è tutto il modello di connessione, e la scheda Connessione dell'app è il posto dove li vedi entrambi.
| Collegamento | Cosa raggiunge | Come si avvia |
|---|---|---|
| Bluetooth | Una radio da tasca: un nodo LoRa complementare nella tua borsa. È l'unico modo in cui un telefono va in onda, perché nessun iPhone ha una radio LoRa al suo interno. | Tocchi Connessione. Una scansione consuma batteria e prende un accesso esclusivo alla radio, quindi la avvia una persona, mai l'app. |
| Wi-Fi | Un ponte di quartiere: una scatola sempre accesa sulla rete locale, che conserva il documento e lo serve a telefoni e browser. | Automaticamente all'avvio. L'app cerca un ponte su qualunque Wi-Fi tu sia, e c'è un campo per l'indirizzo manuale per le reti che bloccano il rilevamento. |
Entrambi i collegamenti alimentano un solo registro e un solo portachiavi. Un documento che arriva via radio e uno che arriva via Wi-Fi finiscono nello stesso registro e ricevono lo stesso controllo. Spegnere la radio non ferma la ricezione dal ponte, perché sono percorsi separati verso lo stesso posto.
Tutto ciò che sta sopra la rete è costruito perché perdere una connessione, un server o un modello ti costi un'annotazione, mai l'allerta.
Il modello di fiducia
Meshbell tiene separate due domande, perché sono fatti diversi e confonderli è il modo in cui si diffonde l'informazione sbagliata.
| Domanda | Cosa risponde | Cosa può dire |
|---|---|---|
| Di quale documento si tratta, ed è intatto? | L'indirizzo di contenuto e il controllo della firma, eseguiti entrambi sul tuo dispositivo | vincolato · anteprima · alterato |
| Chi lo ha firmato, e posso verificarlo? | Il portachiavi sul tuo dispositivo | verificato · impossibile verificare · falsificato |
Il secondo asse ha deliberatamente tre valori. Una falsificazione, controllata rispetto a una chiave che possiedi e risultata fallita, non è lo stesso fatto di una chiave sconosciuta, con la quale non c'è ancora modo di verificare. Riunirli in una sola parola, «non valido», nasconderebbe esattamente la distinzione di cui una persona ha bisogno. Un messaggio viene conservato come affidabile solo quando il portachiavi dice verificato.
Verificato direttamente in onda, senza nessuna copia precedente
Una breve trama radio è un'anteprima: un puntatore a un documento, mostrato ma mai considerato affidabile e mai usato per inventare un contenuto. Un documento può anche essere inviato per intero come busta auto-autenticante, divisa su più trame e riassemblata dall'altra parte. Un dispositivo che non ha mai visto prima quel documento può allora ricostruirlo, ricalcolare il suo indirizzo di contenuto e controllare la sua firma, arrivando a un verdetto verificato in un quartiere di sola radio, senza nessun internet nel giro.
Le trame arrivano senza autenticazione via LoRa, e i frammenti di un documento diviso non sono firmati in transito. Solo il documento riassemblato viene verificato. Un gruppo incompleto lo dice e resta un'anteprima.
La barriera per le istruzioni
L'unica cosa che un'app di emergenza non deve mai fare è trasformare una diceria in un ordine. Meshbell lo impone nella struttura del codice, non con la disciplina delle revisioni.
- La schermata che mostra un'istruzione, cioè cosa fare, non può essere costruita a partire da un messaggio non verificato. Il sistema dei tipi lo rifiuta.
- Il testo delle indicazioni proviene da un manuale incluso nell'app, con una versione, indicizzato per id. Non proviene mai da testo libero che arriva dalla rete né da un modello linguistico. Un modello può riassumere una situazione, in prosa, etichettata come dedotta. Non ha nessun campo in cui mettere un comando.
- Un'allerta ufficiale ritrasmessa viene mostrata come un vicino che fa da garante, non come ufficiale. Il suo verdetto lo dice a parole: allerta ufficiale ritrasmessa, qui non trattata come ufficiale.
La promessa, in una riga. L'app non trasforma mai una diceria in un'istruzione, e quella frase è una proprietà del codice più che una dichiarazione d'intenti.
Il livello di coordinamento
Le allerte verificate rispondono a cosa sta succedendo e a quanto puoi fidartene. Un quartiere in emergenza ha anche una logistica ordinaria: chi è stato contato, dov'è il rifugio, chi ha un generatore. Meshbell trasporta un secondo livello, deliberatamente separato, per questo lavoro, nativo nella scheda Quartiere dell'app e in un browser per chi non ha l'app.
Questo livello non è verificato per scelta progettuale. Non è indirizzato per contenuto, non è firmato e non fa parte del canale delle allerte. È uno stato condiviso modificabile che i vicini scrivono e correggono, quindi trattalo come un biglietto attaccato a una porta. La barriera per le istruzioni resta valida: qui niente può essere mostrato come un'istruzione ufficiale, e il modello di fiducia qui sopra governa soltanto le allerte.
Cosa contiene
| Superficie | Che cos'è | Forma della privacy |
|---|---|---|
| Appello di sicurezza | Conferma «sono al sicuro» con un tocco. Tutti vedono un conteggio aggregato rispetto a un totale approssimativo di famiglie. | Nessun nome, nessun indirizzo, nessuna posizione e nessun elenco nominativo. Il conteggio viene trattenuto finché non ha confermato un piccolo gruppo di persone, così non si può dedurre una singola famiglia. |
| Liste di risorse | Liste condivise e modificabili: rifugio e riscaldamento, acqua e provviste, corrente e ricarica, e una lista «chi può aiutare» in cui ognuno si iscrive da sé. Gli elementi possono portare un'etichetta di luogo. | Chiunque sia sul ponte può aggiungere o modificare. Solo iscrizione volontaria. Nessuno viene inserito da qualcun altro. |
| Bacheca | Messaggi brevi etichettati con un canale (info, offerta, richiesta, domanda) e filtrati per quanto sono recenti, pubblicati con un nome che scrivi tu. | Il nome che scrivi tu. Nessun account, nessuna identità verificata. |
| Istantanea stampabile | Una pagina /coord/print che rende l'appello, le liste e gli ultimi messaggi in bacheca, per quando le batterie si scaricano. | Lo stesso appello, solo aggregato, quindi si può attaccare senza rischi a una bacheca fisica. |
Perché è tenuto separato
Mescolare note modificabili dei vicini in un registro di allerte firmato e a solo accodamento romperebbe entrambe le cose. Quindi l'archivio di coordinamento è una cosa a sé: solo rete locale, modificabile, e servito dal ponte accanto al flusso verificato invece che al suo interno. Un operatore possiede un token di amministrazione per la manutenzione, per esempio cancellare dati di prova o sfoltire una bacheca fuori controllo, e senza quel token le rotte di amministrazione si chiudono. Pubblicare e confermare non richiedono nessuna credenziale. I due livelli condividono una schermata, mai un confine di fiducia.
Funzionamento offline
Il degrado è lo stato previsto, non un errore. Quando un percorso dati è fuori servizio, Meshbell serve gli ultimi dati validi noti etichettati con la loro età, «aggiornato a 40 minuti fa», invece di un vuoto dall'aria sicura. Il livello senza modelli, un telefono vecchio senza niente di sofisticato sopra, è un livello di prodotto di prima classe. Un'app di emergenza che funziona solo sull'hardware più recente tradisce proprio le persone che ne hanno più bisogno.
La ricezione funziona mentre l'app è aperta. Meshbell non ascolta in background né quando è stata chiusa, e non dirà mai il contrario.
Radio e hardware
Meshbell funziona anche solo sul tuo telefono. Le radio ne estendono la portata quando la rete è fuori servizio. Una rete mesh di quartiere si costruisce con hardware LoRa economico e già pronto, che esegue il firmware aperto MeshCore.
| Pezzo | Costo | Ruolo |
|---|---|---|
| Una radio LoRa complementare, per esempio un nodo Heltec | ~$30 | Il tuo telefono si abbina a essa via Bluetooth per inviare e ricevere bollettini. Una radio complementare serve un telefono alla volta. Se un altro telefono o un'altra app la tiene occupata, al tuo viene detto chiaramente invece di girare a vuoto. |
| Altre radio in giro per il quartiere | ~$30 ciascuna | Ognuna è un salto, e ognuna ripete un documento una volta sola e poi si ferma, così l'aria resta libera. Tre o più iniziano a offrire una vera portata multi-salto tra gli isolati e oltre i crinali. |
| Un ponte sempre acceso, di solito un Raspberry Pi | ~$50-80 | Conserva un registro duraturo e lo serve sul Wi-Fi locale su port 4190. Userà un collegamento a internet quando ce n'è uno, e non ne ha bisogno. |
Impostazioni radio per gli Stati Uniti. Il banco di prova di riferimento di Meshbell funziona a 910.525 MHz, bw 62.5 kHz, sf7, cr 4/5, all'interno della banda libera da licenza 902-928 MHz, con una busta del collegamento complementare di 172 B. Rileggi sempre la configurazione della tua radio prima di trasmettere. L'impostazione predefinita della regione potrebbe essere una banda che non sei autorizzato a usare.
Bande radio per regione
Il tuo telefono non ha una radio LoRa al suo interno, quindi non tocca mai la banda. È il firmware della radio a possedere quell'impostazione. Meshbell rilegge la sintonia dalla radio quando si connette, la mostra, e dice chiaramente quando la radio non è sul canale che usa la tua regione.
910.525 MHz è la stazione nordamericana. Ogni regione qui sotto ha il proprio canale, collocato dentro la banda libera da licenza che quella regione consente. Dove la comunità MeshCore pubblica un canale consigliato per un paese, Meshbell adotta quel canale e le sue impostazioni esattamente, così i ripetitori MeshCore già presenti lì possono trasportare i bollettini Meshbell. Dove la comunità non ne ha pubblicato nessuno, Meshbell sceglie un canale che sta lontano dalla parte più affollata della banda.
| Regione | Banda | Canale Meshbell | Ciclo di lavoro o ascolto prima di trasmettere |
|---|---|---|---|
| Stati Uniti e Canada | 902-928 MHz | 910.525 MHz | Nessun limite di ciclo di lavoro, quindi un ponte può segnalarsi tutte le volte che serve. Fino a 36 dBm, antenna compresa. È la raccomandazione di MeshCore stessa per gli Stati Uniti e il Canada, quindi i ripetitori MeshCore già presenti qui possono trasportare i bollettini Meshbell. |
| Europa e Regno Unito | 869.4-869.65 MHz | 869.618 MHz · sf8 · cr 4/8 | Ciclo di lavoro del 10%, circa sei minuti di trasmissione all'ora. Fino a 29 dBm. Il Regno Unito applica gli stessi limiti, quindi non ha un'impostazione separata. È la raccomandazione di MeshCore stessa per l'Europa e il Regno Unito, quindi i ripetitori MeshCore già presenti qui possono trasportare i bollettini Meshbell. |
| Repubblica Ceca | 869.4-869.65 MHz | 869.432 MHz | Lo stesso ciclo di lavoro del 10% e lo stesso tetto di 29 dBm dell'Europa, su un canale tutto suo. È la raccomandazione di MeshCore stessa per la Repubblica Ceca, quindi i ripetitori MeshCore già presenti lì possono trasportare i bollettini Meshbell. |
| Paesi Bassi | 869.4-869.65 MHz | 869.618 MHz | Lo stesso ciclo di lavoro del 10% e lo stesso tetto di 29 dBm dell'Europa. È la raccomandazione di MeshCore stessa per i Paesi Bassi, quindi i ripetitori MeshCore già presenti lì possono trasportare i bollettini Meshbell. Condivide la frequenza dell'Europa ma usa i valori predefiniti sf7 e cr 4/5, quindi i due non si sentono tra loro nemmeno sulla stessa frequenza. |
| Portogallo | 869.4-869.65 MHz | 869.618 MHz · cr 4/6 | Lo stesso ciclo di lavoro del 10% e lo stesso tetto di 29 dBm dell'Europa. È la raccomandazione di MeshCore stessa per il Portogallo, quindi i ripetitori MeshCore già presenti lì possono trasportare i bollettini Meshbell. Condivide la frequenza dell'Europa ma usa sf7 e cr 4/6, quindi i due non si sentono tra loro nemmeno sulla stessa frequenza. |
| Australia | 915-928 MHz | 916.575 MHz · cr 4/8 | Nessun limite di ciclo di lavoro. Fino a 30 dBm. Qui la banda parte da 915 MHz, quindi il canale nordamericano non è legale. È la raccomandazione di MeshCore stessa per l'Australia, quindi i ripetitori MeshCore già presenti lì possono trasportare i bollettini Meshbell. |
| Nuova Zelanda | 915-928 MHz | 917.375 MHz | Nessun limite di ciclo di lavoro. Fino a 30 dBm. Anche qui la banda parte da 915 MHz, quindi il canale nordamericano non è legale. È la raccomandazione di MeshCore stessa per la Nuova Zelanda, quindi i ripetitori MeshCore già presenti lì possono trasportare i bollettini Meshbell. |
| Brasile | 915-928 MHz | 923.125 MHz · sf8 · cr 4/8 | Nessun limite di ciclo di lavoro. Fino a 30 dBm. È la raccomandazione di MeshCore stessa per il Brasile, quindi i ripetitori MeshCore già presenti lì possono trasportare i bollettini Meshbell. |
| Asia sudorientale | 920-923 MHz | 921.875 MHz | Ciclo di lavoro del 10%, quello del paese più severo del gruppo. Fino a 17 dBm. Un'unica impostazione raggruppata per Thailandia, Singapore, Malaysia e Indonesia, quindi controlla il tuo paese prima di lasciare un ponte acceso. La comunità non pubblica nessun canale per questi paesi, quindi questo è di Meshbell, scelto lontano dalla parte più affollata della finestra. |
| Vietnam | 920-923 MHz | 920.25 MHz · sf8 | Ciclo di lavoro del 10%. Fino a 17 dBm, e qui le regole cambiano, quindi controlla quelle in vigore prima di lasciare un ponte acceso. È la raccomandazione di MeshCore stessa per il Vietnam, quindi i ripetitori MeshCore già presenti lì possono trasportare i bollettini Meshbell. |
| India | 865-868 MHz | 866.5 MHz | Ciclo di lavoro dell'1%, circa 36 secondi di trasmissione all'ora. Fino a 16 dBm. La radio non riesce a rispettare da sola un limite così stretto, quindi è il ponte a doversi razionare. La comunità non pubblica nessun canale per l'India, quindi questo è di Meshbell, scelto lontano dalla parte più affollata della banda. |
| Corea del Sud | 920.9-923.3 MHz | 921.4 MHz | Nessun limite di ciclo di lavoro, ma la radio deve ascoltare prima di trasmettere. Fino a 23 dBm. |
| Giappone | 920.6-928 MHz | 924.6 MHz · bw 125 kHz | Ciclo di lavoro del 10% e un ascolto prima di ogni trasmissione. Fino a 16 dBm. È la larghezza di banda maggiore a tenere una singola emissione abbastanza breve per le regole giapponesi. |
| Russia | 864-865 MHz | 864.5 MHz | Ciclo di lavoro dello 0.1%, circa 3.6 secondi di trasmissione all'ora, a meno che la radio non ascolti prima di trasmettere. Fino a 16 dBm. |
Se una riga non dice altrimenti, un canale usa sf7, cr 4/5 e bw 62.5 kHz. Una riga che segue un canale MeshCore porta quello che usa quel canale, ed è per questo che diverse mostrano un fattore di spreading o un tasso di codifica diverso, e il Giappone usa bw 125 kHz per rientrare nelle regole giapponesi. Due radio si sentono tra loro solo quando frequenza, larghezza di banda, fattore di spreading e tasso di codifica coincidono tutti.
Le radio esistono in due famiglie, una tagliata per 902-928 MHz e una tagliata per 863-870 MHz, e insieme coprono tutte le regioni di questo elenco, ma la banda cinese 470 MHz richiede un chip radio diverso e un'antenna diversa, quindi non è un'impostazione su cui si possa passare.
Tre regioni non sono pronte. Giappone, Corea del Sud e Russia si aspettano una radio che ascolti prima di trasmettere, e il firmware MeshCore non lo fa ancora, quindi quelle tre restano disattivate finché non lo farà. Una regione porta anche un tetto di potenza, e la potenza è un'impostazione separata sulla radio, quindi cambiare canale non è la stessa cosa che abbassare la potenza. Rileggi sempre la configurazione della tua radio prima di trasmettere.
Configurare un ponte
Un ponte è un nodo sempre acceso sulla strada, di solito un Raspberry Pi, che trasporta il flusso verificato e il livello di coordinamento sul Wi-Fi locale, così il telefono o il browser di ogni vicino può raggiungerli senza rete cellulare e senza internet. È il secondo dei due collegamenti del telefono: il Bluetooth raggiunge una radio da tasca, il Wi-Fi raggiunge un ponte, ed entrambi funzionano senza nessun internet.
Se sei tu l'ospite, un vicino preparato
Il programma di installazione è incluso nell'app e viene esportato direttamente dal tuo telefono, quindi non si scarica niente. Scompattalo sul Pi, esegui lo script di installazione, e ti mostrerà l'indirizzo da distribuire. Il nodo si avvia autosufficiente: serve le schermate di coordinamento, un'app web installabile per i vicini che hanno solo il browser, un codice QR di quell'indirizzo e una vista di amministrazione per la manutenzione. Si annuncia sulla rete locale come _meshbell._tcp, e a trovarlo ci pensa l'app. Non c'è niente da configurare a mano e nessun account da creare.
Se sei un vicino che non ha mai sentito parlare di rete mesh
Collegati al Wi-Fi della strada e apri la scheda Quartiere. L'app cerca il ponte da sola e si connette. Quando il rilevamento ha bisogno di una mano, fa le domande semplici, è questa la rete giusta ed è acceso il ponte, e offre un campo per l'indirizzo manuale. Se un computer riesce a raggiungere il ponte ma questo telefono no, quasi sempre i due sono su reti Wi-Fi diverse.
Il ponte consegna, non decide mai. Un ponte può far passare un'allerta verificata, ma non può renderla vera. Le firme vengono controllate sul tuo dispositivo, e in un semplice browser vengono controllate in quel browser. Un ponte compromesso o malevolo può scartare o ritardare i messaggi. Non può mai falsificarne uno affidabile. Ecco perché il modello di fiducia sta sul telefono e non sul nodo.
Architettura
La logica di dominio è pura e portabile. Si compila e si collauda su un Raspberry Pi senza nessun hardware Apple nel ciclo, quindi le parti che decidono se un messaggio è affidabile vengono verificate di continuo e non solo al momento del rilascio. L'app iOS è un sottile strato di visualizzazione sopra di essa.
- JSON canonico, con chiavi ordinate e ASCII fissato, dà a ogni dispositivo una preimmagine identica byte per byte, così un indirizzo di contenuto calcolato su un telefono coincide con uno calcolato su un nodo.
- Firma e verifica Ed25519, una sola implementazione su Apple e su Linux.
- Un registro a solo accodamento e solo inserimento. I documenti non vengono mai aggiornati né eliminati, quindi la storia, correzioni comprese, si conserva e si può ricontrollare.
- Un controllo di conformità tra linguaggi: le stesse trame vengono decodificate dall'app e da un nodo Python indipendente e confrontate byte per byte, così i due non possono divergere in silenzio.
Limiti dichiarati
Detti chiaramente, perché uno strumento di emergenza che si vanta più di quello che è diventa pericoloso.
- Meshbell è una beta iniziale. Ha trasportato un bollettino firmato attraverso radio LoRa reali e lo ha verificato su un telefono. Non sostituisce i servizi di emergenza ufficiali, quindi mantieni attive le allerte che hai già.
- Il risultato al banco di prova è un solo salto. La ritrasmissione multi-salto è progettata e implementata, non ancora misurata sul campo, e nessuna cifra di distanza su questo sito è misurata al banco.
- I documenti troppo grandi per una sola trama vengono divisi, e il riassemblaggio di più frammenti non è ancora stato visto completarsi sul telefono al banco di prova. Un gruppo incompleto resta un'anteprima e lo dice.
- Le chiavi di firma vivono nel portachiavi iOS, solo su questo dispositivo. Sono estraibili da qualunque cosa possa già leggere il portachiavi dell'app. Qui non c'è nessuna protezione di enclave hardware e non ne dichiareremo una.
- I documenti sono firmati, non cifrati. Meshbell non è messaggistica privata. Dai per scontato che tutto ciò che è in onda possa essere letto da chiunque sia a portata.
- La distribuzione delle chiavi, cioè come il tuo dispositivo impara quale chiave pubblica appartiene a chi, è un lavoro in corso. Una firma dimostra il possesso di una chiave. Legare una chiave a una persona reale è un problema separato e voluto, che oggi si risolve incontrandosi di persona.
- La ricezione funziona solo mentre l'app è aperta. Non c'è nessun ascolto in background.
- Il livello di coordinamento non è verificato per scelta progettuale ed è separato dal canale verificato delle allerte firmate. È utile per la logistica, mai una fonte di istruzioni ufficiali, ed è solo su rete locale, quindi raggiunge chi è sul ponte e non la rete mesh più ampia.
- Oggi Meshbell non è interoperabile via radio con le radio Meshtastic.