Doğrulanabilir Kimlik Bilgileri
Bir Doğrulanabilir Kimlik Bilgisi (VC), bir kişi veya varlık hakkında bir şeyin doğru olduğuna dair kriptografik bir kanıttır. Solidus kimlik bilgileri, W3C Doğrulanabilir Kimlik Bilgileri Veri Modelini izler. İki imza türü desteklenir: Ed25519 (varsayılan, üretimde kullanılabilir) ve seçici ifşa için BBS+ (2026 Mayıs itibarıyla testnet’te canlı — tam düzenleyici akışı sırada, NLnet NGI Zero aracılığıyla dış denetim bekliyor).
Kimlik Bilgisi Nedir
Bir kimlik bilgisi, bir düzenleyici tarafından bir konu hakkında yapılmış, dijital olarak imzalanmış bir ifadedir. Fiziksel dünyada bir pasaport bir kimlik bilgisidir: bir devlet (düzenleyici), bir kişinin (konu) bir ülkenin vatandaşı olduğunu belirtir. Bir Doğrulanabilir Kimlik Bilgisi aynı kavramdır, ancak makine tarafından doğrulanabilir, kurcalamaya karşı korumalıdır ve gereksiz bilgi ifşa edilmeden sunulabilir.
Her kimlik bilgisinde üç taraf yer alır:
- Düzenleyici — iddiayı doğrulayan ve kimlik bilgisini imzalayan varlık
- Sahip — kimlik bilgisinin hakkında olduğu kişi veya varlık
- Doğrulayan — kanıt gerektiğinde kimlik bilgisini kontrol eden hizmet
Düzenleyici ve doğrulayanın hiçbir zaman doğrudan iletişim kurmasına gerek yoktur. Sahip kimlik bilgisini sunar ve doğrulayan bunu Solidus blok zincirine karşı kontrol eder.
Kimlik Bilgisi Yapısı
İşte tam bir Doğrulanabilir Kimlik Bilgisi:
{
"@context": [
"https://www.w3.org/2018/credentials/v1",
"https://solidus.network/credentials/v1"
],
"type": ["VerifiableCredential", "KycLevel1Credential"],
"issuer": "did:solidus:testnet:4Wp9xKjRvNmQ3eYhT8bC2aFs7gDzLpUk",
"issuanceDate": "2026-05-01T10:30:00Z",
"expirationDate": "2027-05-01T10:30:00Z",
"credentialSubject": {
"id": "did:solidus:testnet:7Hk3mRtQZvNxP2bK9wYfJ4eD6cA5sLgR",
"kycLevel": 1,
"country": "DE",
"verificationMethod": "document+liveness"
},
"proof": {
"type": "BbsBlsSignature2020",
"created": "2026-05-01T10:30:00Z",
"verificationMethod": "did:solidus:testnet:4Wp9xKjRvNmQ3eYhT8bC2aFs7gDzLpUk#key-1",
"proofPurpose": "assertionMethod",
"proofValue": "z3FXQqFbc...base58-encoded-signature"
}
}Alanlar
@context — kelime dağarcığını tanımlayan JSON-LD bağlamları. İlki W3C Doğrulanabilir Kimlik Bilgileri bağlamıdır; ikincisi kimlik bilgisi türleri için Solidus’a özgü bağlamdır.
type — bir kimlik bilgisi türleri dizisi. Her kimlik bilgisi, temel tür olarak
VerifiableCredential’ı artı KycLevel1Credential gibi belirli bir türü içerir.
issuer — kimlik bilgisini imzalayan varlığın DID’i.
issuanceDate — kimlik bilgisinin ne zaman düzenlendiği (ISO 8601 zaman damgası).
expirationDate — kimlik bilgisinin ne zaman sona ereceği. Bu tarihten sonra, kimlik bilgisi artık geçerli değildir.
credentialSubject — yapılan iddialar. id alanı, konunun DID’idir. Kalan alanlar gerçek
iddialardır (KYC seviyesi, ülke, doğrulama yöntemi vb.).
proof — kriptografik imza. Varsayılan olarak bu bir Ed25519Signature2020’dir. BBS+
varyantında düzenlenen kimlik bilgileri (testnet’te canlı) bunun yerine seçici ifşayı mümkün kılan
bir BbsBlsSignature2020 taşır.
Kimlik Bilgisi Türleri
Solidus aşağıdaki kimlik bilgisi türlerini tanımlar:
EmailCredential
Bir kullanıcının bir e-posta adresini kontrol ettiğini kanıtlar.
{
"type": ["VerifiableCredential", "EmailCredential"],
"credentialSubject": {
"id": "did:solidus:testnet:7Hk3mRtQZvNxP2bK9wYfJ4eD6cA5sLgR",
"email": "[email protected]",
"verified": true
}
}KycLevel1Credential
Temel kimlik doğrulama — belge yükleme ve veri çıkarma.
{
"type": ["VerifiableCredential", "KycLevel1Credential"],
"credentialSubject": {
"id": "did:solidus:testnet:7Hk3mRtQZvNxP2bK9wYfJ4eD6cA5sLgR",
"kycLevel": 1,
"country": "DE",
"verificationMethod": "document"
}
}KycLevel2Credential
Gelişmiş doğrulama — belge yükleme artı canlılık tespiti.
{
"type": ["VerifiableCredential", "KycLevel2Credential"],
"credentialSubject": {
"id": "did:solidus:testnet:7Hk3mRtQZvNxP2bK9wYfJ4eD6cA5sLgR",
"kycLevel": 2,
"country": "DE",
"verificationMethod": "document+liveness"
}
}KycLevel3Credential
Tam doğrulama — belge, canlılık ve adres kanıtı.
{
"type": ["VerifiableCredential", "KycLevel3Credential"],
"credentialSubject": {
"id": "did:solidus:testnet:7Hk3mRtQZvNxP2bK9wYfJ4eD6cA5sLgR",
"kycLevel": 3,
"country": "DE",
"verificationMethod": "document+liveness+address"
}
}Düzenleme Akışı
Bir kimlik bilgisi düzenlendiğinde üç şey gerçekleşir:
1. Subject completes verification (e.g., KYC on verify.solidus.network)
2. Issuer signs the credential (Ed25519 by default, or BBS+ when the
request opts into selective disclosure)
3. Credential hash is anchored on-chain via CredentialIssue transactionKişisel veri içeren kimlik bilgisinin kendisi sahibine döndürülür ve DID cüzdanlarında saklanır. Yalnızca hash zincire gider. Bu, blok zincirinin, kimlik bilgisinin içeriğini ifşa etmeden, belirli bir zamanda belirli bir düzenleyici tarafından düzenlendiğini kanıtladığı anlamına gelir.
SDK ile Düzenleme
import { createSdk } from '@solidus-network/sdk'
const sdk = createSdk({
mode: 'testnet',
chain: {
rpcUrl: 'https://rpc.solidus.network',
signerPrivateKey: issuerPrivateKeyHex,
network: 'testnet',
},
})
const credential = await sdk.credentials.issue({
type: ['VerifiableCredential', 'KycLevel1Credential'],
issuer: 'did:solidus:testnet:4Wp9xKjRvNmQ3eYhT8bC2aFs7gDzLpUk',
subject: 'did:solidus:testnet:7Hk3mRtQZvNxP2bK9wYfJ4eD6cA5sLgR',
claims: {
kycLevel: 1,
country: 'DE',
verificationMethod: 'document',
},
expirationDate: '2027-05-01T10:30:00Z',
})
console.log('Credential ID:', credential.id)
console.log('On-chain tx:', credential.transactionHash)Doğrulama Akışı
Bir kimlik bilgisini doğrulamak üç şeyi kontrol eder:
- İmza — zincir, gönderim sırasında imzaları doğrular, bu yüzden zincirde bulunan herhangi bir kimlik bilgisinin geçerli bir imzası vardır
- Son kullanma — Solidus kimlik bilgileri zincir üzerinde sona ermez (
expiry, bulunan herhangi bir kimlik bilgisi içintruebildirir) - İptal — düzenleyici bu kimlik bilgisi için bir
CredentialRevokeişlemi gönderdi mi?
Tüm kontroller, kimlik bilgisinin Solidus RPC uç noktası üzerinden kimliğine göre aranmasıyla gerçekleştirilir. Düzenleyiciyle iletişime gerek yoktur.
SDK ile Doğrulama
sdk.credentials.verify(), kimlik bilgisi nesnesini değil, kimlik bilgisinin kimliğini alır.
const result = await sdk.credentials.verify(credential.id)
console.log('Valid:', result.valid)
// true
console.log('Checks:', result.checks)
// { signature: true, expiry: true, revocation: true }Kimlik bilgisi bulunamazsa, result.valid false’dur ve result.error nedenini açıklar.
Seçici İfşa
BBS+ imzaları, bir kimlik bilgisi sahibinin, tüm kimlik bilgisinin geçerli olduğunu kanıtlarken bir kimlik bilgisinden yalnızca belirli iddiaları ifşa etmesine izin verir.
Nasıl Çalışır
Standart bir dijital imza tüm belgeyi kapsar. Belgenin herhangi bir kısmını değiştirir veya gizlerseniz, imza geçersiz hale gelir. BBS+ imzaları farklı çalışır — tek bir imza içinde her iddiayı ayrı ayrı imzalarlar, bu da ifşa edilmeyen iddiaların var olduğuna ve imzalandığına dair kriptografik kanıtı korurken iddiaların herhangi bir alt kümesinin ifşa edilmesine olanak tanır.
Örnek
Bir KycLevel2Credential şu iddiaları içerir:
kycLevel: 2
country: "DE"
verificationMethod: "document+liveness"Bir doğrulayanın yalnızca KYC seviyesini bilmesi gerekir. Sahip, yalnızca kycLevel’i ifşa eden
türetilmiş bir kanıt oluşturur:
const derivedProof = await sdk.credentials.deriveProof(credential, {
revealedClaims: ['kycLevel'],
})
// The derived proof contains:
// - kycLevel: 2 (revealed)
// - country: [hidden]
// - verificationMethod: [hidden]
// - A zero-knowledge proof that the hidden fields exist and were signedDoğrulayan şunu doğrulayabilir:
- Kimlik bilgisi belirtilen düzenleyici tarafından imzalandı
kycLeveldeğeri gerçekten2’dir (kurcalanmamıştır)- Ek iddialar mevcuttur ancak ifşa edilmemiştir
- Orijinal kimlik bilgisi iptal edilmemiştir
Doğrulayan, country veya verificationMethod’un değerlerini öğrenemez.
İptal
Bir düzenleyici, bir CredentialRevoke işlemi göndererek bir kimlik bilgisini istediği zaman iptal
edebilir. Bu, iptali zincir üzerinde kaydeder. İptalden sonra, o kimlik bilgisinin herhangi bir
doğrulaması iptal kontrolünde başarısız olur. revoke(), kimlik bilgisi kimliğini ve düzenleyicinin
özel anahtarını alır ve işlem onaylandıktan sonra herhangi bir dönüş değeri olmadan sonuçlanır.
await sdk.credentials.revoke(credential.id, issuerPrivateKeyHex)
const result = await sdk.credentials.verify(credential.id)
console.log('Revoked:', !result.checks.revocation)
// trueİptal geri alınamaz. Bir iddiayı yeniden kurmak için, düzenleyicinin yeni bir kimlik bilgisi düzenlemesi gerekir.
Zincir Üzerinde ve Zincir Dışında
Nerede ne saklandığını anlamak önemlidir:
| Data | Location | Visibility |
|---|---|---|
| Kimlik bilgisi hash’i | Zincir üzerinde | Herkese açık |
| Düzenleme zaman damgası | Zincir üzerinde | Herkese açık |
| Düzenleyici DID’i | Zincir üzerinde | Herkese açık |
| Konu DID’i | Zincir üzerinde | Herkese açık |
| İptal durumu | Zincir üzerinde | Herkese açık |
| Kimlik bilgisi iddiaları (ad, doğum tarihi vb.) | Zincir dışında (kullanıcının cüzdanı) | Özel |
| Kimlik bilgisi kanıtı | Zincir dışında (kullanıcının cüzdanı) | Özel |
Blok zinciri, kimlik bilgisinin gerçekte ne söylediğini ifşa etmeden “X kimlik bilgisi, T zamanında Z için Y tarafından düzenlendi” şeklinde herkese açık bir kayıt defteri görevi görür. Bu, protokolün temel gizlilik tasarımıdır.