aboutsummaryrefslogtreecommitdiffstats
path: root/zot.txt
diff options
context:
space:
mode:
Diffstat (limited to 'zot.txt')
-rw-r--r--zot.txt236
1 files changed, 236 insertions, 0 deletions
diff --git a/zot.txt b/zot.txt
new file mode 100644
index 000000000..66698d543
--- /dev/null
+++ b/zot.txt
@@ -0,0 +1,236 @@
+
+This is the Zot! social communications protocol.
+
+Specification revision: 1
+01 September 2011
+
+Mike Macgirvin
+This specification is public domain.
+
+Zot is a framework for secure delivery of messages on the web based on
+webfinger and encapsulating salmon.
+
+First read the salmon and salmon magic envelope specifications. Zot also
+makes use of webfinger and ActivityStreams and several concepts from RFC822
+(email). Zot encompasses the zot delivery framework, and the zid remote
+access protocol.
+
+****************
+* Zot delivery *
+****************
+
+Format of a zot wrapper. This completely encapsulates a salmon magic envelope
+and provides privacy protection, while defining a delivery envelope - a
+concept familiar to email systems. All addresses in zot are webfinger
+resolvable addresses containing both salmon and zot endpoints.
+
+
+<?xml version='1.0' encoding='UTF-8'?>
+<zot:msg xmlns:zot='http://purl.org/zot/1.0'>
+ <zot:key>((key))</zot:key>
+ <zot:iv>((iv))</zot:iv>
+ <zot:env>((envelope))</zot:env>
+ <zot:alg>AES-256-CBC</zot:alg>
+ <zot:data type='application/magic-envelope+xml'>((salmon))</zot:data>
+</zot:msg>
+
+
+zot:key
+*******
+
+A suitable randomly generated encyption key of length 32 octets for encrypting
+the envelope and salmon packet. This is then encrypted with the sender's
+private key and base64url encoded.
+
+zot:iv
+******
+
+A suitable randomly generated initialisation vector of length 16 octets for
+encrypting the envelope and salmon packet. This is then encrypted with the
+sender's private key and base64url encoded.
+
+zot:env
+*******
+
+This consists of RFC822-style header fields representing the sender and
+recipient(s). Example:
+
+From: bob@example.com
+Sender: bob@example.com
+To: alice@example.com
+
+Both "From:" and "Sender:" MUST be provided, and represent a webfinger
+address of the author and sender respectively. The webfinger address for
+the From address MUST contain a discoverable salmon public key that
+is needed to verify the enclosed salmon data. Sender is used to indicate
+the webfinger identity respnsible for transmitting this message. From
+indicates the message author.
+
+In web-based social systems, a reply to a message SHOULD be conveyed to all of
+the original message participants. Only the author of the original message
+may know all the recipients (such as those contained in Bcc: elements). The
+author of a message always provides 'From'. They MUST duplicate this
+information as 'Sender'.
+
+A reply to a given message MUST be sent to the original From address, and MAY
+be sent to any additional addresses in the recipient list. The original author
+MUST send the reply to all known recipients of the original message, with
+their webfinger identity as Sender, and the comment/reply author as From.
+
+Receiving agents MUST validate the From identity as the signer of the salmon
+magic envelope, and MAY reject it. They MAY also reject the message if the
+Sender is not allowed in their "friend list", or if they do not have a
+suitable relationship with the Sender.
+
+
+To: *
+
+indicates a public message with no specifically enumerated recipients.
+
+The fields To:, Cc:, and/or Bcc: MAY be present. At least one recipient field
+MUST be present. These fields may use the entire syntax specified by RFC822,
+for example:
+
+To: "Bob Smith" <bob@example.com>, "Alice Jones" <alice@example.com>
+
+is a valid entry. A zot envelope is UTF-8 encoded, which differs from RFC822.
+The host component MUST be US-ASCII, with punycode translation of
+internationalised domain names applied.
+
+The entire envelope is encrypted with alg using key and iv. Only AES-256-CBC
+is defined as an algorithm in this specification. The encrypted envelope is
+then base64url encoded for transmission.
+
+The zot envelope MAY include remote addresses. A zot delivery agent MUST parse
+all addresses and determine whether a delivery address to the current endpoint
+is valid. This may be the result of:
+
+ 1. An address contains the public message wildcard '*'
+
+ 2. The current endpoint is a personal endpoint and one of the recipients
+listed in the To:, Cc:, or Bcc: addresses matches the webfinger address of
+the "owner" of the endpoint.
+
+ 3. The current endpoint is a bulk delivery endpoint. The bulk delivery
+ednpoint is defined elsewhere in this document. The bulk delivery agent
+will deliver to all local addresses found in the address lists.
+
+zot:alg
+*******
+
+Currently the only valid choice for alg is "AES-256-CBC".
+
+
+zot:data
+********
+
+The data field is a salmon magic envelope. This is encrypted with alg using
+key and iv. The result is then base64url encoded for transmission.
+
+For the first release of this specification, the data format of the enclosed
+salmon MUST be 'application/xml+atom' representing an Atom formatted
+ActivityStream. This format MUST be supported. Future revisions MAY allow
+other alternate data formats.
+
+
+
+Delivery
+********
+
+The zot message is then POSTed to the zot endpoint URL as
+application/text+xml and can be decoded/decrypted by the recipient using
+their private key.
+
+The normal salmon endpoint for a service MAY be used as an alternate
+delivery method for non-encrypted (e.g. public) messages.
+
+Discover of the zot endpoint is based on webfinger XRD:
+
+<link rel="http://purl.org/zot/1.0/post"
+ href="http://example/org/zot-endpoint" />
+
+
+Bulk Delivery
+*************
+
+A site MAY provide a bulk delivery endpoint, which MAY be used to avoid
+multiple encryptions of the same data for a single destination.
+This is discoverable by providing a zot endpoint with a corresponding
+salmon public key in the site's .well-known/host-meta file.
+A delivery to this endpoint will deliver to all local recipients provided
+within the zot envelope.
+
+
+Extensibility
+*************
+
+This specification is subject to change. The current version which is in
+effect at a given site may be noted by XRD properties. The following
+properties MUST be present in the XRD providing the relevant endpoint:
+
+<Property xmlns:zot="http://purl.og/zot/1.0"
+ type="http://purl.org/zot/1.0/version"
+ zot:version="1" />
+
+<Property xmlns:zot="http://purl.og/zot/1.0"
+ type="http://purl.org/zot/1.0/accept"
+ zot:accept="application/atom+xml" />
+
+Version is specified in this document and indicates the current revision.
+Implementations MAY provide compatibility to multiple incompatible versions
+by using this version indication. The "accept" indicates a range of document
+content types which may be enclosed in the underlying salmon magic envelope.
+We anticipate this specification will in the future allow for a close variant
+of "message/rfc822" and which may include MIME. This may also be used to
+embed alternate message formats and protocols such as
+"application/x-diaspora+xml". If a delivery agent is unable to provide any
+acceptable data format, the delivery MUST be terminated/cancelled.
+
+
+**********************
+* Zid authentication *
+**********************
+
+URLs may be present within a zot message which refer to private and/or
+protected resources. Zid uses OpenID to gain access to these protected
+resources. These could be private photos or profile information - or *any*
+web accessible resource. Using zid, these can have access controls which
+extends to any resolvable webfinger address.
+
+Zid authentication relies on the presence of an OpenID provider element in
+webfinger, and a URL template which is applied to protected resources within
+a zot message.
+
+The template is designated with the characters "{zid=}" within a URL of a zot
+message. When the page is rendered for viewing to an observer, this template
+is replaced with the webfinger address of the viewer (if known), or an empty
+string if the webfinger address of the viewer cannot be determined.
+
+For example in a message body:
+
+http://example.com/photos/bob/picture.jpg?{zid=}
+
+refers to a private photo which is only visible to alice@example.com.
+
+If Alice is viewing the page, the link is rendered with
+
+http://example.com/photos/bob/picture.jpg?zid=alice@example.com
+
+If the page viewer is unknown, it is rendered as
+
+http://example.com/photos/bob/picture.jpg?zid=
+
+
+When the link is visited, the web server at example.com notes the presence of
+the zid parameter and uses information from webfinger to locate the OpenID
+provider for the zid webfinger address. It then redirects to the OpenID
+server and requests authentication of the given person. If this is successful,
+access to the protected resource is granted.
+
+Only authentication via OpenID is defined in this version of the specification.
+
+This can be used to provide access control to any web resource to any
+webfinger identity on the internet.
+
+
+