A guide on building autonomous communication networks with LoRa that work without wider communications infrastructure. Combining techniques for resistance, resilience, and persistence.
I wrote a Java program that would use an USB serial adapter on Linux to talk to a radio modem (I tried a few varieties, mainly RFDesign and Chengdu EByte) and broadcast text messges. The program was roughly subdivided into a backend (repeater, this could be a Raspberry Pi) which didn’t care about message content, and a front-end (user interface) which tried to decrypt every message, enabling messages without any recipient or sender ID.
The cipher was a one-time pad, and the clue to decryption was the unencrypted “pad index” field telling which index to take key material from (the program would take it from all of one’s pads and try sequentially). If the message did decrypt, a checksum was revealed which matched the rest of the message, and this is how the program told the difference between success (show in the UI) and failure (discard, republish for others, don’t retry decryption).
I also demonstrated (poorly) use to comrades in Finland during one Musta Pispala festival, but we didn’t get far at all - buggy software and under-performing hardware are hard to demonstrate. But I did learn a lot and might retry some day. :)
Wow, interesting. :)
I tried getting something like this a while ago.
I wrote a Java program that would use an USB serial adapter on Linux to talk to a radio modem (I tried a few varieties, mainly RFDesign and Chengdu EByte) and broadcast text messges. The program was roughly subdivided into a backend (repeater, this could be a Raspberry Pi) which didn’t care about message content, and a front-end (user interface) which tried to decrypt every message, enabling messages without any recipient or sender ID.
The cipher was a one-time pad, and the clue to decryption was the unencrypted “pad index” field telling which index to take key material from (the program would take it from all of one’s pads and try sequentially). If the message did decrypt, a checksum was revealed which matched the rest of the message, and this is how the program told the difference between success (show in the UI) and failure (discard, republish for others, don’t retry decryption).
I also demonstrated (poorly) use to comrades in Finland during one Musta Pispala festival, but we didn’t get far at all - buggy software and under-performing hardware are hard to demonstrate. But I did learn a lot and might retry some day. :)