Skip to Content
ArchitectureFlow of Data: KYC

Flow of Data: KYC Proof of Personhood

Human ID’s Proof of Personhood via KYC consists of the following components:

  • User agent (UI)
  • Human ID server
  • ID verification provider
  • Verifier

The flow of data is outlined in the following sequence diagram. Please refer to notes for detailed explanations for relevant parts.

Sequence Diagram

The interaction between User/User agent, Human ID server, IDV Provider, and Verifier spans three main phases:

Phase 1: Initiate ID Verification

  • User visits /gov-id endpoint
  • Human ID server creates a session
  • User makes payment
  • Server verifies payment and saves transaction hash

Phase 2: Complete ID Verification

  • Server requests IDV session from provider (Veriff, Onfido, or Facetec)
  • User submits selfie and identity document
  • IDV provider returns session result
  • Result is encrypted client-side
  • Ciphertext is stored on server

Phase 3: Proof of ID Uniqueness

  • User generates zero-knowledge proof for uniqueness
  • Verifier validates the ZKP
  • Soul-bound token is issued to specified address and chain

Issuance and Proving

Sections 1 and 2 in the sequence diagram constitute issuance, where the user’s private credentials are issued.

Section 3 is proving, where the user proves facts about their issued credentials.

Notes on Handling of User Data by IDV Providers

Following data are requested by IDV providers as photo and/or video stream during the verification process:

  • Selfie (photo, video stream)
  • One of the following documents:
    • Passport
    • Driver License
    • Identity Card

Supported IDV Providers

Veriff

  • Outlines compliances (GDPR, etc.)
  • Documents data collection, retention, and deletion controls
  • Provides subprocessor list

Onfido

  • Maintains privacy policy with compliance certifications
  • Details collection, processing, security, and storage practices
  • ISO 27001 certified

Facetec

  • Has separate site and SDK privacy policies
  • Encrypts data sent to servers and siloes information without PII storage
  • Provides GDPR compliance details for EU residents

Notes on Client-Side Encryption of IDV Session Result

IDV provider returns the session result to user.

With Human Wallet: Result is encrypted on client-side using a derivative of the PRF.

With Other Wallets: Result is encrypted with key derived from hash(userSignature(aConstantMessage)) to generate ciphertext.

Notes on Ciphertext and Storage

Only encrypted ciphertext (non-PII) is stored in Human ID database:

{ "_id": { "$oid": "676d..." }, "holoUserId": "f111...", "encryptedGovIdCreds": { "ciphertext": "0x...", "iv": "0x...", "_id": { "$oid": "676d..." } }, "__v": { "$numberInt": "0" } }

Notes on Verifier and SBT Issuance

The user submits a zero-knowledge proof of uniqueness to the verifier server. Upon verification, a soulbound token is issued containing the circuit ID, issuer address, expiry, actionNullifier, and ZK proof.

Last updated on