ZigZag Transport Protocol ========================= Objective: to transfer ZZ subspaces over a network. This is a datagram-oriented protocol that can operate over both TCP and UDP. The protocol can also operate over a TLS stream. The underlying protocol is assumed to provide for transport-level security. Authentication -------------- Scenarios 1. Preauthentication Used with TLS streams. 2. Plaintext passwords 3. Cryptographic authentication What needs to be proven? - identity For now, we provide only preauthenticated and password-protected services. Authority of the client to order the server to do certain things depends on the authenticated client identity. Privileges: * operator privilege * write privilege * read privilege Naming subspaces ---------------- Temporary naming: -> Client provides server with a definition of a subspace <- Server responds with a name for that subspace Client may not assume that the name is valid after this session. This exchange may not fail for any reason. Permanent naming -> Client provides a server with a name and a definition of a subspace If successful, the name will be valid until deleted, even across sessions. Names are arranged into a hierarchy. Operators of the subspace the name refers to are operators of that name. NOTE: This operation requires operator privilege on the parent name. Reading a subspace ------------------ -> Client requests a reading of a named subspace <- Server sends a description of the subspace NOTE: This operation requires read privileges on that subspace Writing a subspace ------------------ -> Client requests a writing of a named subspace <- Server gives client goahead -> Client sends a description of the subspace NOTE: This operation requires read privileges on that subspace User administration ------------------- Admin stuff: * Create a user * Grant privileges to user * Suspend a user * Delete a user User stuff: * Password change PROTOCOL SPECIFICATION ====================== Messages: from client: PASSAUTH TMPNAME PERMNAME SUBSPACE (see TMPNAME) READ WRITE NEWUSER DELUSER GRANTPRIV REVOKEPRIV FREEZEUSER THAWUSER CHPASS QUIT sequences: SEQ CELL SEQ HARDDIM SEQ SOFTDIM SEQ CONTENT SEQ CONNECT SEQ END UDP SEQ responses: REQ SEQ ACK SEQ END SEQ FINISH ACK SEQ FINISH non-SEQ responses: OK ERR Operation over TCP or TLS: - all messages are sent ONCE - SEQ messages lack seqno and num, SEQ requests lack seqno - no acknowledgement - each non-SEQ message is responded with OK or ERR - OK and ERR are not responded to Operation over UDP: - all non-SEQ messages are resent periodically until acknowledged with OK or ERR - OK and ERR are not acknowledged - SEQ END is resent periodically until acknowledged with ACK SEQ END - after SEQ END, SEQ receiver may send REQ SEQ requests periodically until it receives a corresponding SEQ message, sent once. - after ACK SEQ END and any REQ SEQ, the SEQ session is ended by SEQ FINISH sent by receiving side until it receives ACK SEQ FINISH message