Розробка системи децентралізованої ідентичності (DID) на блокчейні
Децентралізовані ідентифікатори (DID) — W3C стандарт для самовладної ідентичності. Замість того, щоб ваша ідентичність існувала в базах даних Google, Facebook або держави — ви самі контролюєте свій DID. Ніхто не може відкликати вашу ідентичність, заморозити акаунт або розкрити дані третім сторонам без вашого відома.
Структура DID
DID — це URI виду did:method:identifier:
did:ethr:0x742d35Cc6634C0532925a3b844Bc454e4438f44e
did:key:z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuias8sisDArDJF
did:web:example.com
did:ion:EiClkZMDxPKqC9c-umQfTkR8vvZ9JPhl_xLDI9Nfk38zA
DID Method: визначає як DID створюється, оновлюється, розв'язується. ethr — Ethereum-based, ion — Bitcoin-anchored через Sidetree, web — через веб-домен.
DID Document: JSON документ пов'язаний з DID. Містить публічні ключі, service endpoints, методи автентифікації.
{
"@context": ["https://www.w3.org/ns/did/v1"],
"id": "did:ethr:0x742d35Cc...",
"verificationMethod": [
{
"id": "did:ethr:0x742d35Cc...#controller",
"type": "EcdsaSecp256k1RecoveryMethod2020",
"controller": "did:ethr:0x742d35Cc...",
"ethereumAddress": "0x742d35Cc..."
}
],
"authentication": ["did:ethr:0x742d35Cc...#controller"],
"service": [
{
"id": "did:ethr:0x742d35Cc...#messaging",
"type": "DIDComm",
"serviceEndpoint": "https://agents.example.com"
}
]
}
Перевіряємі облікові дані (VC)
DID — це ідентифікатор. Verifiable Credentials — це твердження про власника DID, підписане іншим DID (видавцем).
{
"@context": ["https://www.w3.org/2018/credentials/v1"],
"type": ["VerifiableCredential", "UniversityDegreeCredential"],
"issuer": "did:web:university.example.edu",
"issuanceDate": "2024-06-01T00:00:00Z",
"credentialSubject": {
"id": "did:ethr:0xGraduateAddress",
"degree": {
"type": "Bachelor",
"name": "Computer Science"
}
},
"proof": {
"type": "Ed25519Signature2020",
"created": "2024-06-01T12:00:00Z",
"verificationMethod": "did:web:university.example.edu#key-1",
"proofPurpose": "assertionMethod",
"jws": "eyJhbGciOiJFZERTQS..."
}
}
Реалізація DID Registry
contract DIDRegistry {
// DID Document attributes
mapping(address => mapping(bytes32 => mapping(address => uint256))) public delegates;
mapping(address => mapping(bytes32 => mapping(bytes32 => uint256))) public attributes;
mapping(address => uint256) public changed;
mapping(address => address) public owners;
event DIDDelegateChanged(
address indexed identity,
bytes32 delegateType,
address delegate,
uint256 validTo,
uint256 previousChange
);
event DIDAttributeChanged(
address indexed identity,
bytes32 name,
bytes value,
uint256 validTo,
uint256 previousChange
);
function identityOwner(address identity) public view returns (address) {
address owner = owners[identity];
return owner == address(0) ? identity : owner;
}
function setAttribute(
address identity,
bytes32 name,
bytes calldata value,
uint256 validity
) external onlyOwner(identity) {
attributes[identity][name][keccak256(value)] = block.timestamp + validity;
emit DIDAttributeChanged(identity, name, value, block.timestamp + validity, changed[identity]);
changed[identity] = block.number;
}
}
Це спрощена версія ethr-did-registry — стандартного контракту від uPort/Consensys.
DID Resolver
DID Resolver перетворює DID на DID Document. Для did:ethr — читає события з DIDRegistry контракту:
import { Resolver } from 'did-resolver';
import { getResolver as getEthrResolver } from 'ethr-did-resolver';
const providerConfig = {
networks: [{
name: 'mainnet',
rpcUrl: 'https://mainnet.infura.io/v3/...'
}]
};
const ethrResolver = getEthrResolver(providerConfig);
const resolver = new Resolver({ ...ethrResolver });
const didDocument = await resolver.resolve('did:ethr:0x742d35Cc...');
Вибіркове розкриття та ZK
Повна VC розкриває всі поля. Selective Disclosure — довести тільки необхідні факти:
BBS+ Signatures: криптографічна схема, яка дозволяє вибірково розкривати поля VC з математичним доказом того, що вони частина оригінального документа.
Zero-Knowledge Proofs: довести "я маю VC, який стверджує що мені > 18 років" без розкриття точної дати народження чи інших даних VC.
Polygon ID: реалізація ZK-based verifiable credentials на основі Iden3 протоколу. Власник доводить claims через zkSNARK без розкриття самого VC.
Повна архітектура SSI системи
Issuer Service: backend сервіс для організацій, які видають VC (університети, KYC провайдери, DAO).
Wallet: користувацьке сховище DIDs + VCs. Локальне (браузерне розширення, мобільний додаток) або кастодіальне.
Verifier: сервіс, що отримує VPs (Verifiable Presentation) і верифікує підписи.
Registry: смарт-контракт для DID Documents та схем VC.
Revocation Registry: список відкликаних VCs (statusList2021 стандарт — bitmap підхід ефективний на газ).
Реальні застосування
- KYC один раз, використовувати скрізь: пройшли KYC в одного провайдера — використовуйте облікові дані скрізь без повторної верифікації
- Академічні облікові дані: диплом як VC — миттєво перевіряється роботодавцем
- DAO членство: VC, що підтверджує участь в DAO, права голосу
- Професійні ліцензії: медичні, юридичні ліцензії
Розробка DID системи з нуля — 8-16 тижнів. Інтеграція готових компонентів (Veramo, SpruceID, Polygon ID) для конкретного випадку використання — 3-6 тижнів.







