İçeriğe geç
Tamga Wallet

Standartlar

SD-JWT VC: seçici paylaşımın arkasındaki biçim

SD-JWT VC, cüzdanın imzalı bir belgenin yalnız bazı alanlarını göndermesini sağlayan belge biçimidir. Sade bir anlatım ve sadeleştirilmiş bir örnek.

Yazan: Tamga Wallet ekibi3 dk okuma

SD-JWT VC, bütün Tamga belgelerinin kullandığı biçimdir. Her alanı tek tek gizlenip açılabilen, imzalı bir JSON belgesidir: kurum belgenin tamamını bir kez imzalar; sen belgeyi gösterirken cüzdanın yalnız onayladığın alanları gönderir ve imza yine doğrulanır. Seçici paylaşımı mümkün kılan budur.

Adın iki parçası var. SD-JWT (Selective Disclosure for JSON Web Tokens) yöntemin kendisidir; IETF onu Kasım 2025'te RFC 9901 olarak yayımladı. SD-JWT VC (SD-JWT-based Verifiable Digital Credentials) bu yöntemi türü, vereni ve sahibinin anahtarı olan bir belgeye çeviren profildir; yayımlanmak üzere IESG'ye gönderilmiş bir IETF taslağıdır (19. sürüm, Ağustos 2026).

Alanlar eksikken imza nasıl geçerli kalır?

İşin püf noktası şu: kurum alan değerlerini hiçbir zaman doğrudan imzalamaz. Her alan için rastgele bir tuz (salt), alan adı ve değerden küçük bir dizi kurar, bunu kodlar ve özetini (hash) alır. İmzalı belgede yalnız bu özetler, _sd adlı bir listede durur. Kodlanmış diziler, yani açıklamalar (disclosure), imzalı parçanın yanında cüzdanına verilir.

Belgeyi gösterdiğinde cüzdan onayladığın alanların açıklamalarını ekler, gerisini dışarıda bırakır. Doğrulayıcı aldığı her açıklamanın özetini alır ve sonucu _sd listesinde bulur. Gönderilmeyen alan bir özet olarak kalır; rastgele tuz sayesinde, doğum tarihi gibi kısa bir değer bile olsa, arkasında ne olduğunu kimse tahmin edemez.

SD-JWT VC'nin üç parçası ve gösterirken gidenler

Gönderilirken parçalar tilde işaretiyle birleştirilir: <imzalı JWT>~<açıklama>~<açıklama>~<KB-JWT>. Bir alanı gizlemek, açıklamasını bu dizgiden çıkarmak demektir. Hiçbir şey eklenmez, imzalı parça değişmez.

Neye benziyor?

Bir öğrenci belgesinin imzalı parçası, kodu çözülünce:

Sadeleştirilmiş örnek: öğrenci belgesinin çözülmüş içeriğiJSON
{
  "iss": "https://issuer.example.edu",
  "vct": "urn:tamga:edu:StudentCredential:1",
  "iat": 1791417600,
  "exp": 1803772800,
  "_sd_alg": "sha-256",
  "_sd": [
    "2l60GCkDykrIj0RNY7DFIWRL6ku9DweCmBUpcHSSDGc",
    "Ah9zbMv904G2xsaDrXkT7qj_7b00R0h7fgJeumqk7cA",
    "F7SV1UscA8u8blXRZwlwhqT_AE2mByqMexF2hFCLKLA"
  ],
  "cnf": {
    "jwk": { "kty": "EC", "crv": "P-256", "x": "…", "y": "…" }
  }
}

Açıkta yalnız belgeyi denetlemek için gerekenler var: kim verdi (iss), türü (vct), ne zaman verildi ve ne zaman sona eriyor, telefonundaki anahtarın açık yarısı (cnf). Adın, bölümün ve kayıt durumun üç özetin arasında.

Bir de tek bir açıklama; öğrenci indirimi kontrolünün isteyeceği açıklama:

Sadeleştirilmiş örnek: tek açıklama, kodlu ve çözülmüşText
WyJxVjNfdUZ0Ml9IZVA5a1J4Wm1XN0JBIiwgImlzX2Vucm9sbGVkIiwgdHJ1ZV0

