Appearance
Sürüm notu 1.1.4 (2026-09-27) — sağlamlaştırma: (1) Bütün tarih alanları okunabilir ISO 8601 olmalı; okunamayan tarih listeyi geçersiz kılar (NaN karşılaştırmaları geçerlilik/tazelik denetimini sessizce atlatmasın). (2)
issuers[].delegate_keys[]içindepurpose: "status_list"kaydı kurumun iptal listesi imza sertifikasının parmak izidir; doğrulayıcı iptal listesi imzacısını bununla eşler (SPEC-CRED-0003 S11). (3) Tazelik yüklemeden sonra da işler: en erkennext_updateya da son çapa satırı + azami yaş geçince cevaplar UNKNOWN olur (BT5).
Sürüm notu 1.1.3 (2026-09-27) — ADR-0015 (D-TRUST-1): §6 yükleyici kuralları tek gerçeklemede (
@tamga-network/trust/core, platformdan bağımsız); cüzdan dahil tüm istemciler aynıTrustSource'u kullanır.
Sürüm notu 1.1.2 (2026-09-27): çapa satırlarındaki
published_atRFC 3339 tarih-saattir ve yayıncının saatiyle yazılır; yükleyici biçimi doğrular, bozuk satır listeyi geçersiz kılar (doğrulayıcının D5 kontrolünü sessizce atlamasını önler — SPEC-API-0001 1.3.2). Doğrulayıcılar yayıncı saatine kayma toleransı uygular.
Sürüm notu 1.1.1 (2026-09-26, düzeltme) — TL12 anlık durum: 1.1.0'daki kontrol noktası yalnızca arşivi işaret ediyordu; yükleyici güncel dilimi okuyunca arşivden önce çapalanmış status listelerini unutuyordu (her issuer bir sonraki yayına kadar D2 INDETERMINATE; üretim kadansında ≤ 1 saat). Kontrol noktası artık imzalı
statetaşır: liste başına son status çapası + şema çapaları; yükleyici baştaki kontrol noktasını durumsuzsa reddeder. Bulan: sahne 2b (2026-09-26 akşam).Sürüm notu 1.1.0 (2026-09-26) — çapa günlüğü arşivleme (TL12): yeni
checkpointsatır türü (§5), yükleyici kuralı vetrust:verify --fullreplay. Gerekçe: demo kadansıyla günlük 7.1k satıra ulaştı, bir yükleme 5,8 s sürdü ve servislerin periyodik yenilemesi üst üste bindi (2026-09-26 bulgusu). Karar değişmedi (TL2 silme yasağı korunur); ek kural.Sürüm notu 1.0.1 (2026-09-25) — ADR-0011 (Tamga geçici kimlik attestation sağlayıcısı): TL8'e Tamga kimlik attestation sağlayıcısının konumu eklendi (
issuers[]kaydı; PID değil);tl-trörneğinetamga-idissuer'ı ve kurum issuer'ının kimlik eşleştirme RP kaydı (x509_san_dns:issuer.tamga.network, scope: TCKN + doğum tarihi + ad + soyad) girdi.
Kapsam
Bu spesifikasyon ADR-0009 K2'nin normatif uygulamasıdır: zincir kurulana kadar (≥2 bağımsız validator operatörü) güven kayıtlarını taşıyan liste biçimini tanımlar. Zincir kurulunca aynı veriler kontratlara replay edilir (§7); belgeler, cüzdan ve doğrulama hattı değişmez. Kanonik alan adları SPEC-BC-0001 ve ARCH-0003 §2.4 SQL yansımasından alınmıştır. Kişisel veri hiçbir listede yoktur (DP1).
1. İlkeler
- Her alan bir kontrat kaydına eşlenir (§7); liste = zincirin tek-imzacılı özel hâli.
- Kişisel veri yok — yalnızca kurum adı, sertifika parmak izi, statü, tarih, URI, kimlik türetimleri.
- Sürüm + hash zinciri —
versionmonoton,previous_version_hash = sha256(<önceki .jws>); silme yok; statü değişiklikleristatus_history'ye eklenir. - İmza — her liste JWS compact (
.jws;alg: ES256,x5coperatör sertifikası);.jsonyalnızca insan için. Doğrulayıcı yalnızca.jwskullanır;x5c[0]parmak izinikeys/root-fingerprints.json(lotl) veyalotl.national_lists[].signing_keys(tl) ile eşler. - ETSI eşlemesi — statüler Tamga enum'uyla; ETSI TS 119 612 XML projeksiyonu SPEC-ID-0002 §8.1 tablosuyla üretilir (
granted/withdrawn/TakenOverBy). - Kadans —
lotl/tl-<cc>:next_update≤ 90 gün, değişiklik olmasa da yeniden imza; değişiklik ≤ 24 saatte yayın;anchors.jsonlsaatlik (heartbeat dahil). - Tip kimliği —
vctURN (ADR-0010);lotl.schemas[]katalog girdisimetadata_url + content_hashverir. - Kategori sinyali — issuer
class: PUB | QUALIFIED | EAA(ADR-0010 K5). - TDT-first —
lotl+ her üye devlet için ulusal liste slotu, tam ARF rol seti,operator.on_behalf_of; devir yalnızcaoperatoralanını değiştirir;ca_id/issuer_id/vctsabittir (D-GOV-5).
2. Dosya yerleşimi (https://trust.tamga.network/)
lotl.jws · lotl.json listelerin listesi + NETWORK şemaları + wallet providers + kategoriler
tl-tr.jws · tl-tr.json TR ulusal listesi (root_cas, issuers, relying_parties, national_schemas)
tl-<cc>.jws (RESERVED) AZ/KZ/KG/UZ (üye), HU/TM (gözlemci) — slot
anchors.jsonl çapa günlüğü (satır = JWS)
keys/root-fingerprints.json LOTL imza sertifikası parmak izleri (= tamga.network/trust-anchor)
keys/<ad>.cert.pem operatör/kök/wallet-provider/rp sertifikaları (ilan)
archive/<dosya>.v<NNNN>.jws değişmez sürüm arşivi (replay girdisi)
CHANGELOG.md herkese açık değişiklik günlüğü3. lotl — listelerin listesi
| Alan | Tip | Anlam / kontrat karşılığı |
|---|---|---|
list_format_version | string | Biçim sürümü; bilinmeyen → doğrulayıcı durur (CMP2) |
list_type | "lotl" | |
version, issued_at, next_update, previous_version_hash | Sürüm/hash zinciri (§1.3, §1.6) | |
operator | {name, status: "provisional", on_behalf_of, trust_framework, transparency_report} | Kurucu vekil; FW-TF-0001 URL'i |
catalogue | {url} | Type Metadata çözümleme yolu (schemas.tamga.network/v1/catalogue.json) |
anchor_signing_keys[] | {fingerprint_sha256, cert_ref, status} | Çapa günlüğü imzacıları (≥2 kaydırmalı — TL3) |
national_lists[] | {state_code, status: ACTIVE|RESERVED, membership, list_url, operator, roles{registrar, tlso, pid_provider, access_ca, national_root_ca}, signing_keys[], recognition{mode, recognizes[]}} | Governance üye listesi + CrossRecognition |
schemas[] | {schema_id, vct, metadata_url, content_hash, layer: NETWORK, governance, status, registered_at, status_history[]} | SchemaRegistry (NETWORK); registered_at kalıcıdır (ilk çapa zamanı) |
eaa_categories | {urn → açıklama} | Kategori namespace'i (ADR-0010 K5) |
wallet_providers[] | {provider_id, legal_name, wua_signing_keys[], solutions[{solution_id, min_version, status, security_level}], status} | WUA güven çapası (R-7; zincirde henüz yok — ADR adayı) |
pid_providers[] | boş, rezerve | BT8 → TL8 |
4. tl-<cc> — ulusal liste
| Alan | Anlam / kontrat karşılığı |
|---|---|
state_code, version, issued_at, next_update, previous_version_hash, operator | Namespace = devlet; imza yalnızca o namespace'in anahtarıyla (N1'in Faz B okuması) |
root_cas[] {ca_id, legal_name, cert_fingerprint_sha256, cert_pem, service_type, operator, status: ACTIVE|ROLLING_OVER|RETIRED|REVOKED, valid_from/until, successor_ca_id, status_history[]} | RootCARegistry (CA1–CA3); ca_id = keccak256(cc ‖ SHA-256(rootDER)) |
issuers[] {issuer_id, slug, legal_name, category, assurance: I1..I3, class: PUB|QUALIFIED|EAA, assurance_basis, parent_ca_id, cert_fingerprint_sha256, issuer_url, status_list_base, status, valid_from/until, successor_id, status_history[], schema_authorizations[{schema_id, vct, allowed, valid_from, valid_until}], delegate_keys[], authentic_source} | IssuerRegistry (I1–I4, R1–R2); issuer_id = keccak256(cc ‖ SHA-256(leafDER)); yetki zaman pencereli (I3) |
relying_parties[] {rp_id, client_id, legal_name, access_cert_fingerprint_sha256, status, registered_at, scopes[{scope_id, purpose, vct, claims[], valid_from, valid_until}], status_history[]} | RelyingPartyRegistry; client_id = OpenID4VP client identifier (x509_san_dns: / x509_hash:); scopes[] = ARF registration certificate muadili (AP6) |
national_schemas[] | SchemaRegistry (NATIONAL) |
Statü sözlüğü: ACTIVE | SUSPENDED | REVOKED | RETIRED (+ kök: ROLLING_OVER). Geçmiş silinmez; doğrulama status_history'ye belgenin iat'ı ile bakar (D-BC-3, SPEC-BC-0001/I2–I3). REVOKED issuer'ın listesini halefi (successor_id) yayınlayabilir (I4). Operatör aracı: trust-publisher status <slug> <STATUS> --reason r.
5. anchors.jsonl — çapa günlüğü
Her satır bağımsız JWS; payload {seq, previous_hash, ts, kind, …}:
kind | Alanlar | Kontrat karşılığı |
|---|---|---|
status_list | list_id, issuer_id, list_uri, content_hash, list_version, published_at | StatusListRegistry.publishList (S1/S4 Faz B okuması, L1) |
schema | schema_id, vct, content_hash | SchemaRegistry contentHash (D8: CDN yayınından sonra) |
heartbeat | — | Saatlik kadans (S5 mantığı operatör tarafında) |
checkpoint | archive: { file, sha256, seq_from, seq_to, lines }, state: { status_lists[], schemas[] } | Arşiv kontrol noktası (TL12); state = arşive giden satırların ürettiği son durum |
Kurallar: saatte ≥1 satır; list_version issuer başına monoton (L1/S3); content_hash verifier D5'te Status List Token hash'iyle karşılaştırılır; satır silinmez; günlük herkese açık; list_uri opak (S8).
Arşivleme ve kontrol noktası (TL12, v1.1.0). Günlük büyüdükçe yükleme süresi satır sayısıyla doğrusal artar (her satır bir JWS doğrulaması). Operatör, günlük bir eşiği aşınca (varsayılan 500 satır) mevcut satırların hepsini archive/anchors-<from>-<to>.jsonl dosyasına taşır ve yeni günlüğün ilk satırı olarak imzalı bir checkpoint yazar: seq = seq_to + 1, previous_hash = sha256(arşivdeki son satır), archive.sha256 = sha256(arşiv dosyası) ve state — arşive giden satırların ürettiği son durum (liste başına en yüksek list_version'lı status çapası + şema çapaları). Sonraki çapa normal biçimde kontrol noktasına bağlanır; zincir kesintisizdir, hiçbir satır silinmez (TL2). Yükleyici: ilk satır checkpoint ise imzasını doğrular (çapa imza anahtarı), seq'in seq_to + 1 olduğunu denetler, state'i depoya uygular (yoksa reddeder) ve zinciri oradan sürdürür; checkpoint TrustSource'a kayıt üretmez. Ortada görülen checkpoint sıradan bir satırdır (tam geçmiş yüklemesinde). Tam geçmiş (TL10 replay, trust:verify --full): kontrol noktaları geriye izlenir, her arşivin hash'i doğrulanır, zincir seq 0'dan yüklenir. Yükleme maliyeti böylece güncel dilimle sınırlı kalır; arşivler herkese açık kalır.
6. Yükleyici ve TrustSource (doğrulayıcı tarafı)
@tamga-network/trust loadTrustSet sırası: lotl.jws imzası (kök parmak izleri) → tl-<cc>.jws imzaları (signing_keys) → biçim (list_format_version) → hash zinciri → next_update → anchors.jsonl zinciri → bellek-içi yansıma (ARCH-0003 §2.4 tabloları). Sonra ListTrustSource SPEC-BC-0001 §11.2 okuma setini sunar: isCredentialAcceptable(issuerId, iat), isCredentialSchemaAcceptable(issuerId, schemaId, iat), isRecognizedBy, schemaContentHash, statusAnchor, relyingParty, issuer, schema, isWalletProviderKey, freshness(). Üç değerli cevap: YES | NO | UNKNOWN; UNKNOWN → INDETERMINATE (CMP4). Servisler listeyi periyodik yeniden yükler (issuer TAMGA_TRUST_RELOAD_SEC, verifier TAMGA_VERIFY_TRUST_RELOAD_SEC).
7. Kontrat eşlemesi ve zincire geçiş
| Liste alanı | Kontrat çağrısı |
|---|---|
root_cas[] | RootCARegistry.registerRootCA / rollover / retire / revoke |
issuers[] | IssuerRegistry.registerIssuer / suspend / revoke(revokedAt) / setSuccessor |
issuers[].schema_authorizations[] | IssuerRegistry.setSchemaAuthorization(issuerId, schemaId, from, until) |
lotl.schemas[] | Governance önerisi → SchemaRegistry.registerSchema(vct, contentHash, NETWORK) |
relying_parties[] | RelyingPartyRegistry.register / setScope |
anchors kind=status_list | StatusListRegistry.publishList(listId, uri, hash, version) |
anchors kind=schema | SchemaRegistry contentHash |
wallet_providers[] | zincirde henüz yok — ADR adayı |
Geçiş: archive/ sürümleri sırayla kontrat çağrılarına replay edilir; TrustSource(list) ile TrustSource(chain)conformance/vectors/trust sorgularına aynı cevabı vermeden geçiş tamamlanmış sayılmaz (TL10; ADR-0009 K7). Devir: yalnızca operator alanı değişir.
8. Değişmezler
| # | Değişmez |
|---|---|
| TL1 | Her listede operator.status vardır ve Faz B boyunca "provisional"dır; on_behalf_of boş bırakılmaz. |
| TL2 | Liste ve çapa günlüğü sürümleri monoton artar; her sürüm bir öncekinin hash'ini taşır; hiçbir satır/kayıt silinmez (statü değişikliği status_history'ye eklenir). |
| TL3 | Liste ve çapa imzası ≥2 kaydırmalı sertifikayla yapılır; rotasyon ≥30 gün önce duyurulur; yeni anahtar eskisiyle imzalanır. (Demo sapması S-6 beyanlı.) |
| TL4 | TrustSource dışında hiçbir bileşen liste dosyalarını yorumlamaz. |
| TL5 | next_update geçmiş veya erişilemeyen liste ile doğrulama INDETERMINATE üretir; asla ACCEPTED, asla REJECTED. |
| TL6 | Bilinmeyen list_format_version gören yükleyici durur ve alarm verir; kabul etmez. |
| TL7 | Ulusal listeyi yalnızca o namespace'in imza anahtarı imzalar; operatör vekâleti operator.on_behalf_of ile beyan edilir. |
| TL8 | Tamga PID vermez; pid_providers[] Faz B boyunca boştur. Tamga'nın geçici kimlik attestation'ı (ADR-0011) bir issuers[] kaydıdır (category: IDENTITY, class: QUALIFIED) ve devlet PID sağlayıcısı atanınca successor_id ile süpersede edilir. |
| TL9 | Şema registered_at ve status_history.since kalıcıdır; yeniden derleme bunları değiştiremez (ilk çapa zamanı). |
| TL10 | Zincire geçiş, liste arşivinin replay'i ve eşdeğerlik testi geçmeden tamamlanmış sayılmaz. |
| TL11 | Hiçbir liste, çapa günlüğü veya değişiklik günlüğü kişisel veri, credential veya credential hash'i içermez. |
| TL12 | Çapa günlüğü yalnızca imzalı checkpoint ile arşivlenir: arşivlenen satırlar archive/ altında kalır (silinmez), kontrol noktası previous_hash ile arşivin son satırına, archive.sha256 ile arşiv dosyasına bağlanır ve arşive giden satırların ürettiği son durumu (state) taşır; yükleyici ilk satırdaki kontrol noktasının imzasını, seq = seq_to + 1 koşulunu ve state'in varlığını doğrulamadan zinciri sürdürmez; arşivleme bir listenin ya da şemanın bilinirliğini asla düşürmez; tam geçmiş her zaman arşivlerden yeniden kurulabilir (TL10). |
Güvenlik ve Mahremiyet Notları
- Bilinen zayıflama (ADR-0009 K3): çapa tek operatör imzasına dayanır; operatör + issuer birlikte hareket ederse çift-konuşma mümkündür — herkese açık günlük,
CHANGELOG, üç aylık şeffaflık raporu (G8) ve bağımsız denetim caydırır. Pilot sınırlar bildirimi madde 5–6. list_uriopak;status_anchorskurumu/kohortu kodlamaz (S8). IP loglanmaz (G2).
Açık Konular
wallet_providers[]zincir karşılığı (ADR adayı).- ETSI 119 612 XML/XAdES projeksiyon üreteci (
apps/trust-publisher export-etsi) — Faz 1 öncesi. - ≥2 kaydırmalı sertifika (S-6) ve KMS'te imza anahtarı — pilot öncesi.
İlgili Dokümanlar
ADR-0009 · ADR-0010 · SPEC-BC-0001 · SPEC-ID-0002 · SPEC-CRED-0003 · SPEC-SCHEMA-0001 · ARCH-0003 · FW-ARF-0001 · FW-RB-0001 · docs/delivery/04-TRUST-LIST-FORMAT.md (kaynak taslak) · docs/delivery/05-MIGRATION-TO-CHAIN.md
Durum
Active — 1.0.0, 2026-09-24. docs/delivery/04 ve 02-INHERITED-INVARIANTS §D (BT1–BT10)'un kanonikleştirilmiş hâli (DB-11; ADR-0009 K2 "kabulle birlikte SPEC-TRUST-0001"). BT → TL kod eşlemesi birebir (BT9 → RB-ENF-04'e taşındı; TL9 ve TL11 yeni: sahne 10'da bulunan hata ve DP1'in liste okuması).