Neither snow nor rain nor heat nor gloom of night stays these violet couriers from the swift completion of their appointed rounds. A project for the curious.
Summary of Smoke
- Aliases. Preserve your contacts.
- Almost zero-dependency software.
- Application lock.
- Argon2id and PBKDF2 key-derivation functions.
- Automatic, oscillatory public-key exchange protocol, via SipHash.
- BSD 3-clause license.
- Completed.
- Content is recorded via authenticated encryption.
- Decentralized. TCP, and UDP multicast and unicast.
- Does not require Internet connectivity.
- Does not require registration. Telephone numbers are not required.
- Encrypted communications.
- Eventful tasks. Limited polling.
- F-Droid.
- Fiasco forward secrecy.
- Future-proof software.
- Introduces Cryptographic Discovery. Cryptographic Discovery is a practical protocol which creates coordinated data paths.
- Juggling Juggernaut Protocol!
- Manufactured tool tips!
- McEliece Fujisaka and Pointcheval.
- Message structures do not explicitly expose contents. Header-less protocols! Some messages do include type information.
- Mobile servers via SmokeStack.
- Obfuscation of resident secret keys.
- Optional foreground services.
- Optional silence over the wires.
- Original implementation of SipHash.
- Ozone destinations: private and public repositories.
- Post offices for messages of the past.
- Private servers.
- Public and private public-key servers.
- Rainbow digital signature scheme.
- Reliable distribution of archived messages.
- Reliable distribution of deliverable text messages.
- SPHINCS digital signature scheme.
- SSL/TLS through SmokeStack.
- Semi-compatible with Spot-On via Fire.
- Share files with TCP utilities such as Netcat.
- SipHash-128.
- Smoke and mirrors.
- Software congestion control.
- Software manual included.
- Steam, reliable file sharing. TCP over the Echo!
- Steamrolling, or, real-time broadcasting of inbound Steams to fellow participants.
- Super McEliece: m = 13, t = 118.
Please read https://github.com/textbrowser/smoke/tree/master/Documentation for more information.
Starting a Conversation
- Download and install Smoke.
- Download and install SmokeStack, Spot-On, or Spot-On-Lite. More adventurous operators are welcome to create servers using ncat and socat.
- Define a private or public listener.
- Connect Smoke to defined listener.
- Share aliases: super-alias-1, super-alias-2.
- Define aliases in respective Smoke instances.
- Share public keys.
- Done!
Steamrolling is the process of real-time broadcasting of complete and
incomplete inbound Steams. Let’s review a colorful example.
*---------------*
| Participant A | <--------------------------------------
*---------------* |
| |
| (Steam A) |
V |
*---------------* (Steam A) *---------------* | (Steam A)
| Participant B | ----------> | Participant C | |
*---------------* *---------------* |
| |
| (Steam A) |
V |
*---------------* |
| Participant D | |
*---------------* |
| |
| (Steam A) |
V |
*---------------* |
| Participant E | ---------------------------------------
*---------------*
Participants C, D, and E shall receive Steam A data as participant B receives
and writes Steam A data. If the stream of bytes between A and B is interrupted,
the interruption will percolate throughout the network. Unique keys are
established between each of the paired participants.