YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
๐ชช refugee_digital_identity
Blockchain Self-Sovereign Identity for the Unbanked
ZK-proof credentials + micro-savings wallet โ accessible with just a phone number
๐ The Problem
1.4 billion adults worldwide are completely excluded from financial services.
For refugees and displaced persons, it's worse:
- Fleeing conflict = losing all documents (passport, ID, birth certificate)
- No documents โ no bank account โ no job โ no housing โ no legal status
- Aid organisations cannot verify identity โ cash transfers go missing
- 84 million forcibly displaced people as of 2022 (UNHCR)
- In Algeria: 100,000+ refugees (mostly sub-Saharan), with no formal identity
The compounding tragedy: A refugee may have been a doctor, engineer, or teacher โ but without verifiable credentials, they cannot prove it. Their human capital is invisible.
โ The Solution
A Self-Sovereign Identity (SSI) system that:
- Creates a DID โ a W3C-standard Decentralised Identifier anchored on Polygon
- Issues Verifiable Credentials โ attested by NGOs, UNHCR, local organisations
- Proves without revealing โ Zero-Knowledge Proofs: prove "I am over 18" without revealing your birthdate
- Holds micro-savings โ a non-custodial wallet linked to the DID
- Works offline โ credentials cached on device, verified via QR code
- Phone-number bootstrap โ no email, no internet required to start
Person arrives (no documents)
โ NGO verifies face + biometrics
DID created on Polygon (W3C DID standard)
โ Verifiable Credentials issued
Credential wallet (phone)
โ ZK-proof generated locally
Verifier checks proof (no raw data exposed)
โ Access granted
Bank account / job / housing / aid
๐งฎ Core Cryptography
W3C DID Document
{
"id": "did:polygon:0x7f3a...c291",
"verificationMethod": [{
"id": "did:polygon:0x7f3a...c291#key-1",
"type": "EcdsaSecp256k1VerificationKey2019",
"publicKeyHex": "04a3f2..."
}],
"authentication": ["did:polygon:0x7f3a...c291#key-1"]
}
Verifiable Credential (W3C VC Data Model)
{
"@context": ["https://www.w3.org/2018/credentials/v1"],
"type": ["VerifiableCredential", "RefugeeIdentityCredential"],
"issuer": "did:polygon:unhcr-algeria-0x...",
"credentialSubject": {
"id": "did:polygon:0x7f3a...c291",
"name": "Ahmad",
"nationality": "Syrian",
"registrationDate": "2026-03-06",
"skills": ["medicine", "arabic", "french"]
},
"proof": { "type": "EcdsaSecp256k1Signature2019", "jws": "eyJ..." }
}
Zero-Knowledge Age Proof (Schnorr-based)
Prover knows: birthdate b, commitment C = Hash(b || r)
Prove: b < current_date - 18_years
Without: revealing b or r
Protocol:
1. Prover: v โ random nonce, R = g^v (commitment)
2. Prover: c = Hash(R || statement) (Fiat-Shamir)
3. Prover: s = v - cยทsecret mod q
4. Verifier: check g^s ยท PK^c = R (verify without seeing secret)
Micro-Savings Wallet
Balance stored on Polygon (ERC-20 stablecoin โ USDC/cUSD)
Transactions: gasless (sponsored by NGO/operator)
Recovery: social recovery via 3-of-5 trusted guardians
Min deposit: $0.01 โ no minimum balance requirement
๐๏ธ Architecture
refugee_digital_identity/
โโโ core/
โ โโโ did_document.py # W3C DID creation + resolution
โ โโโ verifiable_credential.py # VC issuance + verification
โ โโโ identity_registry.py # On-chain DID registry (Polygon sim)
โโโ blockchain/
โ โโโ polygon_client.py # Polygon interaction (simulated)
โ โโโ smart_contract.py # DID registry contract logic
โโโ zkp/
โ โโโ schnorr_proof.py # Schnorr ZK-proof (age, nationality)
โ โโโ zk_verifier.py # Proof verification (no raw data)
โโโ wallet/
โ โโโ micro_wallet.py # Non-custodial micro-savings wallet
โ โโโ social_recovery.py # Guardian-based key recovery
โโโ examples/
โโโ refugee_onboarding.py # Full Ahmad onboarding demo
โก Quick Start
from refugee_digital_identity import SSISystem
ssi = SSISystem(chain="polygon")
# Onboard a new person (no documents required โ biometric only)
person = ssi.onboard(
name = "Ahmad",
phone = "+213-XXX-XXX", # phone number as bootstrap
biometric_hash = "sha256:a3f2...", # face hash (never stored raw)
issuer_did = "did:polygon:unhcr-algeria",
)
print(f"DID created : {person.did}")
print(f"Wallet addr : {person.wallet_address}")
# Issue a skill credential
credential = ssi.issue_credential(
subject_did = person.did,
claims = {"skill": "medicine", "verified_by": "WHO-Algeria"},
issuer_did = "did:polygon:who-algeria",
)
# Generate ZK-proof of age (over 18) โ reveals nothing else
proof = ssi.prove_over_18(person.did, birthyear=1990)
print(f"ZK proof : {proof.is_valid}")
print(f"Reveals age? : {proof.reveals_birthdate}") # False
# Deposit micro-savings
ssi.deposit(person.did, amount_usd=5.00)
print(f"Balance : ${ssi.balance(person.did):.2f}")
๐ Global Impact
| Population | Count |
|---|---|
| Forcibly displaced worldwide | 84 million |
| Stateless persons | 10 million |
| Unbanked adults | 1.4 billion |
| Refugees in Algeria | ~100,000 |
What this unlocks for each person:
- Formal employment (verifiable skills/education)
- Bank account access (KYC via VC)
- Healthcare (medical history portable)
- Housing (rental with verified identity)
- Education enrollment (credential portability)
- Aid receipt (auditable, no leakage)
๐บ๏ธ Roadmap
- v1.0 โ W3C DID creation + Polygon anchoring
- v1.0 โ Verifiable Credential issuance + verification
- v1.0 โ Schnorr ZK-proof (age, nationality)
- v1.0 โ Micro-savings wallet (ERC-20 sim)
- v1.0 โ Social recovery (3-of-5 guardians)
- v1.1 โ Real Polygon testnet deployment
- v1.2 โ UNHCR registration integration
- v1.3 โ Arabic + French + Tamazight UI
- v2.0 โ Cross-border credential portability (EU, Canada)
๐ License
MIT License โ Copyright (c) 2026 swordenkisk github.com/swordenkisk/refugee_digital_identity
Idea score: 88.8/100 โ Novelty: 96 | Feasibility: 79 | Impact: 89 From ideas_database.db โ swordenkisk ๐ฉ๐ฟ March 2026
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐ Ask for provider support