Skip to content
ADR-0034Mimari karar kaydıKabul edildisürüm 1.0.02 Ekim 2026

Özet (sade) ​

  • Doğrulayıcılar kendilerini alan adıyla değil, sertifikalarının parmak iziyle (x509_hash) tanıtır; AB'nin bağladığı HAIP 1.0 profili bunu zorunlu kılıyor. Cüzdan yalnız bu biçimi kabul eder.
  • Parmak izi sertifika yenilenince değişir. Bu yüzden güven listesindeki her doğrulayıcı kaydı ayrıca kalıcı bir alan adı (dns_name) taşır; takma adlar, belge kopyaları ve geçiş kartları buna bağlıdır — sertifika yenilense de kullanıcının hesapları ve kartları bozulmaz.
  • Cüzdan kanıtının "kim" alanı (sub) her telefonda aynıdır (cüzdan çözümünün adı); telefona özgü bir değer taşımaz.

Bağlam ​

  1. turda (2026-09-30) HAIP (High Assurance Interoperability Profile)Yüksek güvenceli kullanım için OpenID4VC seçeneklerini sabitleyen profil; EUDI Wallet'ta da kullanılır. 1.0 maddeleri tek tek eşlendi; iki fark açık kaldı ve kapatılmış kararlara dokunduğu için ADR'ye bırakıldı:

  2. İstemci kimliği öneki. HAIP 1.0 §5: "For signed requests, the Doğrulayıcı MUST use, and the Wallet MUST accept the Client Identifier Prefix x509_hash". OpenID4VP (OpenID for Verifiable Presentations)Doğrulayıcının cüzdandan belge istediği ve gösterimi aldığı protokol. 1.0 §5.9.3: değer, yaprak X.509 sertifikanın DER kodlamasının SHA-256 özetinin base64url hâlidir; cüzdan özetin yaprak sertifikayla eşleştiğini, imzayı ve sertifika zincirini doğrular. Tamga doğrulayıcıyı (verifier)Gösterilen belgeyi denetleyen taraf: imza, belge verenin güven listesindeki kaydı, durum ve politika. Relying party diye de anılır. bu karardan önce x509_san_dns:<alan adı> kullanıyordu (SPEC-PROTO-0002 §2; güven listesi (trust list)Bir ülkenin kök sertifikalarını, belge verenlerini ve kayıtlı relying party'lerini taşıyan imzalı liste. Bugün Tamga'da güven bu listelere dayanır; ortak defter sonra gelir. kaydı ve ADR-0017 aracı ilişkileri bu dizeyle anahtarlıydı). ETSI TS 119 475 erişim sertifikasını (access certificate)Relying party'nin isteklerini imzaladığı X.509 sertifikası; client kimliği bu sertifikanın özetinden türetilir. x509_hash yaprağı olarak tanımlar (CIR 2026/1730).

  3. WIA (Wallet Instance Attestation)Cüzdan sağlayıcısının imzaladığı, cüzdan kurulumunun gerçek olduğunu bildiren kısa ömürlü beyan; belge veren, belgeyi vermeden önce denetler. sub. HAIP 1.0 §4.4.1: "The subject claim for the Wallet Attestation MUST be a value that is shared by all Wallet instances using the present type of wallet implementation"; ayrıca PAR'dakiYetkilendirme isteğinin önce sunucuya gönderildiği OAuth adımı; içerik tarayıcı adresinde görünmez. client_id bu sub değeridir. Tamga cüzdan sağlayıcısını (wallet provider)Cüzdanı sunan ve cüzdan ile anahtar kanıtlarını imzalayan kuruluş. Tamga Wallet ağın ilk cüzdanıdır. (apps/wallet-provider) sub olarak her işleme özel efemer anahtarın parmak izini yazıyordu (ADR-0025 K2). İzlenemezlik açısından sorun değildi, ama kuralın harfine uymuyordu.

Proje yönetimi 2026-10-01'de iki maddede AB yolunu onayladı.

Karar ​

K1 — Doğrulayıcı istemci kimliği x509_hash ​

İmzalı istek nesnesinin client_id'si x509_hashHAIP'teki client kimliği biçimi: kimlik, relying party'nin erişim sertifikasının base64url SHA-256 özetidir.: + base64url(SHA-256(erişim sertifikası DER)). Değer elle verilmez: pemRpSigner(anahtar, sertifika) sertifikadan hesaplar; Tamga Verify ve kurum belge verenlerinin sunum istekleri de öyle. Ayar dosyalarında TAMGA_VERIFY_CLIENT_ID ve TAMGA_ISSUER_RP_CLIENT_ID yoktur.

K2 — Cüzdan yalnız x509_hash kabul eder ​

HAIP başka önek istemez; geliştirme evresinde geriye uyum yazılmaz (ADR-0029). Cüzdan: önek x509_hash değilse ya da özet yaprak sertifikayla eşleşmezse istek reddedilir. x509_san_dns kuralının güvenlik yanı korunur: yanıt adresinin (response_uri) alanı, isteği imzalayan sertifikanın SAN alan adlarından biri olmalıdır (yerel geliştirme adresleri hariç). tamga_on_behalf_of (aracı istek, ADR-0017 K7) de x509_hash biçimindedir.

K3 — RP kaydında kalıcı kimlik: dns_name ​

Güven listesi relying_parties[] kaydı:

  • client_id: yayıncı erişim sertifikasından hesaplar (x509_hash:…); kayıt kaynağında yazılmaz.
  • dns_name (zorunlu): kalıcı kayıt kimliği; erişim sertifikasının SAN'ında bulunmalıdır (yayıncı denetler, yoksa yayın durur). Kayıt aracı (register rp, scope <dns_name>), aracı ilişkileri (uses_intermediaries, served_relying_parties) ve kayıt sertifikası (registration certificate)Kayıt kurumunun, bir relying party'nin hangi alanları hangi amaçla isteyebileceğini bildiren imzalı belgesi (en çok 12 ay). üretimi bu alanla çalışır. TrustSource.relyingPartyByDnsName().

K4 — Sertifikadan bağımsız kalması gerekenler dns_name'e bağlanır ​

  • Kopya ayrımı (SPEC-WALLET-0001 WL5) ve takma ad türetme (ADR-0031 K2): cüzdan kayıt çözülüp sertifika eşleşince rpKey'i kaydın dns_name'ine çevirir (stableRpKey). Doğrulayıcı, takma adı aynı değerle denetler. Kayıtsız RP'deRelying party'nin kısaltması: belge isteyen ve doğrulayan kuruluş. client_id kalır (takma ad zaten verilmez).
  • Geçiş kartı (ADR-0012 B): kart jetonunun aud'u RP'nin dns_name'i (kart günlerce geçerli, QR ≤ 400 bayt; x509_hash hem uzun hem yenilemede değişir).
  • Günlük: sunum kaydında RP kimliği dns_name; cüzdan kaydı alan adıyla da çözer.
  • Bilet (EventTicket.gate.verifier_client_id): alan adı aynı kalır (geliştirme evresi şema adı değişmez); değeri doğrulayıcının dns_name'idir — bilet uzun ömürlüdür.

K5 — WIA sub ortak değer ​

Cüzdan sağlayıcısı WIA'da sub = cüzdan çözümünün kimliği (solution_id, ör. tamga-wallet-expo). Örneğe özgü değer yoktur; örnekleri ayıran yalnız her işlemde yeni cnf anahtarı ve yeni, bağlanamaz iptal listesi (status list)Her belgenin tek bir konumu olduğu sıkıştırılmış, imzalı liste; geçerli, askıda ya da iptal olduğunu söyler. girişidir (ADR-0025 K2 değişmez). PAR'daki client_id ve PoP'un iss'i bu değerdir. Kurumun kaydettiği wallet_sub kişiye değil çözüme işaret eder (gizlilik açısından daha az bilgi).

