Meshtastic Under the Microscope From Chirps to Chat
Allan Riordan Ball
RF Village @ DEF CON 33 · Day 1 · RF Village
Overview
Allan Riordan Ball’s talk at RF Village provided an in-depth, low-level exploration of Meshtastic, an off-grid, multi-mile, low-power mesh network. Meshtastic enables peer-to-peer communication without relying on traditional infrastructure, making it a robust solution for environments where cellular or internet connectivity is unavailable or compromised. The technology leverages LoRa (Long Range) radio, which is renowned for its exceptional resilience to noise and its ability to transmit signals effectively even below the noise floor.

Key moments
- 0:00 Introduction and live chirp capture demo
- 0:30 Meshtastic overview: off-grid, low-power mesh network
- 2:00 Software and hardware tools for deep dive
- 3:50 Understanding LoRaWAN vs. Meshtastic's LoRa usage
- 5:40 Chirp Spread Spectrum: LoRa's resilient modulation explained
Meshtastic Under the Microscope: From Chirps to Chat
Speakers: Allan Riordan Ball
Conference: RF Village
YouTube: https://www.youtube.com/watch?v=SM1XSxP6W78
Overview
Allan Riordan Ball’s talk at RF Village provided an in-depth, low-level exploration of Meshtastic, an off-grid, multi-mile, low-power mesh network. Meshtastic enables peer-to-peer communication without relying on traditional infrastructure, making it a robust solution for environments where cellular or internet connectivity is unavailable or compromised. The technology leverages LoRa (Long Range) radio, which is renowned for its exceptional resilience to noise and its ability to transmit signals effectively even below the noise floor.
This presentation meticulously deconstructed Meshtastic, starting from the fundamental radio chirps and progressing through the layers of modulation, encoding, and application-level packet structures. Ball demonstrated how to capture, visualize, and decode Meshtastic messages using readily available Software Defined Radio (SDR) tools and custom scripts. Beyond merely analyzing existing traffic, he also showcased the ability to craft and transmit custom Meshtastic messages, bypassing the network’s default protocol rules. This deep dive is crucial for anyone interested in the inner workings of low-power wide-area networks, providing insights into their security, resilience, and potential for both legitimate and unauthorized interaction.
The talk highlights the blend of open-source software and proprietary radio technology that defines Meshtastic. By dissecting the protocol from the physical layer up to the chat application, Ball provided a comprehensive understanding of how these decentralized networks function. This level of analysis is vital for identifying vulnerabilities, developing custom applications, and informing defensive strategies to secure off-grid communication channels against potential misuse or disruption.
Background
▶ Watch: Introduction and live chirp capture demo (0:00)
Meshtastic is an open-source, community-driven project that transforms low-cost, low-power LoRa radio modules into a resilient, off-grid mesh network. Users install an app on their phone (Android or iOS) which connects to a small LoRa device, acting as a node in the mesh. These devices can transmit messages several miles, with messages automatically relayed across multiple hops to reach their destination. This architecture makes Meshtastic highly valuable for disaster relief, wilderness communication, or any scenario requiring robust, infrastructure-independent messaging.
The core radio technology underpinning Meshtastic is LoRa, a proprietary radio modulation and encoding system developed by Semtech. While LoRa is often associated with LoRaWAN, a commercial system designed for IoT devices to connect to the internet via base stations, Meshtastic exclusively utilizes LoRa's physical layer for peer-to-peer communication, eschewing the LoRaWAN protocol entirely.
To understand LoRa, it's helpful to briefly recap common radio modulations. Amplitude Modulation (AM) varies the strength of a carrier wave to encode information, while Frequency Shift Keying (FSK) encodes digital data by shifting the carrier frequency between discrete values (e.g., higher for a '1', lower for a '0'). LoRa, however, employs a distinct and highly clever modulation scheme known as Chirp Spread Spectrum (CSS), or sometimes Frequency Shift Chirp Modulation. Instead of static frequencies, CSS uses "chirps"—tones that continuously sweep upwards or downwards in frequency over a period. This unique approach contributes significantly to LoRa's remarkable resilience to noise and its ability to operate effectively even when the signal strength falls below the noise floor, a concept that remains challenging for many to intuitively grasp but is fundamental to LoRa's effectiveness.
The talk presumes some familiarity with Software Defined Radio (SDR) and related tools. Specific prerequisites mentioned include basic knowledge of GNU Radio, which is used for signal processing; Wireshark, for packet analysis; and Protobufs (Protocol Buffers), Google's efficient binary format for serializing structured data, which Meshtastic uses for its application layer messages. The hardware setup for the demonstration involved a Meshtastic T-1000 device for transmitting messages, a HackRF Software Defined Radio (SDR) for receiving and capturing signals, and a simple Arduino with a built-in LoRa chip for custom transmissions. This combination of tools and hardware allowed for a full spectrum of interaction, from passive observation to active manipulation of the Meshtastic network.
Key Findings
▶ Watch: Meshtastic overview: off-grid, low-power mesh network (0:30)
Allan Riordan Ball's presentation delivered several key findings and contributions to the understanding and security analysis of Meshtastic. Foremost among these was the successful, low-level reverse engineering and practical demonstration of LoRa's Chirp Spread Spectrum (CSS) modulation and its subsequent encoding layers. This involved capturing raw RF signals, visually identifying the characteristic chirps, and then demodulating them into symbols, finally decoding these symbols into Meshtastic application-layer bytes.
A significant achievement was the development and demonstration of a GNU Radio flow graph capable of processing live LoRa signals from an SDR. This custom pipeline performed the intricate tasks of demodulation, frame synchronization, and applying the various LoRa encoding/decoding steps such as gray mapping, interleaving, de-whitening, and CRC checks. The output of this flow graph—raw Meshtastic packet bytes—was then fed into a Python script for further application-layer processing.
Complementing the GNU Radio setup, Ball created a custom Lua dissector for Wireshark. This dissector allowed for real-time, human-readable analysis of Meshtastic packets, clearly distinguishing the plaintext 16-byte header from the encrypted payload. The demonstration revealed that critical metadata, including sender, destination, packet ID, and channel hash, is transmitted unencrypted, providing valuable insights into network activity even without decrypting the message content.
Perhaps the most impactful finding was the demonstration of crafting and transmitting custom Meshtastic messages using an off-the-shelf Arduino with an integrated LoRa chip. This proof-of-concept bypassed Meshtastic's official firmware and its higher-level protocol rules, such as Carrier Sense Multiple Access with Collision Avoidance (CSMA/CA). This capability underscores a significant security implication: the network can be interacted with outside the intended protocol, opening avenues for denial-of-service (DoS) attacks through channel jamming or message spamming, as well as potential for spoofing.
Finally, the talk confirmed the use of AES-256 encryption for Meshtastic message payloads, emphasizing its reliance on pre-shared keys. While robust cryptography is in place, the security of communications ultimately hinges on the strength and secure management of these shared keys. The ability to fully decode and decrypt messages (given the correct key) highlights the importance of strong key hygiene for Meshtastic users.
Technical Deep Dive
▶ Watch: Software and hardware tools for deep dive (2:00)
The technical core of Allan Riordan Ball's talk lay in its meticulous dissection of LoRa's physical layer and Meshtastic's application layer.
LoRa Modulation: Chirp Spread Spectrum (CSS)
LoRa's distinctive modulation, CSS, is visualized as "waves up and down" in a spectrogram, resembling the Meshtastic logo. Instead of transmitting at a single frequency, CSS uses chirps, which are tones that linearly sweep across a frequency band. An up-chirp sees frequency increase over time, while a down-chirp sees it decrease.
The genius of CSS lies in how it encodes data. Each chirp represents a symbol, and the value of that symbol is encoded by the starting frequency of the chirp within its designated frequency band. For example, with a spread factor of 7, there are 2^7 = 128 possible symbols (0 to 127). The radio receiver observes where a chirp begins its sweep to determine the symbol's value. This continuous sweep across a wide bandwidth makes LoRa signals highly resilient to narrowband interference and multipath fading, enabling communication below the noise floor.
A LoRa transmission begins with a preamble, a series of identical up-chirps. These are crucial for the receiving radio to achieve synchronization. By detecting a repeated symbol (e.g., 50, 50, 50), the radio can determine if its internal "grid" for symbol detection is misaligned and adjust it to the correct starting position of the chirps. Following the preamble is a sync word, a specific symbol (e.g., 0x2B for Meshtastic) that identifies the transmission as belonging to a particular application or network. The preamble concludes with two and a quarter down-chirps, signaling the end of the synchronization phase and the imminent arrival of the actual payload data.
Dechirping for Demodulation
A fundamental technique in LoRa demodulation is dechirping. This process simplifies the complex CSS signal into something more manageable for traditional signal processing. By complex-multiplying the received up-chirp with a locally generated down-chirp (its inverse), the sweeping frequency characteristic is effectively flattened. This transforms the chirp into a single, constant frequency tone. Once dechirped, a standard Fast Fourier Transform (FFT) can be applied to identify the dominant frequency, which directly corresponds to the original symbol's value. This conversion makes the complex CSS signal amenable to conventional frequency-domain analysis.
LoRa Encoding Layers
After demodulation yields raw symbols, several layers of encoding are applied before the data reaches the application layer:
- Cyclic Redundancy Check (CRC): An error-detection hash is appended to the data, allowing the receiver to verify data integrity.
- Whitening (or Scrambling): The data is combined with a known pseudo-random sequence. This ensures that the payload never contains long runs of zeros or sequences that could be mistaken for the preamble or sync word, improving overall reliability and synchronization.
- Forward Error Correction (FEC): Redundant bits are added to the data, enabling the receiver to detect and correct a certain number of errors without retransmission.
- Interleaving: Bits from individual bytes are spread across multiple symbols. This technique, combined with FEC, minimizes the impact of burst errors; if one symbol is corrupted, only a portion of several original bytes is affected, making recovery more probable.
- Gray Coding: This encoding scheme maps consecutive numbers such that only one bit changes between adjacent values. This is particularly useful in LoRa because slight errors in symbol detection (e.g., misreading a symbol by one unit) result in only a single bit error, rather than a potentially large number of bit errors that would occur with standard binary encoding, thus improving error recovery.
Tools and Workflow
The practical demonstration involved a suite of SDR and analysis tools:
- HackRF One: Used as the primary Software Defined Radio to capture raw IQ (In-phase and Quadrature) data from the airwaves.
- GQRX: A graphical SDR receiver, used for real-time visualization of the RF spectrum and recording IQ samples from the HackRF. The speaker captured signals around 915 MHz (Bay Area "medium slow" preset) and noted the 917 MHz (DEF CON "short turbo" preset).
- Inspectrum: A powerful tool for detailed analysis and visualization of recorded IQ data. It was used to zoom into the waterfall plot, revealing the characteristic chirps, and to manually align a grid to understand symbol boundaries and encoding.
- GNU Radio: The central processing engine. Allan utilized Joachim Thiemann's open-source blocks for LoRa demodulation. His custom flow graph connected the HackRF source, performed frequency translation to baseband, filtering, frame synchronization (detecting preamble, sync word, down-chirps), demodulation (dechirping), and applied the gray mapping, interleaving, de-whitening, and CRC checks.
- Python: A custom Python script was used to glue the GNU Radio output to Wireshark and to handle Meshtastic-specific processing, including parsing Protobuf messages and performing AES-256 decryption using pre-shared keys.
- Wireshark with Lua Dissector: The final stage of analysis. Wireshark received UDP packets containing the decoded Meshtastic data from the Python script. A custom Lua dissector was written to parse these bytes into a human-readable format, revealing the 16-byte plaintext header (destination, sender, packet ID, flags, channel hash) and the decrypted payload content, such as text messages ("Weep") or node information (name, hardware model, public key).
Meshtastic Packet Structure
A Meshtastic packet, once fully decoded, consists of:
- A 16-byte plaintext header: This includes crucial metadata such as the destination address, sender address, a unique packet ID, flags (e.g., hop limit to prevent infinite relaying), and a channel hash. This information is visible to anyone intercepting the transmission.
- An encrypted payload: This contains the actual message content. It is structured using Protobufs and encrypted with AES-256 using pre-shared channel keys. The payload can contain various message types, indicated by a "port number," such as text messages or node information updates.
This comprehensive technical breakdown demonstrates the intricate layers involved in LoRa and Meshtastic communication, from the fundamental radio chirps to the application-level data.
Demo / Proof of Concept
▶ Watch: Understanding LoRaWAN vs. Meshtastic's LoRa usage (3:50)
Allan Riordan Ball’s presentation was rich with practical demonstrations, showcasing each stage of his Meshtastic analysis and interaction.
The first part of the demo focused on capturing and visualizing a live Meshtastic transmission. Using a HackRF One as an SDR receiver and GQRX for signal visualization, Ball captured a message sent from a Meshtastic T-1000 device. He specifically tuned to the 915 MHz frequency, which is commonly used in the Bay Area with the "medium slow" modem preset. The raw IQ data captured by GQRX was then loaded into Inspectrum, a specialized tool for spectrogram analysis. In Inspectrum, Ball zoomed in on the waterfall plot, clearly illustrating the characteristic up-chirps and down-chirps of the LoRa signal. He demonstrated aligning a grid over these chirps to visually explain how the starting position of each chirp encodes a specific symbol, providing a direct, intuitive understanding of LoRa's modulation.
The next demonstration involved the full decoding pipeline using GNU Radio and Wireshark. Ball launched his custom GNU Radio flow graph, which was configured to receive live RF signals from the HackRF. This flow graph performed the entire LoRa demodulation and decoding process: dechirping, frame synchronization, gray mapping, interleaving, de-whitening, and CRC validation. The resulting raw Meshtastic bytes were then streamed via UDP to a local port. Simultaneously, Wireshark was running, configured with Ball's custom Lua dissector for Meshtastic. As messages were transmitted on the network, Wireshark displayed them in real-time, showing the fully parsed and decrypted packets. This included the plaintext 16-byte header (revealing sender, destination, packet ID, and channel hash) and the decrypted payload content, such as a simple "Weep" text message or detailed node information (device name, hardware model, public key). This showcased the complete ability to intercept, decode, and understand Meshtastic communications.
The final and most impactful proof-of-concept involved transmitting custom Meshtastic messages without using the official firmware. For this, Ball used a simple, inexpensive Arduino board equipped with an integrated LoRa chip. He explained that he had written a Python script to construct Meshtastic packets, which involved using Protobufs to structure the payload, encrypting it with AES-256 (using pre-shared keys), and then prepending the plaintext 16-byte header. This Python script then sent these crafted packets as hexadecimal strings to the Arduino, which was programmed to transmit them as raw LoRa packets.
Ball demonstrated sending the message "sweet potatoes" to the "DEF CON net" channel. He explicitly noted that this method bypassed Meshtastic's higher-level protocol rules, such as Carrier Sense Multiple Access with Collision Avoidance (CSMA/CA), which is designed to prevent nodes from transmitting on top of each other, and the normal message relaying mechanisms. To further illustrate the implications, he quickly wrapped the transmission in a loop, attempting to "spam" the network. While the effectiveness of the spamming varied (some receiver apps might filter such repetitive messages), the demonstration powerfully conveyed the ease with which an attacker could disregard polite protocol behavior and potentially disrupt or flood the Meshtastic network, simply by interacting with the physical layer directly.
Defensive Implications
▶ Watch: Chirp Spread Spectrum: LoRa's resilient modulation explained (5:40)
The detailed analysis and proof-of-concept demonstrations presented by Allan Riordan Ball highlight several critical defensive implications for Meshtastic users and developers. Understanding these vulnerabilities is crucial for securing off-grid communications.
- Metadata Exposure via Plaintext Headers: The demonstration clearly showed that the 16-byte Meshtastic packet header, containing information such as sender ID, destination ID, packet ID, and channel hash, is transmitted unencrypted. This means that anyone monitoring the airwaves can collect significant metadata about network activity, even if they cannot decrypt the message payload. Defenders should be aware that their communication patterns, who is talking to whom, and which channels are active, are publicly visible. This information could be used for traffic analysis, network mapping, or identifying high-value targets.
- Criticality of Key Management for AES-256: While Meshtastic utilizes robust AES-256 encryption for its message payloads, this security relies entirely on pre-shared keys. If these keys are weak, easily guessable, or compromised through other means (e.g., physical access to a device, social engineering), the entire communication on that channel becomes exposed. Defenders must prioritize generating strong, unique, and long channel keys for each group or private conversation. Key exchange should ideally happen out-of-band through secure channels, and keys should be rotated periodically.
- Vulnerability to Protocol Bypassing and DoS/Spam Attacks: The ability to craft and transmit custom LoRa packets using simple hardware (like an Arduino) and bypass Meshtastic's firmware-level protocol rules is a significant concern. Specifically, the speaker demonstrated bypassing Carrier Sense Multiple Access with Collision Avoidance (CSMA/CA). This means an attacker can transmit continuously without checking if the channel is clear, leading to:
- Denial-of-Service (DoS): By constantly transmitting, an attacker can effectively jam the channel, preventing legitimate messages from getting through. This can render the network unusable.
- Spamming: Flooding the network with unwanted messages can degrade performance and user experience, making critical communications difficult to discern.
Defenders should be aware that the "unlicensed spectrum" nature of LoRa means there are few legal or technical deterrents to such malicious activity at the physical layer. Meshtastic's firmware could potentially implement more robust detection and mitigation strategies for such malicious transmissions, though it's challenging without centralized control.
- Potential for Spoofing: While not explicitly demonstrated in detail, the ability to craft custom packets implies the potential to spoof sender IDs within the plaintext header. Without strong, inherent cryptographic authentication tied to the sender's identity at a lower layer, an attacker could potentially impersonate legitimate nodes, injecting false information or creating confusion within the network.
- Physical Layer Security Awareness: The talk underscores that even with application-layer encryption, vulnerabilities can exist at the physical layer. Defenders should not solely rely on cryptographic strength but also consider the broader operational security of their network. This includes physical security of devices (to prevent key extraction), awareness of the public nature of metadata, and contingency plans for network disruption.
In summary, defenders using Meshtastic should focus on robust key management, be mindful of the publicly visible metadata, and understand the inherent susceptibility of unlicensed spectrum networks to physical layer disruption. While Meshtastic offers powerful off-grid capabilities, its resilience depends on users and developers proactively addressing these security considerations.
Key Takeaways
- LoRa's Resilience: Meshtastic leverages LoRa's unique Chirp Spread Spectrum (CSS) modulation, enabling highly resilient communication that can operate effectively even below the noise floor in off-grid environments.
- Layered Encoding for Robustness: The LoRa physical layer employs a sophisticated stack of encoding techniques, including CRC for error detection, whitening for signal integrity, Forward Error Correction (FEC), interleaving for distributed error impact, and Gray coding to minimize misread errors.
- Packet Structure and Metadata Exposure: Meshtastic packets consist of a 16-byte plaintext header (revealing sender, destination, packet ID, and channel hash) and an AES-256 encrypted payload, with security dependent on pre-shared keys.
- Open-Source Analysis Capabilities: Tools like HackRF, GQRX, Inspectrum, and GNU Radio, combined with custom Python scripts and Wireshark dissectors, enable comprehensive, low-level analysis and full decoding of Meshtastic traffic.
- Protocol Bypassing and Network Disruption: It is feasible to craft and transmit custom Meshtastic messages using simple hardware (e.g., Arduino), bypassing the official firmware's protocol adherence (like CSMA/CA). This presents a risk of denial-of-service (DoS) attacks, channel jamming, or message spamming.
- Crucial Defensive Measures: Users must prioritize strong, unique channel encryption keys and secure key management. They should also be aware of the public nature of packet metadata and the potential for network disruption on unlicensed spectrum.
About the Speaker(s)
Allan Riordan Ball is a security researcher and enthusiast with a deep interest in low-level radio communication and Software Defined Radio (SDR). His presentation at RF Village demonstrated extensive expertise in reverse engineering wireless protocols, particularly LoRa and Meshtastic. Ball meticulously detailed the technical intricacies of signal modulation, encoding, and packet dissection, showcasing his proficiency with tools like HackRF, GQRX, Inspectrum, GNU Radio, Wireshark, and Python. His work highlights a practical understanding of how these off-grid networks operate from the physical layer upwards, including the ability to build custom tools for analysis and interaction. He mentioned his involvement with Meshtastic in the "Bay Area mostly," suggesting active participation in the community and practical experience with the technology.
Reviews
Dr. Zero (Offensive Security Researcher) — STRONG ACCEPT
Solid, well-executed protocol teardown that earns its runtime by going layer-by-layer from RF chirps to decrypted Protobuf payloads — not just waving at LoRa from a distance. The custom GNU Radio pipeline, Lua dissector, and Arduino-based injection demo collectively make this a real research contribution rather than a Wikipedia reading.
Heather Calloway (CISO) — WEAK
Technically thorough reverse engineering of a niche off-grid mesh protocol, with real findings on metadata exposure and protocol bypass. But the work never crosses from RF Village curiosity into anything a security leader, defender, or policymaker can act on — it stops at the vulnerability door and doesn't walk through it.