Header illustration for "Meshtastic encryption: what it protects and what it doesn't"

"Meshtastic encryption: what it protects and what it doesn't"

Meshtastic encryption: what it protects and what it doesn't

Meshtastic nodes get marketed with reassuring padlock imagery, and it is true that the traffic between nodes is encrypted. But encryption is not a single switch: Meshtastic uses two different schemes for two different kinds of traffic, one of them far stronger than the other, and the weakest link in the chain is usually the default channel key that ships on every factory-fresh node. Before you put anything you actually care about on a mesh, you need to know which layer protects what. This guide walks through the mechanics in plain English, then gives you a short configuration checklist. If you are still choosing hardware, our Meshtastic first-node checklist for Australia covers the radio and compliance side; this article is about what your nodes do once they are talking.

Two encryption layers, two different jobs

Meshtastic traffic on the LoRa radio is encrypted in two ways depending on message type. The project's own documentation is the reference here, and it is refreshingly blunt about the limits — start with the Meshtastic encryption documentation.

Channel messages (broadcasts). Anything sent to a channel — the text messages and position broadcasts that most mesh users live in — is encrypted with AES-256 in CTR mode using a pre-shared key (PSK) attached to that channel. Each channel carries its own key, and a node can hold several channels at once. The key length decides the cipher strength: 0 bytes means no encryption at all, 16 bytes gives you AES-128, and a full 32-byte key gives AES-256. The channels and security reference documents the key-length semantics and the exact nonce construction if you want to go deeper.

Direct messages (node-to-node). Since firmware 2.5, messages addressed to a specific node use public-key cryptography instead: every device generates a unique public/private key pair, direct messages are encrypted with the recipient's public key, and messages are signed so the recipient can verify the sender. This is a meaningful upgrade — it means the other people holding your channel key cannot read your direct messages.

The header is never encrypted. Packet headers, which carry sender node number, destination, packet ID, hop limit and a one-byte channel hash, always go out in the clear. That is a deliberate engineering choice: it lets nodes relay packets they cannot decrypt, which is the entire point of a mesh. But it means metadata is public on the air. Anyone with a receiver can see who is transmitting, when, how often, and to which channel hash — even when the message content is unreadable. Traffic analysis is possible with nothing more than another LoRa radio.

The default key problem

This is the one that bites new users. The primary channel on every factory-fresh Meshtastic node is encrypted with a short-form key that resolves to a publicly known value — the familiar AQ== you may have seen in channel URLs. It is printed in the documentation. Every node that has never been reconfigured uses it.

The practical consequence: an unmodified node's channel traffic is encrypted in the cryptographic sense but public in the real sense, because the key is on the internet. Thousands of hobbyist nodes still run it so they can join public community meshes, which is fine — that is what it is for. The failure mode is when someone buys a Meshtastic starter kit, powers it up, and starts sending messages they believe are private. They are not. If your traffic matters, the first configuration change is to generate a random 256-bit key for your channel, or create a new channel entirely, and share it with the people you actually talk to — out of band, never over the mesh itself.

What the documentation admits it does not do

The project's own limitation notes are worth reading before you decide how much to trust a mesh. Summarising honestly:

None of this makes Meshtastic a bad product. It makes it a mesh radio with honest, documented trade-offs, and it means your configuration choices carry real weight.

A configuration checklist that matches the threat model

For hobby and community use — neighbourhood meshes, event networks, hiking comms — the following is enough:

  1. Regenerate the primary channel key. Use the app's "generate random key" option, which produces a full 256-bit PSK. Never type a memorable password as the key; let the app make the randomness.
  2. Keep unattended router nodes off private channels. Meshtastic's own guidance is direct: do not configure private channel PSKs on nodes you will not physically control, because anyone who gets their hands on the hardware can extract the key. Unattended relay nodes should carry only public channels and relay everything else blind — which, as noted above, they do happily.
  3. Prefer direct messages for anything sensitive. The public-key path added in firmware 2.5 is stronger than channel encryption for one-to-one traffic: no shared key to leak, sender authentication included.
  4. Turn position precision down. On a shared channel, exact coordinates broadcast to everyone with the key. Set per-channel position precision to a coarse tile unless the recipient genuinely needs the metres.
  5. Update firmware before first boot, and re-check after any security advisory. The key-generation issue above was fixed in firmware, not in hardware.

For adversarial environments — a phrase we use deliberately, because our threat model guide for privacy hardware applies to radios too — Meshtastic alone is not the right tool for content that must not leak even in theory. It shines as a low-bandwidth, infrastructure-free comms layer for things that are merely private, not things that are operationally critical.

Physical security is part of the crypto

The most realistic attack on a mesh node is a hand, not a math attack. A captured node surrenders its channel keys, its contacts and potentially its message cache — and because channel encryption has no forward secrecy, one stolen node can expose the whole channel's history for anyone who has been recording. Two mitigations that cost nothing: run unattended relays keyless (as above), and treat any node that leaves your sight as compromised for key-rotation purposes. Rotate channel keys after an event or trip, the same way you would rotate a password after a suspicious login.

Hardware that fits the security posture

If you are building a small private mesh, the honest minimum is two or more nodes sharing a generated key. Our StealthMesh Duo pre-configured pair ships with a private channel already generated and coordinated between the units, which removes the default-key footgun entirely — you still control and can regenerate the key. For longer links, a LILYGO T-Beam node with GPS or the cased Heltec V3 node adds range and mounting options; pair either with a tuned 868/915 MHz whip antenna so you are not retransmitting failed packets across the neighbourhood (fewer hops is quieter on the air, which is its own kind of privacy).

The takeaway

Meshtastic's encryption is real, documented and honest about its limits: strong AES-256 on channel payloads if and only if you replace the default key, end-to-end public-key protection on direct messages, and a permanently public metadata layer that no configuration changes. Configure deliberately, keep firmware current, and match what you send to what the protocol actually protects. That discipline costs ten minutes on first boot and it is the difference between a private mesh and a public one wearing a padlock.

← All posts