→ ["qV3_uFt2_HeP9kRxZmW7BA", "is_enrolled", true]

Kodlu dizginin SHA-256 özeti, base64url:
2l60GCkDykrIj0RNY7DFIWRL6ku9DweCmBUpcHSSDGc   ← _sd'deki ilk özet

"Öğrenci misin?" diye soran bir site imzalı parçayı, bu tek açıklamayı ve taze bir cihaz imzasını alır. is_enrolled: true bilgisini ve bunu hangi kurumun söylediğini öğrenir. Adın ve bölümün okuyamadığı özetler olarak kalır.

Biri belgeni tekrar oynatamasın diye ne var?

Dizginin son parçası KB-JWT'dir (key binding JWT, anahtar bağlama imzası). Cüzdanın onu her gösterimde yeniden üretir ve telefonunun güvenli donanımındaki anahtarla, açık yarısı cnf'de duran anahtarla imzalar. İçinde doğrulayıcının tek kullanımlık nonce değeri, doğrulayıcının kimliği, zaman ve sd_hash vardır; sd_hash tam olarak gösterilen parçaların özetidir.

Kopyalanmış bir gösterim ikinci bir doğrulayıcıda geçmez, çünkü alıcı ve nonce tutmaz. Aradaki biri bir açıklamayı silerse sd_hash bozulur. Telefondaki anahtar olmadan da kimse yeni bir KB-JWT üretemez (kopyalanan belge neden işe yaramaz). Standart anahtar bağlamayı isteğe bırakır; Tamga'da her belge için zorunludur.

Tamga standardın üstüne ne ekliyor?

Standart birçok seçeneği açık bırakır. Tamga profili onları kapatır:

KonuTamga kuralı
İmzayalnız ES256 (P-256)
Özetyalnız sha-256
typ başlığıdc+sd-jwt; eski vc+sd-jwt reddedilir
Tuz128 bit, her açıklamada yeni
Gizli alanlarkurum gizlenmesine izin verilen her alanı gizler
Anahtar bağlamaistisnasız zorunlu
Sahte özet (decoy)kullanılmaz

Tamga kimlik belgesi yüz yüze kontroller ve yalnız mdoc kabul eden tarayıcılar için ikinci bir biçimde, ISO mdoc olarak da verilir: ISO 18013-5 ve mdoc. Belgelerin kurum, cüzdan ve doğrulayıcı arasında nasıl taşındığı: OpenID4VCI ve OpenID4VP.

Daha derine in

Bayt düzeyindeki profilin tamamı, çözülmüş örnekler, doğrulama adımları ve en sık yapılan uygulama hataları Tamga Network geliştirici belgelerinde: SD-JWT VC profili (SPEC-CRED-0002). Biçim seçiminin gerekçesi: Belge biçimleri.

Sık sorulan sorular

SD-JWT VC bir JWT ile aynı şey mi?

Bir JWT'nin üzerine kurulur. İmzalı parça sıradan bir JWT'dir; SD-JWT'nin eklediği, tuzlu özetler, JWT'nin yanındaki açıklamalar ve sondaki anahtar bağlama imzasıdır.

Doğrulayıcı kaç alanı gizlediğimi görebilir mi?

_sd listesindeki özet sayısını görür, yani gizli alanlar olduğunu anlar. Onları okuyamaz. Her belge türünün alan listesi zaten şema kataloğunda herkese açıktır.

Hangi Tamga belgeleri SD-JWT VC kullanır?

Hepsi: öğrenci belgesi, diploma, bilet, kimlik, sürücü belgesi bilgisi, e-posta ve telefon belgeleri. Kimlik belgesi ayrıca mdoc olarak da verilir.

Kaynaklar

Adım adım anlatım Rehber’de

Kurulumdan kayıp telefona kadar her şey, uygulamanın kendi ekranlarıyla.

Rehbere git

Tamga Wallet'ı indir

App Store ve Google Play'de. Diplomanı, öğrenci belgeni, biletini telefonunda taşı.

 Bütün yazılar