ANTRequest's FaviDiD Specification (Version 0.0.1)

FaviDiD is a Brand New way to Decentralized Identify you. using some cryptography Math you can identify yourself using a Private Key to sign your Requests and a Public Key for the service to verify it is from you.

to use FaviDiD you can use This Specification to insure interoperability. If you do not Like where this is going please fork.

danger! Deprecated! as of . reason: vague and underspecific.

Table Of Contents

Table Of Contents

Status of this document

this document written on and is Semantic version 0.0.1. this document is self-published independently.

This Specification uses external references

Examples of FaviDiD in use

link to examples, for now, there are none that fully implement this specification. should be an <ul> of links.

Definitions

Planet
A Server Implementing is called a Planet.
Edge
A Client Implementing is called an Edge. an edge is a client that interacts with the planet. could be a browser extension, the bowser, or an app.
The Protocol
The Protocol as set forth in This Specification
The Specification
The Specification is this htmlpage.
/Favicond_/
The Base Path of the protocol interactions. the underscore is a MUST. this path is directly after the domain.
REQUIRE
RFC2119's REQUIRED
Edge-Defined
Planet-Defined
A feature whose specific behavior is determined by the host environment rather than this specification. While this document may provide constraints, the Planet or Edge is free to define the exact behavior within those bounds.

Global Rules

All interactions MUST follow these global rules. If these rules are violated, the Edge MUST abort the interaction and notify the user.

Key Generation

use the Ed25519 and create a Private-Key and a Public-Key, store them securely.

Decentralized id

To create a Decentralized id, MUST follow these steps

  1. $Result is string did:favidid:.
  2. set $Result to the concatenation of $Result and ed25519:.
  3. $publicKey is bytes of Public-Key.
  4. set $publicKey to the encoded bytes of $publicKey using base58 (Bitcoin alphabet, no padding).
  5. $Result is $Result concatenated with $publicKey.
  6. Return $Result.

Authentication

For Planets

Signing Up

As A Planet you need to have some endpoints open for standardized connection. This Specification does not make any REQUIREments about how you store your data, just that the data is delivered in these Formats.

When an Edge wants to sign up for your planet. you (reference to Your Planet) MUST

For Edges

Signing Up

As An Edge you need to accept the Planet Nonces and sign them with that Private-Key of the user.

When You Receive a Planet Nonce from The User. you MUST create a JWT with the header being (whitespace is Edge-Defined)

{
    "typ": "JWT",
    "alg": "EdDSA",
    "proto": "FaviDiD-Auth"
}

the Payload MUST or MUST NOT have the following claims.

Claim Name Claim Value
exp SHOULD be set 30 integers higher than iat.
iat MUST be set to the current time utc since the epoch of .
aud MUST be set to the Planet's Domain (assume HTTPS as Edges and Planets MUST NOT use plain HTTP.
iss MUST be set to your did (FaviDiD).
nbf SHOULD be set 5 integers lower than iat.
jti MUST be set to an uuid (is ignored in this specification, Planets MAY use this in a Planet-Defined way).
nonce MUST be set to the Nonce given by the Planet.

the Edge MUST return the JWT created to the planet.