Skip to content

CGFS Persona Schema

Problem Statement

How can we have a single coherent cryptographic identity that can present a separate identified personas when interacting with others?

Summary

  • We don't need a user model we just need to keep track of all our information and what we share with others.
  • We can tell anyone IRL our name is something different than what we call ourselves, we should be able to do that online again
  • One must provide proofs that the key they are talking from references memes on the blockchain if they want to prove they are legit.
  • The user model just models what data a user already has about themselves but also models other people, Tulpa Manager, and what data was presented to them

Notes

How can we have a signed linked list data structure with DAG-JSON that can add and remove entities to it?

How can we use Nostr Signatures with DAG-JSON CID's and JSONSchema to create a decentralized version of OAuth.

How does one go about managing sets of masks for different communities?

It is important to view personas as vectors that can connect to other vectors across dimensions. For example you can use the same email for accounts on different social media platforms that have absolutely nothing to do with one another. That's how we gotta view this data structure. Everything can link back to the root key... but only if you have the metadata too provide the proofs.

What Problem are we trying to solve?

When I was developing my Question Engine POC V1 had the following user flow,

  • User wants to use Question Engine
  • User goes to Question Engine website
  • User selects create account
  • Form pops up requiring user input a new username
  • User fills in their desired user name
  • User selects submit on form
  • MetaMask pops up requiring signature from user
  • Signature and requested username are sent to server
  • Validation occurs on server and cookies is generated and sent to be stored in client's browser
  • User is now logged in
  • User now attaches cookie to every request that requires authentication

Requiring MetaMask to sign every request sent to a Question Engine website is a bad user flow.

Research

{
    {
         "public_key" : "JIBBERISH",
         "key_type"   : "secp256k",
    }
}

Design Talk

  • 2024-01-26
  • TLDR;
    • We don't want to touch TLS Certificates
    • The Nostr founder though PGP was too complex
    • Nostr uses secp256k curves for signing
    • Alright so people have to ask other people what their name is
    • Yes
    • And when you want to get to know someone you need to show off interactions you have had within a network
    • I can imagine an adult giving their child a person so other strangers online will actually interact with them
  • Okay where do we start?
  • Alright we need something like 509 signature chains
  • So X.509 TLS certificates have a certificate number, just like my memes have a UUID
  • Wait are meme's basically just certificates issues via the User Model?
  • So we want to be like X509 certificates except we don't have to provide the root cert that generated it, if it even exists
  • Root certs can even pretend to reference CID's that don't even exist
  • X509 certificates are WAAAAY too complex fuck that
  • Cool we made a decision, we still need to include our signing mechanism though right?
  • Well we will be using Eth, Bitcoin, ICP and other stuff to validate our certificates right!!!
  • Yup that's exactly what we will be doing
  • Can we steal PGP
  • No we can sign out identities with PGP
  • So what constitutes our identity?
  • A self signed string "My Life Has Value"
  • What is the simplest thing we could get up and running tonight?
  • Well we already did this for the initial Question Engine prototype
  • Okay so the person needs a name right
  • Ah so they need a UUID
  • Ya but everyone is going to have a UUID of zeros
  • Then you get two Adam's adding you
  • Well these Adam's may have the same UUID but they don't have the same public key
  • Ya but the public key changes and get's rotated out
  • Okay the public key changes and gets rotated out, then what happens?
  • Okay we are trying to solve the entire problem of identity
  • So do we have identity providers
  • Ya but we need people up and running without thinking about it, they can then go to an identity provider and get an ID if they like
  • Well then just use nostr
  • Ah so people can generate their own certificate authorities and issue chains or graph's about them
  • Okay what does that mean?
  • I only want to reveal the social capital I need for someone to trust me
  • I can even have a signature from my passport NFC chip
  • Hmmm ya these chain's are just going to justify themselves
  • Hmmmmm But that is the root of them
  • Okay do they need a root, think about it, if you can provide a signature of a signed message with their name, then you can show all these messages that were hashed onto the blockchain
  • Oh so what someone is called, like their name, doesn't really matter
  • Actually someone can provide a self signed name event to one person, and a completely different one to another person, as long as those people don't compare notes they are perceived as the same person
  • 2024-01-26 - Later
  • TLDR;
  • Okay so we made an important realization, we don't need to have root certificates that we pretend to reference we have to have a set of keys and memes that are referenced by others or on the blockchain to prove we are legit
  • What was the other realization we made that made things really simple?
  • We can just reference the previous message, cause fuck it
  • No the other one
  • Nostr naturally has personas
  • Ya I guess that one was it
  • Okay so what happens next
  • 2024-02-04
  • Just use IPNS namespaces that reference other IPNS names
  • I need to think of this as using Obsidian but then I can go to the /messages directory which would then have a IPNS directory for every group chat