GithubHelp home page GithubHelp logo

v4's Introduction

Workspace for version 4 of the protocol

This is a work-in-progress, do not consider anything here to be final.

Overview

Telehash began almost 10 years ago and has had two major evolutions in that time, the earlier ones being more focused on a distributed hash table and more recently focusing on the security and end-to-end privacy.

This next evolution continues that tradition by moving the protocol's self-defined primary data structures all to use newer standards instead, JOSE and CBOR. The lightweight nature of v3 has led to adoption in IoT use cases and v4 is embracing constrained environments as a principle architecture.

Scratch / Notes

  • All messages will become a JWE
  • Handshakes will contain a JWS + ephemeral JWK and establish a single channel (instead of a v3 'link'), multiple channels can exist simultaneously between peers
  • All JWE/JWS bodys will be JCOR (CBOR-based JSON)
  • Primary/Required JWA is ECC P-256, implementations should support others
  • Bindings will be defined for common transports (HTTPS, CoAP, MQTT, XMPP, USB/CDC, UART, etc)
  • Reliable channels will not be in v4, messages must be stand-alone or a reliable transport must be used instead
  • Communities are being introduced to increase metadata privacy, every endpoint must be part of one or more communities
  • Hashnames are unique to each community
  • Bindings to OpenID Connect for seamless bootstrap from external identity systems

Communities

  • a community is defined by a shared JWK
  • they are either public or private
  • private must be known before joining the community
  • public maybe open or password protected
  • public has a UTF-8 string name, KDF used to derive the JWK, when password protected it is an additional KDF
  • JWE encrypted by the community JWK is used for discovery, can be broadcast on local networks
  • JWE contains a JWS+JWK of the joining/announcing peer, JWK is optional on private networks
  • when public the community name is available in the JWE headers
  • every peer in a community has a unique hashname based on the hash of the thumbprints of the community+peer's JWKs
  • advisable to join public communities with a new peer JWK each time so the hashname will change, long-lived identity established at app/higher layer (via OIDC)
  • once a peer's joining JWE is validated and associated with a local transport path, E2E channels can be established

v4's People

Contributors

quartzjer avatar

Stargazers

Berkus Decker avatar Gopalakrishna Palem avatar  avatar  avatar A C avatar Edward Chan Jia Wei avatar Yoshiyuki Kurauchi avatar Yi Wang avatar  avatar Linus G Thiel avatar Valery Samalazau avatar Paul avatar =Bill.Barnhill avatar Steve Ellis avatar Steve Phillips avatar  avatar Gustavo Gamino avatar Jules Omlor avatar Xendarboh Sensorii avatar  avatar Randall Leeds avatar

Watchers

David Waite avatar  avatar Peter Saint-Andre avatar =Bill.Barnhill avatar  avatar Neustradamus avatar Linus G Thiel avatar Rémy Rakic avatar Steve Ellis avatar James Cloos avatar David Simmons avatar Ryan Bennett avatar Xendarboh Sensorii avatar  avatar

Forkers

dwaite dfischer

v4's Issues

Channel types that require reliable transports

I've been thinking about 1) how/whether channel types should be defined to require a reliable transport, and consequentially 2) how peers should signal that they support certain transports.

No answers just questions so far.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.