Skip to Content
ConceptsVerifiable Credentials

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 transaction

Kiş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:

  1. İ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
  2. Son kullanma — Solidus kimlik bilgileri zincir üzerinde sona ermez (expiry, bulunan herhangi bir kimlik bilgisi için true bildirir)
  3. İptal — düzenleyici bu kimlik bilgisi için bir CredentialRevoke iş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 signed

Doğrulayan şunu doğrulayabilir:

  • Kimlik bilgisi belirtilen düzenleyici tarafından imzalandı
  • kycLevel değeri gerçekten 2’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:

DataLocationVisibility
Kimlik bilgisi hash’iZincir üzerindeHerkese açık
Düzenleme zaman damgasıZincir üzerindeHerkese açık
Düzenleyici DID’iZincir üzerindeHerkese açık
Konu DID’iZincir üzerindeHerkese açık
İptal durumuZincir üzerindeHerkese 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.

Sonraki Adımlar

  • Başlarken — ilk kimlik bilgisinizi düzenleyin ve doğrulayın
  • DID’ler — kimlik bilgilerinin referans verdiği tanımlayıcıları anlayın
  • Mimari — kimlik bilgilerinin durum ağacında nasıl saklandığı
  • — zincir üzerinde kimlik bilgilerini sorgulamak için RPC yöntemleri
Last updated on