Seçici paylaşım: belgenin yalnız bir satırını göstermek
Seçici paylaşım, imzalı bir belgenin tek bir alanını, örneğin "öğrenci mi?" yanıtını göstermeni sağlar; geri kalanı gizli kalır, imza yine doğrulanır.
Yazan: Tamga Wallet ekibi5 dk okuma
Seçici paylaşım, imzalı bir belgenin yalnız bazı alanlarını gösterip geri kalanını gizlemektir; karşı taraf yine de gördüklerini kurumun imzaladığını doğrulayabilir. Tamga Wallet'taki öğrenci belgesiyle bir sinema adını, bölümünü, fakülteni ya da kayıt yılını görmeden "kayıtlı öğrenci: evet" bilgisini alabilir. Belgenin geri kalanı telefonunda kalır.
Bugün neden belgenin yalnız bir kısmını gösteremiyorum?
Kâğıtta ya da PDF'te belge tek parçadır. Bir satırı parmağınla kapatır ya da ekran görüntüsünü kırparsan karşı taraf geri kalanın gerçek olup olmadığını artık anlayamaz. Bu yüzden pratikte belgenin tamamı gider: öğrenci indirimi için sinema öğrenci numaranı, bölümünü, bazen doğum tarihini görür; oysa tek bir yanıta ihtiyacı vardı.
Dijital imzalı belgede de ilk bakışta benzer bir sorun var. İmza, imzalanan baytların tamamını kapsar. Tek bir karakteri değiştirir ya da çıkarırsan imza tutmaz. Seçici paylaşım, imzayı bozmadan alan çıkarabilmeyi sağlayan tekniktir.
Doğrulayıcı gerçekte ne görür?
Tamga Network'te üniversitelerin verdiği öğrenci belgesini ele alalım. Alanları arasında öğrencilik durumu, kayıt yılı, öğrenim düzeyi, program, alan kodu, fakülte, tahmini mezuniyet yılı ve is_enrolled adında bir alan daha vardır: basit bir evet ya da hayır.
Bu son alan tam da bu iş için var. Ağın eğitim kuralları bunu bir sinemayla anlatır: sinemanın üniversiteyi, bölümü ya da kayıt yılını bilmesine gerek yoktur; tek ihtiyacı "bu kişi şu an öğrenci mi?" sorusunun yanıtıdır. "Kayıtlı öğrenci" ayrı bir alan olduğu için yalnız onu paylaşabilirsin.

Bazı bilgiler ise her zaman görünür; bunları bilmek iyi olur:
- Belgeyi kimin verdiği. Kurumun kimliği açıkta gider; doğrulayıcı kimin imzasını denetleyeceğini böyle bilir. Yani sinema yalnız "bir öğrenci" değil, "bu üniversitenin bir öğrencisi" bilgisini alır.
- Belgenin türü, ne zaman verildiği ve ne zamana kadar geçerli olduğu.
- Telefonunun belgenin sana ait olduğunu kanıtlamak için kullandığı anahtarın açık kısmı. Tamga Wallet belgenin her kopyası için ayrı bir anahtar kullanır; bu değer seni bir doğrulayıcıdan ötekine izlemez: Bağlanamazlık.
- İptal edilebilen belgelerde durum listesindeki yerin adresi.
İmza bozulmadan nasıl çalışıyor?
Fikrin adı tuzlu özet (salted hash). Ayrıntılı tarifi SD-JWT standardında (RFC 9901) yazılı, SD-JWT VC yazımız da bir adım derine iner; kısası şöyle:
- Kurum her alanı ayrı hazırlar. Gizlenebilecek her alan için alan adını ve değerini alır, 16 baytlık rastgele bir değer (tuz) ekler ve sonucun parmak izini (özetini) hesaplar.
- Yalnız parmak izlerini imzalar. İmzalı belgede değerler değil, parmak izlerinin listesi bulunur. Değerler belgenin yanında, her alan için ayrı küçük parçalar olarak durur; bunlara açıklama parçası (disclosure) denir.
- Cüzdanın bütün parçaları tutar. Bir paylaşımı onayladığında imzalı belgeyi ve yalnız seçtiğin alanların parçalarını gönderir. Bir alanı gizlemek, parçasını göndermemekten ibarettir; hiçbir şey yeniden imzalanmaz.
- Doğrulayıcı her parçayı denetler. Aldığı her parçanın parmak izini hesaplar ve imzalı listede arar. Oradaysa o alanı kurum imzalamıştır. Parçası gelmeyen alanlar, doğrulayıcının geri çeviremeyeceği parmak izleri olarak kalır.

