Diagram updates

This commit is contained in:
Netscape Navigator 2020-04-27 08:00:56 -05:00
parent d554ef9e32
commit c4cb9b2b6b
3 changed files with 33 additions and 26 deletions

View File

@ -10,11 +10,8 @@ A synchronizing peer-to-peer messaging protocol that is:
* delay tolerant
* built for [sneakernet](https://en.wikipedia.org/wiki/Sneakernet) from the ground up
# Protocol Maturity
The [first working implementation of a Pigeon protocol client](https://tildegit.org/PigeonProtocolConsortium/pigeon_ruby) is complete, but lacks documentation. Many lessons were learned while building the first working client and the protocol has changed slightly. This document may be slightly out of date. It will be updated soon. Feedback is welcome.
This is a planning document for a protocol and the first software packages that will implement the protocol.
Email `contact` at `vaporsoft.xyz` to ask questions or get involved. Your feedback is solicited and appreciated. Seriously, send us an email! We look forward to hearing from you.
# Why?
@ -52,7 +49,7 @@ Below are some possible use cases to illustrate real-world applications. Once pr
In summary, Pigeon protocol offers benefits above what a traditional sneakernet can provide. A Pigeon protocol message:
* Is automatiaclly backed up by peers and peers-of-peers (gossip).
* Is automatically backed up by peers and peers-of-peers (gossip).
* Cannot be forged by malicious parties.
* Cannot be altered by anyone except the author.
@ -60,20 +57,22 @@ In summary, Pigeon protocol offers benefits above what a traditional sneakernet
Each node in a swarm of peers has a local "log". The log is an append only feed of messages written in an ASCII-based serialization format. Messages are signed with a secret key to validate a message's integrity and to prevent tampering by untrusted peers. Nodes in the swarm "follow" other logs from peers of interest. Nodes always replicate the logs of their peers and "gossip" information about peers across the swarm. Gossip information is packaged into "bundles" which contain backups of peer logs in an efficient binary format that can be easily transmitted via sneakernet, direct serial connection, or any high throughput medium, regardless of latency.
Log synchronization via Sneakernet is the main use case for Pigeon messages to be transmitted. Transmission of SD Cards via postal mail offer an excellent medium for transmission of Pigeon messages, although any data transfer medium is theoretically possible.
Log synchronization via Sneakernet is the main use case for Pigeon messages to be transmitted. SD Cards sent via postal mail offer an excellent medium for transmission of Pigeon messages, although any data transfer medium is theoretically possible.
![](sync.png)
# What a Message Looks Like
Messages use a custom ASCII-based encoding scheme (shown below).
Example 1:
```
author @78V80T9Q7862GW5KTNGSDBKMSA53WE98G8TGFDS6HC9HEABFD64G.ed25519
kind ba16b9f6-a0bc-44e4-b873-da52308186e8
prev %KDKK65CX8GMV7EFCJ4K3J77T38SNDE6DX1TE7AKKGW7X74Z63WKG.sha256
depth 6
lipmaa 5
depth 0
lipmaa 0
hello:"World"
this_is_a:"Key"
@ -88,7 +87,7 @@ Example 2:
author @78V80T9Q7862GW5KTNGSDBKMSA53WE98G8TGFDS6HC9HEABFD64G.ed25519
kind b049f082-861f-43f0-bc10-ca97b2b91b2e
prev NONE
depth 0
depth 1
lipmaa 0
cool_message:%KDKK65CX8GMV7EFCJ4K3J77T38SNDE6DX1TE7AKKGW7X74Z63WKG.sha256
@ -98,12 +97,6 @@ signature X4KF6YM3YMR457VTJ7HGY92F6W65YQBEG3WS5QDFNSAF45KHMDZZZRWK710F04Y6TPM2AJ
![A hierarchy diagram showing how the message in example 2 points back to example 1, and how example 1 points back to NONE](diagram1.png)
# When is Pigeon the Wrong Choice?
* When the application requires true deletion of data, ephemeral data or mutability of previously created data. Pigeon feeds are immutable, append-only and permanently replicated by peers.
* When the application requires realtime interactions or does not benefit from delay tolerance. Support for TCP or UDP sockets is unlikely to ever be added to core libraries.
* Extremely "chatty" protocols. Pigeon was built with the assumption that data storage is cheap and data transfer is expensive and slow. Use cases with complex handshakes, pinging or timeouts may not be well suited to this protocol.
# I Have Internet Access. Why Should I Care?
* [Encryption is Not Preventing Law Enforcement from Investigating Crime](https://www.alec.org/article/encryption-is-not-preventing-law-enforcement-from-investigating-crime/)
@ -129,6 +122,17 @@ I've also been inspired by the compactness and minimalism of [SQLite, which shou
In many ways, this protocol can be considered an amalgam of the best ideas from both SQLite and Secure Scuttlebutt.
# When is Pigeon the Wrong Choice?
* When the application requires true deletion of data, ephemeral data or mutability of previously created data. Pigeon feeds are immutable, append-only and permanently replicated by peers.
* When the application requires realtime interactions or does not benefit from delay tolerance. Support for TCP or UDP sockets is unlikely to ever be added to core libraries.
* Extremely "chatty" protocols. Pigeon was built with the assumption that data storage is cheap and data transfer is expensive and slow. Use cases with complex handshakes, pinging or timeouts may not be well suited to this protocol.
# Protocol Maturity
The [first working implementation of a Pigeon protocol client](https://tildegit.org/PigeonProtocolConsortium/pigeon_ruby) is complete. We are temporarily halting feature development to focus on documentation, bug fixes and outreach. Contact us to get involved.
# Constraints and Design Philosophy
* Configuration is bad and should be considered a design comprise in nearly all situations. We will allow a limit of 10 configuration options for all eternity. These are simple key/value pairs. No nesting, no namespacing, no dots, no dashes, no nested config names, no arrays, none of that crap. Seriously, I'm watching you.

View File

@ -9,24 +9,27 @@ classDiagram
}
class Example1{
kind hello_world
author @78V...64G.ed25519
kind b04...b2e
prev NONE
depth 0
lipmaa 0
key1:"my_value1"
key2:"my_value2"
key3:"my_value3"
key4:%JVKH...BVZG.sha256
key5:&29F3...E6CA.sha256
key6:@GALD...JCCG.ed25519
cool_message:%KDK...WKG.sha256
signature X4K...E10.sig.ed25519
}
class Example2{
author @DYDG...CVE0.ed25519
kind hello_world
prev %6CF2...A982.sha256
author @78V...64G.ed25519
kind ba1...6e8
prev %KDK...WKG.sha256
depth 1
lipmaa 1
hello:"world"
hello:"World"
this_is_a:"Key"
signature JSS...W3G.sig.ed25519
}
```

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 27 KiB