Key Concepts
On this page
Plaintext Identifiers
A plaintextIdentifier is any string of text that a user can use to identify another user. This makes it easier to represent an EVM-based address in a human-readable format.
Examples:
- Phone number:
+12345678901 - Twitter handle:
@alice - Email address:
alice@example.com - GitHub username:
alicecodes
Obfuscated Identifiers
An obfuscatedIdentifier is the identifier used on-chain, to which the account address is mapped. It preserves user privacy by not revealing the underlying plaintext identifier.
The obfuscated identifier is obtained by hashing the plaintext identifier, identifier prefix, and pepper using the following schema:
sha3(sha3({prefix}://{plaintextIdentifier})__{pepper})
This ensures that even if someone monitors on-chain attestation events, they cannot determine which phone number or social handle belongs to which address without access to the pepper. The full derivation is described in Identifier Obfuscation.
Identifier Prefix
Identifier prefixes are used to differentiate users having the same plaintext identifier for different purposes and to enable composability across applications.
Example: Consider Alice having the same username on both Twitter and GitHub: alicecodes
- Twitter identifier:
twit://alicecodes - GitHub identifier:
github://alicecodes
By using prefixes, dApps can differentiate between verification methods. If dApps follow a standard prefix convention, the corresponding obfuscated identifiers will be consistent, making it easier to lookup identifiers verified by different issuers.
Standard Prefixes:
These are the prefix values defined by the SDK’s IdentifierPrefix enum. Note that the enum key and its value differ, so IdentifierPrefix.PHONE_NUMBER resolves to tel.
- Phone numbers:
tel(IdentifierPrefix.PHONE_NUMBER) - Twitter:
twit(IdentifierPrefix.TWITTER) - GitHub:
github(IdentifierPrefix.GITHUB) - Email:
mailto(IdentifierPrefix.EMAIL)
Pepper
A pepper is a unique secret obtained by taking the first 13 characters of the SHA256 hash of the unblinded signature from ODIS (Oblivious Decentralized Identifier Service).
The pepper is crucial for privacy preservation because:
- No single party can compute it unilaterally
- It prevents rainbow table attacks
- It’s unique per identifier
Unblinded Signature
The unblinded signature is obtained by unblinding the signature returned by ODIS, which is the combined output comprised of signatures from multiple ODIS signers.
Issuers
An issuer is an entity willing to take on the responsibility of verifying a user’s ownership of an identifier. Issuers:
- Perform verification (e.g., SMS verification for phone numbers, OAuth for social accounts)
- Register attestations on-chain
- Are trusted by applications that rely on their attestations
- Can be anyone - Self Connect is open and permissionless
Addresses of active issuers are listed in Reference & Resources.
Attestations
Attestations are on-chain mappings between an obfuscated identifier and a blockchain address. Each record stores the obfuscated identifier, the account address, the issuer address, and the verification timestamp. Each attestation is associated with the issuer that registered it. When looking up attestations, applications decide which issuers to trust.
Federated Model
Self Connect uses a federated attestation model where:
- Multiple issuers can exist independently
- Each issuer maintains their own verification standards
- Applications choose which issuers to trust
- No single point of failure or control
Thanks for your feedback!