/smoke

In a burning world, there will always be Smoke. Completed.

Primary LanguageJavaOtherNOASSERTION

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.

alt text

Smoke

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

  1. Download and install Smoke.
  2. Download and install SmokeStack, Spot-On, or Spot-On-Lite. More adventurous operators are welcome to create servers using ncat and socat.
  3. Define a private or public listener.
  4. Connect Smoke to defined listener.
  5. Share aliases: super-alias-1, super-alias-2.
  6. Define aliases in respective Smoke instances.
  7. Share public keys.
  8. 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.

alt text Get it on F-Droid!