1. SSIMPL - Specification
The SSIMPL protocol described in the following specification addresses a few problems that have existed since the early days of the internet — certainly since Web 2.0:
How do you keep the owner of the online identity in control of their identity data?
There have been several iterations of OAuth in the past, one of which (Open ID Connect), was meant to add an identification layer to a protocol that's otherwise solely used for delegated authorization. This identity layer, however, has never been implemented in a way that anyone can truly rely on. It requires a certain amount of trust, which is provided in the form of billion-dollar companies saying "this data belongs to the person who just logged in". But it adds no guarantees about the validity of those claims. In order to minimize the amount of trust necessary for identification, it is essential that individuals are capable of managing their digital identity themselves, this is known as SSI - Self-Sovereign-Identity. But a self-issued identity still isn't worth much if it is not verified.
How do you verify someone’s digital identity?
Online, everyone can claim to anyone. For some systems - like social media - that could be fine. But for professional services, it is of the utmost importance that all parties taking part in any kind of transaction, have a verified identity shared among the other participants. This issue has become even more critical with the rise of AI and bots capable of impersonating individuals with minimal effort.
SSIMPL stands for Self-Sovereign Identity & Mondial Pseudonymous Ledger. Which tells us already quite a bit about its components. SSIMPL tries to find a balance between centralised and decentralised systems. It creates a bridge between the physical and digital worlds through authority-backed cryptographic proof. Therefor, implementing SSIMPL requires a trusted central authority (such as a government) that supports some form of one-time, cryptography-based identification for individuals.
1.0 Passport
- All users of the SSIMPL protocol MUST possess a Standardised e-passport.
1.1 The wallet
- The wallet MUST perform an Active-Authentication challenge.
- The wallet SHOULD store the DG11, which contains the personal details of the owner which can be the first basic, verified claims.
- The wallet MUST be a decentralised BIP32-compliant implementation.
- The wallet MUST be backed-up up with a BIP39-compliant mnemonic phrase (stored offline).
- The wallet MUST be able to store both a root keypair that can be used to sign and verify data and to authorize the bearer online, and all claims of the owner.
- The root public key MUST be used to generate a DID (decentralised Identifier), which is then signed by the neutral third party.
- All encoded data, like the cryptographic keys, MUST be encoded using Multibase-encoding to ensure all peers of all possible future implementations always know which encoding is used.
- The wallet MUST have one or many associated online storages where the 'subscription' can be stored.
- The wallet MUST have the ability to encrypt claims and store them as a 'subscription' object on an online storage.
- The wallet MUST have the ability to generate a JWT (Authentication & UCAN).
- The wallet MUST be able to perform asymmetric encryption like DHKE or Hybrid Encryption using RSA.
At this point, in the spirit of Open ID Connect, the user has all the components needed to authenticate themselves online at multiple levels:
- Level 0: The DID belongs to a human being.
- Level 1: Level 0 + unverified claims attached to the DID (requested via scope).
- Level 2: Level 1 + verified claims attached to the DID (requested via scope).
Level 0 is sufficient to prove the user is not an AI or bot. Level 1 may be used when specific, unverified attributes are needed, like an address or a phone number. Level 2 provides verified claims. The requestor of these claims merely needs to request a certain scope of claims. You, as the owner then needs to approve this request and send them the requested claims, while signing them with your wallet.
At the same time, the user will have the ability to cryptographically sign anything they would want to be associated with. In other words: if they would like to be able to proof they were the original creator of some digital content, all they would need to do is sign it. Other people could sign it as well, of course, but signature cannot be created using a past date. So the first one to sign something, always can proof they were the original creator.
1.2 Mondial Pseudonymous Ledger
In order to protect users from misuse, fraud and identity-theft, each wallet (and specifically the related public keys), must have a mechanism that allows them to be invalidated. These invalidated public keys must be published to a publicly accessible, append-only, preferably decentralized data storage. Anytime someone suspects their identity has been compromised, they're required to add their public keys to the ledger. This way, everyone can check whether the identity they're dealing with is actually valid.
The ledger also contains the public keys of so-called "neutral ledger authorities" (similar to a notary). Each entity that is allowed to sign newly created DIDs. This signature serves as proof that the owner of the DID successfully has authenticated themselves using their e-passport.
- The ledger MUST contain an append-only list for all its invalidated entries.
- The ledger SHOULD contain a list of DID's that are 'designated SSIMPL authorities', meaning they can sign initial DID's.
- The ledger SHOULD allow updates on the 'designated SSIMPL authorities' list by the owners of the DID's, proven by providing a signed version of the DID.
- The ledger SHOULD be decentralised.
1.3 Subscriptions
The ability to establish a verified, digital identity is only part of the equation. It is essential that parts of this identity can be shared with other entities on the internet. A simple example would be 'signing in' on a website. Usually these parts of your identity (aka 'Claims'), come from a centralised service which has your profile stored. SSIMPL offers a completely new perspective. Since you already have the claims stored in your own wallet, there is no need for an external, centralised service. Instead, the entity interested in your claims shares with you the necessary claims ( aka a ' Scope') to sign in or complete some transaction, a webhook to provide the entity with the web-location of the ( temporary) subscription on those claims, and, finally, the UCAN token necessary to access that web-locations' endpoint.
This 'subscription' is called that, because the duration that the endpoint is reserved could potentially last longer than just one transaction. Meaning that you could update the claims if necessary and the other party could fetch the new data once again. By default, the endpoint is random and must 'self-destruct'. Meaning that neither the owner of the data nor the other party can interact with it anymore.
- Each online storage MUST delete the subscription after being read once.
- Each storage endpoint MUST send a 200 OK with the subscription the first time it's accessed, and a 204 NO CONTENT ( without content...) for the duration of the subscription or until the subscription is updated again.
- Each storage endpoint path must remain reserved for the duration of the subscription.
- Each storage endpoint MUST allow updates by the owner for the duration of the subscription.
1.4 Security
In order to fully implement SSI, a user needs to have full control over their own data. There are several ways to accomplish this (using a hardware wallet for example), but SSIMPL relies on a somewhat controversial take: most people have a smartphone and treat it with more respect than their passport. Smartphones these days lack true HSMs (Hardware Security Modules), which would be the best place for cryptographic material to exist. Due to this (hopefully temporary) imperfection in smartphones, SIMMPL requires you to use the keystores that exist on devices: Keychain on iOS and the KeyStore on Android. This introduces a few risks that need to be mitigated:
- The device is lost/stolen, the related wallet needs to be invalidated. - This is achieved by registering the DID on a decentralised ledger. It would require you use the mnemonic phrase on a new device to re-create your wallet, then invalidate it. The user can then create a new wallet again.
- A user switches devices, the wallet needs to be re-created. - The mnemonic phrase can be used to re-create the old wallet. Always do take care to either delete the wallet from the device, or to factory-reset the device.
- The mnemonic phrase is lost/stolen. - The user will need to invalidate their current DID and create a new wallet (which will also mean the user gets a new mnemonic phrase)
- A user loses both their mnemonic phrase and their phone. - This scenario should be prevented at all costs, since everything relies on that mnemonic phrase. It is advised to use a (maybe even redundant) paper/metal backup to keep the mnemonic phrase safe.