Gizli alanları gizli tutan tuzdur. Tuz olmasaydı "is_enrolled: true" ya da bir doğum tarihinin parmak izi hep aynı olurdu; doğrulayıcı olası değerleri tek tek deneyerek gizli alanı tahmin edebilirdi. Her alan için yeni ve rastgele bir tuzla bu tahmin işe yaramaz.
Tek bir açıklama parçası çözüldüğünde şöyle görünür. Değerler örnektir, ağın kurallarının tarif ettiği biçimde hesaplanmıştır:
{
"disclosure": ["in0aF_dIW50H3VA1H6C9sQ", "is_enrolled", true],
"sent_as": "WyJpbjBhRl9kSVc1MEgzVkExSDZDOXNRIiwgImlzX2Vucm9sbGVkIiwgdHJ1ZV0",
"fingerprint_in_signed_document": "pUn9E1MBiJdd0gAM8Q72UUVkNbkQnqp3ny78_y3iwI0"
}İlk satır tuz, alan adı ve değerdir. İkincisi aynı dizinin gönderilmek için kodlanmış hâlidir. Üçüncüsü onun SHA-256 parmak izidir; kurumun imzalı belgenin içine koyduğu budur. Doğrulayıcı üçüncüyü ikinciden yeniden hesaplar; tutarsa alan gerçektir.
Yüz yüze denetimde de aynı mı?
Fikir aynı, paket farklı. Tamga kimlik belgesi için, mobil sürücü belgelerinin biçimi olan ve belgeyi karşındaki okuyucuya göstermek için kurulan ISO mdoc biçimini (ISO/IEC 18013-5) de kullanır. Orada her veri ögesi kendi rastgele değeriyle saklanır, kurum bunların parmak izi listesini imzalar ve cüzdan yalnız senin onayladığın ögeleri verir. Bir yaş kontrolü yalnız age_over_18 alanını alıp başka hiçbir şey almayabilir.
Yaşta bir adım daha var. "18 yaş üstü" gibi bir alan yine imzalı bir belgeden gelir; doğrulayıcı imzalı bir "evet" alır. Tamga Wallet ise sıfır bilgi ispatıyla belgeyi hiç göndermeden "18 yaş üstü" olduğunu kanıtlayabilir. Android telefonlar bunu bugün yapıyor; ispatın henüz olmadığı iPhone'da, site kabul ediyorsa yalnız evet/hayır alanı gider.
Tamga Wallet'ta bu nasıl görünür?
Bir site ya da masa belge istediğinde onay ekranı alanları "Şu alanlar paylaşılacak — başka hiçbir şey gitmez" başlığı altında listeler. Telefon kilidinle onaylamadan önce isteyeni ve kayıtlı amacını görürsün.
Seçici paylaşımın işleyişinden birkaç ayrıntı çıkar:
- İsteğe bağlı alanlar. Doğrulayıcı bir alanı isteğe bağlı işaretleyebilir ya da birkaç seçenekten birini isteyebilir. İsteğe bağlı olanı paylaşmadan bitirebilirsin: Seçenekli istekler ve eksik bilgi.
- Sende olmayan alanlar. Doğrulayıcı belgende bulunmayan bir şey isterse cüzdan bunu söyler ve yerine hiçbir şey göndermez.
- Fazla istek. Her doğrulayıcı isteyebileceği alanlarla kayıtlıdır. Fazlasını isterse cüzdan ayrı bir uyarı gösterir ve paylaş düğmesini birkaç saniye bekletir.
- Tutarlılık. Aynı doğrulayıcı ve aynı belge türü için cüzdan paylaşılan alanları tutarlı tutar. Bir ziyaretten ötekine değişen alanlar neyin saklandığını ele verirdi.
Seçici paylaşım neyi yapamaz?
Yalnız kurumun gizlenebilir yaptığı alanları gizleyebilir ve yalnız kurumun belgeye koyduğu yanıtları gösterebilir. "Kayıtlı öğrenci" çalışır, çünkü üniversite onu ayrı bir alan olarak ekler; cüzdan verinden yeni bir evet/hayır yanıtı uyduramaz. Bir alan paylaşıldıktan sonra da artık doğrulayıcıdadır. Seçici paylaşım telefonundan neyin çıkacağına karar verir; doğrulayıcının sonra onunla ne yapacağına karışamaz. Doğrulayıcının aldığını silmesini istersen bunu Geçmiş'ten isteyebilirsin.
Sık sorulan sorular
Adımı gizleyip öğrenci belgemi yine gösterebilir miyim?
Evet, doğrulayıcı yalnız "kayıtlı öğrenci" alanını istiyorsa. Adın gönderilmez; doğrulayıcı üniversiteyi, belge türünü, geçerliliğini ve o tek alanı görür.
Doğrulayıcı gizli alanları çıkarabilir mi?
Hayır. Elinde yalnız rastgele tuzlarla üretilmiş parmak izleri vardır; bunlar geri çevrilemez, tahmin de edilemez.
Hangi alanların gizlenebileceğine kim karar verir?
Belge türünün Tamga Network şema kataloğundaki tanımı. Öğrenci belgesinde bütün içerik alanları gizlenebilir; belgeyi veren, tür, tarihler ve anahtar her zaman görünür.
Seçici paylaşım AB'nin cüzdan kurallarında var mı?
Evet. AB'nin dijital kimlik tüzüğü cüzdanların seçici paylaşımı desteklemesini şart koşar; Tamga'nın kullandığı iki biçim, SD-JWT VC ve ISO mdoc, AB cüzdan altyapısının biçimleridir.
Kaynaklar
- IETF RFC 9901, Selective Disclosure for JSON Web Tokens (SD-JWT): rfc-editor.org
- IETF SD-JWT-based Verifiable Credentials (draft-ietf-oauth-sd-jwt-vc): datatracker.ietf.org
- ISO/IEC 18013-5:2021, mobil sürücü belgesi (mDL) uygulaması: iso.org
- 2024/1183 sayılı AB Tüzüğü (eIDAS 2.0), madde 5a: EUR-Lex
- AB Dijital Kimlik Cüzdanı Mimari ve Başvuru Çerçevesi (ARF): GitHub
- Tamga Network, SD-JWT VC profili (SPEC-CRED-0002): docs.tamga.network/tr/specifications/sd-jwt-vc
- Tamga Network, Eğitim belgeleri (SPEC-SCHEMA-0002 §2.3, is_enrolled): docs.tamga.network/tr/specifications/education-schemas
- Tamga Network, Belge biçimleri: docs.tamga.network/tr/concepts/credential-formats
İlgili
- Yazı · StandartlarSD-JWT VC: seçici paylaşımın arkasındaki biçimSD-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.
- Yazı · GizlilikAynı belgeyi iki yere göstermek: neden birbirine bağlanamaz?Tamga Wallet her doğrulayıcıya belgenin ayrı kopyasını, her siteye ayrı takma ad verir; iki yer kayıtlarını karşılaştırıp seni eşleştiremez.
- Yazı · GizlilikYaşını doğum tarihini göstermeden kanıtlamakSite yalnız "18 yaş üstü müsün?" diye sorarsa Tamga Wallet yalnız bu yanıtı kanıtlar. Doğum tarihin, adın ve belgenin kendisi gösterilmez.
- Yazı · GizlilikFazlasını vermeden yaşamak: 'hepsini göster' devri bitmeliFotokopi, tarama ve ekran görüntüsü tek yanıt gerekirken bütün belgeyi gönderir. KVKK ve GDPR'da veri azaltma, seçici paylaşımın getirdiği fark.
- RehberSeçenekli istekler ve eksik bilgiBazı siteler birkaç seçenekten birini ya da isteğe bağlı bilgi ister; hangisinin gideceğini sen seçersin. Belgende olmayan bilgi istenirse hiçbir şey gönderilmez.
Adım adım anlatım Rehber’de
Kurulumdan kayıp telefona kadar her şey, uygulamanın kendi ekranlarıyla.
Tamga Wallet'ı indir
App Store ve Google Play'de. Diplomanı, öğrenci belgeni, biletini telefonunda taşı.