Değişmezler ​

KodKural
CI1Doğrulayıcı imzalı istekte yalnız x509_hash istemci kimliğini kullanır; değer erişim sertifikasından hesaplanır, ayardan okunmaz (HAIP 1.0 §5).
CI2Cüzdan yalnız x509_hash öneki kabul eder; özet yaprak sertifikayla eşleşmezse istek reddedilir. Yanıt adresinin alanı imzalayan sertifikanın SAN'ında olmalıdır (yerel geliştirme hariç).
CI3Güven listesi RP kaydında client_id yayıncı tarafından erişim sertifikasından hesaplanır; kalıcı kayıt kimliği dns_name'dir ve sertifikanın SAN'ında bulunmalıdır.
CI4Kopya ayrımı, takma ad türetme, sunum günlüğü ve aracı ilişkileri dns_name'e bağlanır; x509_hash'e bağlanmaz.
CI5Geçiş kartı jetonunun aud'u RP'nin dns_name'idir.
CI6WIA sub, aynı cüzdan çözümünü kullanan bütün örneklerde ortak değerdir; örneğe özgü tanımlayıcı taşımaz (HAIP 1.0 §4.4.1).

Gerekçe / alternatifler ​

SeçenekSonuçNeden
x509_san_dns'te kalmakretHAIP 1.0 §5 doğrulayıcının x509_hash kullanmasını şart koşuyor; AB cüzdanları yalnız onu kabul etmek zorunda.
Her iki öneki de kabul etmekretHAIP ikinciyi istemiyor; iki yol ikili güvenlik denetimi demek. Geliştirme evresi (ADR-0029).
Takma adı / kopyaları x509_hash'e bağlamakretSertifika yenilenince bütün takma adlar (hesaplar) ve geçiş kartları değişirdi.
Kalıcı kimlik olarak rp_idretrp_id de sertifikadan türüyor (keccak256(ülke ‖ SHA-256(sertifika))).
dns_name (SAN'daki alan adı)kabulKayıtta zaten vardı (x509_san_dns dizesi); sertifikadan bağımsız; yayıncı SAN ile tutarlılığını denetleyebilir.
WIA sub = efemer anahtar parmak iziretİzlenemez ama HAIP'in harfine aykırı; AB kurumu PAR'da ortak değer bekler.

Sonuçlar / operasyonel etki ​

  • Sertifika yenileme sırası: önce yeni erişim sertifikası kayıt kaynağına girer ve liste yeniden yayınlanır (yeni client_id listede), sonra doğrulayıcı yeni sertifikaya geçer. Liste yayımlanmadan sertifika değişirse cüzdan isteği "kayıtlı değil / taklit" diye reddeder. Takma adlar, kopyalar ve geçiş kartları etkilenmez (K4). Kayıt sertifikaları (ADR-0026) her yayında yeniden üretilir.
  • Kayıt aracı: başvuru client_id taşımaz, dns_name taşır; scope <dns_name>.
  • Uyum vektörleri: RP kaydında dns_name, client_id x509_hash.
  • ZK deney fikstürü (packages/verifier/src/zk/fixtures/session.json): oturum dökümüne giren client_id dizesi x509_san_dns biçiminde kalır (ispat o diziyle üretildi; dizenin kendisi denetlenmez).

Durum ​

Accepted — 2026-10-01 (proje yönetimi onayı). Uygulandı: core (x509HashClientId), trust (şema + relyingPartyByDnsName), trust-publisher, doğrulayıcı (imzacı, geçiş kartı), wallet-core (istek doğrulama, stableRpKey, fetchRpRecord), cüzdan, Tamga Verify, cüzdan sağlayıcısı, platform belge vereni.