Разработка системы идентификации (DID) на блокчейне
Decentralized Identifiers (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, authentication methods.
{
"@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"
}
]
}
Verifiable Credentials (VC)
DID — это идентификатор. Verifiable Credentials — это утверждения о держателе DID, подписанные другим DID (issuer).
{
"@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...');
Selective Disclosure и ZK
Полное VC раскрывает все поля. Selective Disclosure — доказать только нужные факты:
BBS+ Signatures: криптографическая схема позволяющая селективно раскрывать поля VC с математическим доказательством что они часть оригинального документа.
Zero-Knowledge Proofs: доказать «у меня есть VC утверждающий что мне > 18 лет» без раскрытия точной даты рождения или каких-либо других данных VC.
Polygon ID: реализация ZK-based verifiable credentials на основе Iden3 protocol. Holder доказывает claims через zkSNARK без раскрытия самого VC.
Архитектура полной SSI системы
Issuer Service: backend сервис для организаций выпускающих VC (университеты, KYC провайдеры, DAO).
Wallet: пользовательское хранилище DID + VC. Локальное (browser extension, mobile app) или custody.
Verifier: сервис принимающий VP (Verifiable Presentation) и верифицирующий подписи.
Registry: смарт-контракт для DID Documents и схем VC.
Revocation Registry: список отозванных VC (statusList2021 стандарт — bitmap approach эффективный по газу).
Реальные применения
- KYC once, use everywhere: прошёл KYC у одного провайдера — используешь credential везде без повторной верификации
- Academic credentials: диплом как VC — верифицируется работодателем мгновенно
- DAO membership: VC подтверждающий участие в DAO, права голоса
- Professional licenses: медицинские, юридические лицензии
Разработка DID системы от нуля — 8-16 недель. Интеграция готовых компонентов (Veramo, SpruceID, Polygon ID) для конкретного use case — 3-6 недель.







