WEB / WEB-05.04
Key exchange ve session resumption
Yeni TLS connection geçmiş PSK context’ini kullanabilir; key exchange, record encryption ve early-data policy ayrı kararlar olarak kalır.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
Fresh-share PSK
- ClientHello yerelde hazır
Client, atlas-ticket-1 identity’si, binder ve psk_dhe_ke teklifiyle ClientHello’yu hazırlar. PSK secret yerelde kalır; henüz server mesajı almamış ve application data gönderilmemiştir.
- Client · TLS
- ClientHello hazır; ticket identity/binder; psk_dhe_ke
- Server · TLS
- Yeni connection bekliyor; PSK seçilmedi
- ClientHello alındı
Server ticket identity, binder ve offered mode’u aldı; binder doğrulaması henüz local olarak tamamlanmadı.
- Client · TLS
- ClientHello hazır; ticket identity/binder; psk_dhe_ke
- Server · TLS
- CH alındı; binder pending; app yok
- PSK mode seçildi, flight hazır
Verilmiş binder doğrulaması başarılıdır. Server psk_dhe_ke seçip ServerHello ve protected EE/Finished flight’ını hazırlar; fresh key_share bu mode’a dahildir. Client henüz bu seçimi almadı.
- Client · TLS
- ClientHello hazır; ticket identity/binder; psk_dhe_ke
- Server · TLS
- PSK accepted; psk_dhe_ke; SH/EE/Finished hazır
- Server flight alındı
ServerHello ve protected EE/Finished semantic flight client’a ulaştı; peer Finished doğrulaması hâlâ pending.
- Client · TLS
- PSK selected flight received; Finished pending
- Server · TLS
- PSK accepted; psk_dhe_ke; SH/EE/Finished hazır
- Client local gate açıldı
Bu örnekte Finished geçerlidir ve PSK context uygundur; client kendi Finished’ini hazırlar. Henüz application işlemi veya business effect oluşmaz.
- Client · TLS
- Peer Finished valid; own Finished ready; app none
- Server · TLS
- PSK accepted; psk_dhe_ke; SH/EE/Finished hazır
- Client Finished alındı
Client Finished server’a ulaştı; arrival henüz local Finished verification veya user authentication sonucu değildir.
- Client · TLS
- Peer Finished valid; own Finished ready; app none
- Server · TLS
- Client Finished received; verification pending
- Resumed handshake tamam
Server’ın Finished doğrulaması bu örnekte başarılıdır; yeni traffic context tamamlanır. Resource authorization ve application commit ayrıca yapılmalıdır.
- Client · TLS
- Peer Finished valid; own Finished ready; app none
- Server · TLS
- Handshake complete; app delivery none; commit false
Yalnız PSK
- ClientHello yerelde hazır
Client, atlas-ticket-1 identity’si, binder ve psk_ke teklifiyle ClientHello’yu hazırlar. PSK secret yerelde kalır; henüz server mesajı almamış ve application data gönderilmemiştir.
- Client · TLS
- ClientHello hazır; ticket identity/binder; psk_ke
- Server · TLS
- Yeni connection bekliyor; PSK seçilmedi
- ClientHello alındı
Server ticket identity, binder ve offered mode’u aldı; binder doğrulaması henüz local olarak tamamlanmadı.
- Client · TLS
- ClientHello hazır; ticket identity/binder; psk_ke
- Server · TLS
- CH alındı; binder pending; app yok
- PSK mode seçildi, flight hazır
Verilmiş binder doğrulaması başarılıdır. Server psk_ke seçip ServerHello ve protected EE/Finished flight’ını hazırlar; key_share bu mode’da bulunmaz. Client henüz bu seçimi almadı.
- Client · TLS
- ClientHello hazır; ticket identity/binder; psk_ke
- Server · TLS
- PSK accepted; psk_ke; SH/EE/Finished hazır
- Server flight alındı
ServerHello ve protected EE/Finished semantic flight client’a ulaştı; peer Finished doğrulaması hâlâ pending.
- Client · TLS
- PSK selected flight received; Finished pending
- Server · TLS
- PSK accepted; psk_ke; SH/EE/Finished hazır
- Client local gate açıldı
Bu örnekte Finished geçerlidir ve PSK context uygundur; client kendi Finished’ini hazırlar. Henüz application işlemi veya business effect oluşmaz.
- Client · TLS
- Peer Finished valid; own Finished ready; app none
- Server · TLS
- PSK accepted; psk_ke; SH/EE/Finished hazır
- Client Finished alındı
Client Finished server’a ulaştı; arrival henüz local Finished verification veya user authentication sonucu değildir.
- Client · TLS
- Peer Finished valid; own Finished ready; app none
- Server · TLS
- Client Finished received; verification pending
- Resumed handshake tamam
Server’ın Finished doğrulaması bu örnekte başarılıdır; yeni traffic context tamamlanır. Resource authorization ve application commit ayrıca yapılmalıdır.
- Client · TLS
- Peer Finished valid; own Finished ready; app none
- Server · TLS
- Handshake complete; app delivery none; commit false
Full fallback
- ClientHello yerelde hazır
Client, atlas-ticket-1 identity’si, binder ve psk_dhe_ke teklifiyle ClientHello’yu hazırlar. Full handshake için uygun fresh share da tekliftedir. PSK secret yerelde kalır; henüz server mesajı almamış ve application data gönderilmemiştir.
- Client · TLS
- ClientHello hazır; PSK ve full parametreler
- Server · TLS
- Yeni connection bekliyor; PSK seçilmedi
- PSK teklifi alındı
Normal ClientHello PSK identity ve full handshake için uygun fresh share taşır; server acceptance kararı henüz yok.
- Client · TLS
- ClientHello hazır; PSK ve full parametreler
- Server · TLS
- CH received; PSK decision pending
- Certificate flight yerelde hazır
Server policy PSK’yı seçmez. Client full parameters sunduğu için server certificate-based flight’ı hazırlar; Certificate ve Finished’in hazırlanması client’ın bunları doğruladığı anlamına gelmez.
- Client · TLS
- ClientHello hazır; PSK ve full parametreler
- Server · TLS
- PSK reddedildi; certificate-full flight hazır
- Full flight alındı
Certificate-based server flight client’a ulaştı; path, hostname, private-key proof ve Finished kontrolleri bekliyor.
- Client · TLS
- Full server flight received; all peer checks pending
- Server · TLS
- PSK reddedildi; certificate-full flight hazır
- Fallback seçildi, doğrulama bekliyor
Client certificate-based flight’ı aldı, fakat path, hostname, CertificateVerify ve Finished kontrolleri henüz tamamlanmadı. Bu dal bu sınırda durur: handshakeCompletedSelected=false ve businessCommit=false kalır.
- Client · TLS
- Fallback selected; handshake incomplete; app none
- Server · TLS
- PSK reddedildi; certificate-full flight hazır
Early data bekler
- Başlangıç context’i
Seçilmiş başlangıç koşulları local state’tir; henüz bir message arrival veya application sonucu oluşmadı.
- Client · TLS
- Ticket uygun; yeni connection; app gönderilmedi
- Server · TLS
- Yeni connection bekliyor; PSK seçilmedi
- Action context’i seçildi
Normal publish-note isteği mutating operation’dır; resumption eligibility business policy approval yerine geçmez.
- Client · TLS
- Operation publish-note; mutates=true
- Server · TLS
- Yeni connection bekliyor; PSK seçilmedi
- Early policy kapalı
Client profile bu operation’ı early-data sınıfına kabul etmez; hiçbir early message network’e gönderilmedi.
- Client · TLS
- EarlyDataSent=false; wait for verified 1-RTT
- Server · TLS
- Yeni connection bekliyor; PSK seçilmedi
- Business effect bekler
Handshake ve güncel resource authorization sonraki aşamaların koşuludur. Bu local policy kararı sırasında server’a message gönderilmez.
- Client · TLS
- Handshake incomplete; app none; businessCommit=false
- Server · TLS
- Yeni connection bekliyor; PSK seçilmedi
ROLLER · STATE · VERİ AKIŞI
Yeni bağlantıda ne yeniden kurulur?
Atlas Notları aynı service’e ikinci bağlantıyı açıyor. TCP connection reuse varsa açık bağlantıdaki HTTP request için yeni TLS handshake gerekmeyebilir; session resumption ise gerçekten yeni TLS connection kurmanın başka yoludur. Önceki socket’in devamı değildir. Önceki handshake’ten elde edilmiş bir PSK yeni negotiation’a input olur, yeni transcript ve yeni traffic secret’lar ortaya çıkar. Bu yüzden “önceki encryption key’i tekrar kullandık” açıklaması mekanizmayı yanlış kurar.
Key exchange ortak keying material kurar; record encryption bu material’dan türetilmiş symmetric key ile application data’yı korur; signature ise certificate-based handshake’te bir private key’in kontrolünü transcript’e bağlar. X25519 public share göndermek private scalar göndermek değildir. Certificate public key de bir application record’u şifrelemek için kullanılan traffic key değildir. Üç görevi aynı kilit çizimine sıkıştırmak, resumption’daki CertificateVerify yokluğunu yanlışlıkla authentication yokluğu sanmaya götürür.
PSK, ticket ve binder farklı şeylerdir
İlk certificate-based connection’ın başarıyla tamamlandığını ve server’ın NewSessionTicket ile opaque ticket alias’ı verdiğini düşünelim. Client, ticket’ı ona bağlı secret PSK, KDF hash’i, önceki service identity context’i ve lifetime bilgisiyle ilişkilendirir. Sonraki ClientHello ticket identity ve binder taşır; secret PSK açıkça gönderilmez. Ticket, server’daki state’i bulmaya yarayan veri veya protected state olabilir; burada bu iki tasarımdan birinin gerçek encoding’i varsayılmaz.
Binder, offered PSK ile ClientHello context’inin ilişkisini doğrulayan MAC’tir; server seçtiği identity’nin binder’ını kontrol eder. Ticket’ın varlığı acceptance değildir: lifetime, hash compatibility, service context ve server policy koşulları gerekir. PSK seçilirse server Certificate ve CertificateVerify göndermez; authentication geçmişten bağlanan PSK context’i ve Finished üzerinden kurulur. Bu context uygulama kullanıcısının login session’ı değildir; logout veya permission değişikliğini TLS ticket expiry’ye bırakmak doğru policy olmaz.
psk_dhe_ke ile psk_ke neden eşdeğer değil?
Client psk_key_exchange_modes ile desteklediği seçenekleri ilan eder. Selected psk_dhe_ke case’inde iki peer yeni X25519 share üretir; PSK ile yeni asymmetric shared secret key schedule’a birlikte girer. Mode label içindeki “dhe” tarihsel isimdir: güncel TLS 1.3 specification asymmetric key establishment ve extension-defined KEM seçeneklerini de ayırır. Bu örnek özellikle X25519 seçer; bütün implementation’ların aynı group’u seçtiğini iddia etmez.
psk_ke yalnız PSK kullanır ve ServerHello key_share taşımaz. Bu bağlantının ordinary application data’sı PSK’nin sonradan açığa çıkmasına karşı aynı forward secrecy gerekçesine sahip değildir. psk_dhe_ke’de düzgün üretilmiş, bağlantılar arasında tekrar kullanılmayan ephemeral değerler ve secret silme varsayımı bu ayrımı sağlar. Forward secrecy, endpoint’in o sırada plaintext’i okumasını veya application’ın veriyi loglamasını önlemez; “her veri sonsuza kadar gizli” anlamına gelmez.
Ticket uygun değilse full handshake mümkündür
Artifact’te ticket lifetime 3600 saniye, client-side elapsed age 900 saniyedir. “Ticket kullanılabilir” koşulu yaşın lifetime’ı aşmaması, KDF hash uyumu ve service context uygunluğuyla hesaplanır; server acceptance ayrıca selected policy input’udur. Bu sayılar normatif minimum veya browser default’u değil, küçük fixture değerleridir. Ticket SNI context’i, önceki certificate’in yeni service identity için geçerli olması şartından ayrı tutulamaz. Current ticket_lifetime üst sınırı 7 gündür; zero lifetime hemen discard gerektirir ve server daha kısa acceptance policy uygulayabilir. Bounded fixture’nin positive lifetime karşılaştırması bu ek kuralları kaldırmaz.
Client PSK teklifinin yanında full handshake için uygun key_share sunmuşsa server ticket’ı seçmeyip certificate-based handshake’e dönebilir. Bu normal fallback’tir; application request’in tamamlandığını veya kaç millisecond kazanıldığını göstermez. Scene, fallback seçiminde durur; certificate path, hostname, CertificateVerify ve Finished kontrollerinin daha sonra tamamlanması gerektiğini açıkça bırakır. Bir ticket’ın reddedilmesini bütün TLS bağlantısının mutlaka başarısız olmasıyla eşitleme.
0-RTT ayrı bir acceptance kararıdır
Resumption 0-RTT’yi zorunlu kılmaz. Early data, ServerHello’dan önce PSK-derived ayrı key context’iyle gönderilebilen data’dır; ordinary 1-RTT data’yla aynı forward secrecy ve bağlantılar arası non-replay garantilerini taşımaz. AEAD doğruluğu message’ın daha önce hiç işlenmediğini kanıtlamaz. Bu farkı öğrenmek için tekrar gönderim deneyi gerekmez: application policy’nin hangi aşamada side effect’e izin verdiğini takip etmek yeterlidir.
Atlas policy’si “notu yayınla” işlemini early data için uygun saymaz; bu işlem state değiştirir. Client kendi policy kontrolünde bekler, wire üzerinde early application message oluşmaz. 1-RTT doğrulamasından sonra güncel application authorization ayrıca yapılacaktır. Read-only görünen işlem bile quota, log, maliyet veya rate state’i etkileyebilir. Yalnız HTTP method adına bakarak bütün 0-RTT request’lerini güvenli saymak yerine açık bir application profile gerekir.
2. Red · Güven ve etki
Hareket olmadan bütün senaryoları oku
PSK mode
- Ticket bir application role değildir
atlas-ticket-1 notes.example.org service context’ine aittir. Resumption eligibility ve acceptance, browser kullanıcısının güncel role/tenant hakkını veya account active state’ini göstermez.
- Resumption evidence
- Ticket/service context ≠ entitlement
- Early / mode gate
- Policy gate yok
- Business boundary
- Business effect yok
- Mode veya early scope açık seçildi
psk_dhe_ke fresh agreement sağlar; psk_ke serverKeyShare=false ve ordinaryForwardSecrecyFromFreshAgreement=false’dur. TLS 1.3 label’ı fresh-share mode seçimini kanıtlamaz.
- Resumption evidence
- Ticket/service context ≠ entitlement
- Early / mode gate
- psk_ke vs psk_dhe_ke distinct
- Business boundary
- Business effect yok
- Business action beklemede kaldı
normal handshakeCompletedSelected=true olsa bile businessCommit=false kalır. Certificate messages görülmemesi application authorization’ın geçtiği anlamına gelmez.
- Resumption evidence
- Ticket/service context ≠ entitlement
- Early / mode gate
- psk_ke vs psk_dhe_ke distinct
- Business boundary
- Resumed channel / no commit
- Secret rolleri birbirine aktarılmadı
Resumption PSK key-schedule input’tur ve plaintext gönderilmez; c-app-new eski record key değildir. Certificate signing key farklı geçmişi korur; gerçek alias’lar secret byte içermez.
- Resumption evidence
- PSK / new share / new traffic roles
- Early / mode gate
- psk_ke vs psk_dhe_ke distinct
- Business boundary
- Resumed channel / no commit
- güncel authorization korunmalı
normal verified channel sonrası publish-note yine ordinaryAuthorizationRequired=true koşuluna tabidir. Logout/account/tenant değişikliği connection resumption ile geri alınmaz; application policy güncel state’e dayanır.
- Resumption evidence
- PSK / new share / new traffic roles
- Early / mode gate
- Channel resume ≠ current policy allow
- Business boundary
- Resumed channel / no commit
- Control sonucu gereken scope’ta
seçilmiş mode’un secrecy gerekçesi kendi key context’ine aittir. Endpoint plaintext veya log copy’sini TLS geçmişte koruyamadığı için bütün data copies hakkında sonuç kurulmaz.
- Resumption evidence
- PSK / new share / new traffic roles
- Early / mode gate
- Channel resume ≠ current policy allow
- Business boundary
- Mode scope preserved / app unknown
Early action gate
- Ticket bir application role değildir
atlas-ticket-1 notes.example.org service context’ine aittir. Resumption eligibility ve acceptance, browser kullanıcısının güncel role/tenant hakkını veya account active state’ini göstermez.
- Resumption evidence
- Ticket/service context ≠ entitlement
- Early / mode gate
- Policy gate yok
- Business boundary
- Business effect yok
- Mode veya early scope açık seçildi
earlyPolicy.operation=publish-note mutatesState=true ve allowedBeforeHandshake=false verir. Encrypted early data’nın integrity koşulu once-only/freshness sonucu değildir.
- Resumption evidence
- Ticket/service context ≠ entitlement
- Early / mode gate
- publish-note / early withheld
- Business boundary
- Business effect yok
- Business action beklemede kaldı
Early-wait branch’inde henüz negotiated mode seçilmemiş ve handshake tamamlanmamıştır. Early data gönderilmez, business commit oluşmaz. Bekleyen publish-note işlemi başarıyla yayınlanmış gibi gösterilmez.
- Resumption evidence
- Ticket/service context ≠ entitlement
- Early / mode gate
- publish-note / early withheld
- Business boundary
- No early send / no commit
- Secret rolleri birbirine aktarılmadı
Resumption PSK key-schedule input’tur ve plaintext gönderilmez; c-app-new eski record key değildir. Certificate signing key farklı geçmişi korur; gerçek alias’lar secret byte içermez.
- Resumption evidence
- PSK / new share / new traffic roles
- Early / mode gate
- publish-note / early withheld
- Business boundary
- No early send / no commit
- güncel authorization korunmalı
normal verified channel sonrası publish-note yine ordinaryAuthorizationRequired=true koşuluna tabidir. Logout/account/tenant değişikliği connection resumption ile geri alınmaz; application policy güncel state’e dayanır.
- Resumption evidence
- PSK / new share / new traffic roles
- Early / mode gate
- Channel resume ≠ current policy allow
- Business boundary
- No early send / no commit
- Control sonucu gereken scope’ta
Mutating action early aşamada tutulur. CrossConnectionNonReplayGuaranteed=false ve earlyDataForwardSecrecyAssumed=false koşulları korunur; gerçek replay veya business execution çalıştırılmaz.
- Resumption evidence
- PSK / new share / new traffic roles
- Early / mode gate
- Channel resume ≠ current policy allow
- Business boundary
- Early withheld / ordinary policy required
VARSAYIM · SINIR · KONTROL
Hangi secret hangi geçmişi etkiler?
Security review’da tek “private key sızdı” cümlesi yeterli değildir. Certificate signing key, resumption PSK, ticket protection key ve ephemeral key farklı ilişkiler kurar. Selected psk_ke case’inde daha sonra PSK disclosure varsayımı ordinary application secrecy değerlendirmesini değiştirir; fresh X25519 ile combined mode için aynı sonuç doğrudan çıkmaz. Bunun koşulu ephemeral değerlerin düzgün olması, tekrar kullanılmaması ve gereksiz tutulmamasıdır.
Kaynak, endpoint compromise sonrası application memory veya log kopyasını TLS’nin geri alamayacağını da gösterir. Önce korunacak data copy’yi ve zamanı belirle: kayıtlı channel traffic mi, current plaintext mi, yoksa application persistence mı? Bu ayrım olmadan “forward secret” etiketi bir control’ün nerede etkili olduğunu söylemez. Artifact gerçek compromise gerçekleştirmez; secret role ve seçilen mode üzerinden koşullu policy reasoning yapar.
Resumption context’i permission context’i değildir
Ticket’ın seçildiğini görmek browser kullanıcısının hâlâ aynı role sahip olduğunu göstermez. Bir uygulama aynı connection üzerinde çok sayıda resource request alabilir; ticket service context’ine bağlı olsa da resource owner ve güncel policy başka layer’dadır. Logout, tenant değişimi veya account disable sonrasında authorization’ın güncel server-side state’e bakması gerekir.
İnceleme sorusu “ticket’i nasıl bozarım?” değil, “resumed connection üzerindeki normal request hangi güncel authorization evidence’ına dayanıyor?” olmalıdır. PSK acceptance, application identity doğrulaması ve business commit aynı olay değildir. Üçünü ayrı tutmak hem false positive riskini azaltır hem de gerçek eksik control’ün channel negotiation’da mı uygulama policy’sinde mi bulunduğunu görünür yapar.
Encrypted early data için gerekli koşul
0-RTT için integrity valid olmasının yeterli sayılması kırılan varsayımdır: veri kabul edilebilir biçimde korunmuş olabilir ama processing freshness ayrıca değerlendirilir. Distributed serving’de bir zone’un state’i bütün zone’ların ortak acceptance state’i değildir. Retry ve failure recovery de normal application duplication üretebilir; application level idempotency, operation identity ve deduplication policy’nin kapsamı açık olmalıdır.
Bu derste riskin boundary’si selected client policy gate’idir. Mutating operation bekler; erken business effect yoktur. Bu olumlu sonucun server-side replay coordination’ı test ettiğini söyleyemeyiz. İlgili server control gereksinimi ayrıca kayıtlıdır; küçük model yalnız earlyDataSent=false ve businessCommit=false ilişkisini gösterebilir.
3. Blue · Güvenli geliştirme ve savunma
Hareket olmadan bütün senaryoları oku
Fallback evidence
- Eligibility input’ları ayrı kaydedildi
Ticket lifetime 3600, age 900, hash SHA-256 ve service notes.example.org context’i birlikte okunur. Ticket/PSK/binder gerçek değerleri diagnostic log’a kopyalanmaz; burada alias kullanılır.
- Ticket-policy evidence
- Age900 / hash / service context
- Negotiation review
- Negotiation review yok
- Sonuç kanıtı
- Evidence sonucu yok
- Eligibility boundary kontrol edildi
Ticket yaşı 3600 saniyeyken bu verilmiş policy eligible sonucu verir; 3601 saniyede vermez. Yaş 900 saniye olsa bile hash veya service uyuşmazlığı eligibility’yi kapatır. Süre tek koşul değildir.
- Ticket-policy evidence
- Age900 / hash / service context
- Negotiation review
- 3600 true / 3601 false / compatibility needed
- Sonuç kanıtı
- Evidence sonucu yok
- Server acceptance eligibility değildir
Full-fallback örneğinde ticket eligible olsa da server PSK’yı kabul etmez. Client full-handshake parameters da sunduğu için certificate-full seçilebilir. Bu branch full handshake’i tamamladığını iddia etmez.
- Ticket-policy evidence
- Eligible offer / server may decline
- Negotiation review
- 3600 true / 3601 false / compatibility needed
- Sonuç kanıtı
- Evidence sonucu yok
- Negotiated mode kanıtı ayrıca gerekir
normal selectedMode=psk_dhe_ke, psk-only selectedMode=psk_ke’dır. “Certificate yok” gözlemi bunları tek başına ayıramaz; PSK context ve Finished evidence ayrı gereklidir.
- Ticket-policy evidence
- Eligible offer / server may decline
- Negotiation review
- Mode / key share / Finished scope
- Sonuç kanıtı
- Evidence sonucu yok
- Fallback henüz handshake başarısı değil
Full-fallback için handshakeCompletedSelected=false ve businessCommit=false verilmiştir. Client’a certificate flight ulaşmış olsa da peer doğrulaması tamamlanmadı. Early-data gönderimi de yoktur; bu üç sonuç birbirinin yerine kullanılamaz.
- Ticket-policy evidence
- Eligible offer / server may decline
- Negotiation review
- Mode / key share / Finished scope
- Sonuç kanıtı
- Fallback seçildi; handshake tamamlanmadı
- Kararların ayrı üreticileri vardır
Gerçek incelemede client ticket cache ve eligibility policy’si teklifin uygunluğunu, server TLS seçimi PSK kabulünü, endpoint verification ise handshake sonucunu açıklar. Aynı yeni connection’la eşleşen bu kayıtlar application commit kanıtı değildir; commit için application üreticisi gerekir.
- Ticket-policy evidence
- Eligible offer / server may decline
- Negotiation review
- Client uygunluğu / server seçimi ayrı
- Sonuç kanıtı
- Handshake tamamlanmadı; commit yok
Ticket age
- Ticket’ın zaman girdileri seçildi
Ticket identity alias’ı atlas-ticket-1’dir; clientReceiptSeconds=1000, elapsedAgeSeconds=900 ve lifetimeSeconds=3600 verilmiştir. Bu süreler bir client cache örneğidir; TLS ticket byte’ları veya gerçek client clock ölçümü değildir.
- Ticket-policy evidence
- Receipt 1000; age 900; lifetime 3600
- Negotiation review
- Eligibility henüz hesaplanmadı
- Sonuç kanıtı
- Server kabulü gözlenmedi
- 900 saniyelik ticket uygun
İlk eligibility row’da 900 ≤ 3600 ve hashCompatible/serviceCompatible true’dur. Verilmiş policy’nin üç koşulu birlikte sağlandığı için expectedEligible=true çıkar. Bu client-side uygunluk sonucu server’ın PSK kabul ettiğini söylemez.
- Ticket-policy evidence
- Age 900; hash/service uyumlu
- Negotiation review
- Uygunluk true; server kararı ayrı
- Sonuç kanıtı
- Server kabulü gözlenmedi
- Eşitlik ve süre aşımı ayrı
İki ayrı karşılaştırma row’unda yaş 3600 saniyeyken expectedEligible=true, 3601 saniyeyken false’dur. Bu eşitlik kuralı örneğin açık policy’sidir; başka bir TLS implementation’ın ticket kabulünü veya clock tolerance’ını ölçmez.
- Ticket-policy evidence
- Karşılaştırma: age 3600 / 3601
- Negotiation review
- Seçilmiş policy: true / false
- Sonuç kanıtı
- Server kabulü gözlenmedi
- Uyumsuz hash veya service kapıyı kapatır
Son iki row’da age=900 korunur. Biri hashCompatible=false, diğeri serviceCompatible=false olduğu için ikisinde de expectedEligible=false olur. Süre geçmemiş olsa bile bu context’teki ticket uygun değildir; gerçek secret içerikleri gösterilmez.
- Ticket-policy evidence
- Age 900; iki ayrı uyumsuzluk row’u
- Negotiation review
- Hash false veya service false → uygun değil
- Sonuç kanıtı
- Server kabulü gözlenmedi
- Eligibility server acceptance değildir
Full-fallback ayrı bir karşılaştırmadır: ticketEligible=true iken serverAcceptsPsk=false olabilir. Ticket-age row’ları server response üretmez. Bu yüzden eligibility’den seçilmiş PSK mode veya tamamlanmış handshake sonucu çıkarılmaz.
- Ticket-policy evidence
- Ticket policy row’ları incelendi
- Negotiation review
- Client uygunluğu / server seçimi ayrı
- Sonuç kanıtı
- Eligibility biliniyor; acceptance bilinmiyor
- Cache ve endpoint kanıtı ayrı tutulur
Client cache’in receipt zamanı, kullanılan clock ve hash/service policy’si uygunluk kararının üreticileridir. Server’ın aynı connection’a ait seçimi olmadan acceptance bilinmez. Bu alias örneği native cache, binder verification veya application commit çalıştırmaz.
- Ticket-policy evidence
- Receipt/clock/policy producer gerekir
- Negotiation review
- Client uygunluğu / server seçimi ayrı
- Sonuç kanıtı
- Eligibility sınırı biliniyor; runtime ölçülmedi
UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA
Mode ve ticket policy’yi gözlenebilir yap
Configuration review’da negotiated mode, selected group, ticket lifetime policy ve early-data policy ayrı alanlar olmalıdır. “TLS 1.3 açık” bilgisi psk_dhe_ke seçildiğini kanıtlamaz. PSK-only mode’un kabul edilip edilmediği implementation ve service profile kararına bağlıdır; seçilen güven gerekçesini documentation’a yaz. Ticket cache secret material içerdiği için gerçek PSK, ticket veya binder’ı diagnostic log’a dökmek yerine sınırlı kategoriler ve kısa ömürlü correlation kullan. Deployment BCP RFC9325 §3.4 fresh share ile psk_dhe_ke seçimini önerir; ticket protection key lifecycle ve sınırlı ticket validity de aynı güven gerekçesinin parçalarıdır. Bu deployment guidance’ın eski RFC8446 atıfları, current protocol kuralları için burada kullanılan RFC9846’nın yerine geçmez.
Fixture regression’da normal ticket, expired ticket, hash uyuşmazlığı ve server’ın kabul etmediği ticket için beklenen branch’i yaz. Full fallback için client’ın full-handshake parameters sunduğu koşulu da koru. Başarılı resumption’ı sadece “Certificate görülmedi” ile ölçme: negotiated PSK context ve Finished doğrulaması evidence gerekir. Bu dersin deklaratif fixture’si gerçek TLS stack telemetry yerine geçmez.
Early-data profile’i application davranışına bağla
Atlas için initial policy 0-RTT’de mutating action’ları bekletmektir. İlerde read-only bir sınıf açılacaksa yalnız method listesi yetmez: side effect, authorization freshness, retry handling, server topology ve acceptance coordination açıklanmalıdır. Anlamlı default, belirsiz işlemi ordinary verified channel aşamasına bırakmaktır; TLS resumption performance ile early business execution ayrı ayarlar olarak kalır.
Negative evidence, early message’ın wire’a çıkmadığı ve application effect’in oluşmadığıdır. Positive evidence ise uygun ordinary handshake ardından request’in normal policy’ye girmesidir; bu model ikinci kısmı yürütmez. Sonuç alanlarını bu nedenle applicationDelivered, authenticatedPeer ve businessCommit gibi farklı kavramlara böl. Bir waiting branch’inin başarılı purchase veya note publish sonucu üretmesine izin verme.
Current profile ve sınırları koru
RFC9846 aynı TLS 1.3 version’ını koruyarak RFC8446’nın yerini alır. Fresh key_share değerlerinin connection’lar arasında tekrar kullanılmaması current requirement’tır. Artifact’in X25519 seçimi current asymmetric mode’a küçük bir örnektir; KEM negotiation, actual HKDF bytes ve hardware key lifecycle burada hesaplanmaz. PSK binder ve Finished sonuçları açık koşul girdileridir, cryptographic verification yapılmış gibi sunulmaz.
Client cache expiry, clock ve receipt context’ine bağlıdır. Bu fixture’de 900≤3600 seçilen eligibility koşulunu karşılar. Ancak bu karşılaştırma bütün server ticket-age tolerance veya anti-replay window algoritmalarını kapsamaz. Client’ın eligible gördüğü ticket ile server’ın current kabul kararı ayrı observation’lar olarak korunmalıdır.
ŞİMDİ VAKAYA UYGULA
Ticket eligibility ve early execution hangi ayrı policy gate’lerine aittir?
Atlas ticket, notes.example.org için eligible olabilir; server yine de PSK’yı reddedebilir. State değiştiren publish-note işlemi early aşamada bekletilir. Normal channel kurulduktan sonra da güncel application authorization gerekir.
Vakadaki güvenli bağlantının peer’i kimdir? TLS peer trust, browser origin ve kullanıcıya verilen object permission kararlarını ayrı anlat.
Bağlı vaka dosyasını aç ↗ÖRNEĞİ BİRLİKTE OKUYALIM
Atlas · Key exchange ve session resumption
Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.
Ham kaydı ve alan açıklamalarını oku
{
"profile": {
"protocol": "TLS 1.3",
"currentSpecification": "RFC9846",
"previousConnectionVerified": true,
"newConnection": true,
"actualTlsRun": false,
"secretsExported": false
},
"ticket": {
"identityAlias": "atlas-ticket-1",
"pskAlias": "atlas-resumption-psk-1",
"clientReceiptSeconds": 1000,
"lifetimeSeconds": 3600,
"elapsedAgeSeconds": 900,
"kdfHash": "SHA-256",
"originalService": "notes.example.org",
"newService": "notes.example.org",
"originalCertificateValidForNewService": true,
"binderValidSelected": true
},
"roles": [
{
"alias": "c-x25519-new",
"role": "fresh public share; private scalar stays local"
},
{
"alias": "s-x25519-new",
"role": "fresh public share; private scalar stays local"
},
{
"alias": "atlas-resumption-psk-1",
"role": "secret key-schedule input, not sent as plaintext"
},
{
"alias": "c-app-new",
"role": "new client application traffic secret alias, not old record key"
},
{
"alias": "leaf-sign-private",
"role": "certificate-based signature role, not used in selected PSK authentication"
}
],
"eligibilityCases": [
{
"age": 900,
"hashCompatible": true,
"serviceCompatible": true,
"expectedEligible": true
},
{
"age": 3600,
"hashCompatible": true,
"serviceCompatible": true,
"expectedEligible": true
},
{
"age": 3601,
"hashCompatible": true,
"serviceCompatible": true,
"expectedEligible": false
},
{
"age": 900,
"hashCompatible": false,
"serviceCompatible": true,
"expectedEligible": false
},
{
"age": 900,
"hashCompatible": true,
"serviceCompatible": false,
"expectedEligible": false
}
],
"cases": [
{
"case": "normal",
"offeredModes": [
"psk_dhe_ke"
],
"ticketEligible": true,
"serverAcceptsPsk": true,
"selectedMode": "psk_dhe_ke",
"serverKeyShare": true,
"certificateMessages": false,
"ordinaryForwardSecrecyFromFreshAgreement": true,
"handshakeCompletedSelected": true,
"earlyDataSent": false,
"businessCommit": false
},
{
"case": "psk-only",
"offeredModes": [
"psk_ke"
],
"ticketEligible": true,
"serverAcceptsPsk": true,
"selectedMode": "psk_ke",
"serverKeyShare": false,
"certificateMessages": false,
"ordinaryForwardSecrecyFromFreshAgreement": false,
"handshakeCompletedSelected": true,
"earlyDataSent": false,
"businessCommit": false
},
{
"case": "full-fallback",
"offeredModes": [
"psk_dhe_ke"
],
"ticketEligible": true,
"serverAcceptsPsk": false,
"fullParametersOffered": true,
"selectedMode": "certificate-full",
"serverKeyShare": true,
"certificateMessages": true,
"ordinaryForwardSecrecyFromFreshAgreement": true,
"handshakeCompletedSelected": false,
"earlyDataSent": false,
"businessCommit": false
},
{
"case": "early-wait",
"offeredModes": [
"psk_dhe_ke"
],
"ticketEligible": true,
"serverAcceptsPsk": null,
"selectedMode": null,
"serverKeyShare": null,
"certificateMessages": null,
"ordinaryForwardSecrecyFromFreshAgreement": null,
"handshakeCompletedSelected": false,
"earlyDataSent": false,
"businessCommit": false
}
],
"earlyPolicy": {
"operation": "publish-note",
"mutatesState": true,
"allowedBeforeHandshake": false,
"replayExecutionPerformed": false,
"ordinaryAuthorizationRequired": true,
"earlyDataForwardSecrecyAssumed": false,
"crossConnectionNonReplayGuaranteed": false
}
}- ticket
- Identity alias ile secret PSK farklıdır; lifetime ve service context client eligibility koşullarıdır.
- cases
- Selected mode, fresh share, certificate branch ve tamamlanma farklı sonuçlardır.
- earlyPolicy
- Mutating operation kendi local policy gate’inde bekler; early message gönderilmez.
Opaque alias ve selected boolean koşullardan oluşur; gerçek ticket, PSK, binder, HKDF, handshake veya replay execution yoktur. Yaş karşılaştırması client eligibility’nin bounded parçasıdır, bütün TLS validation değildir.
İki yanlış kanı
Resumption eski TLS key’ini aynen kullanır.
Yeni transcript yeni traffic context üretir; PSK geçmiş connection’dan gelen bir input’tur.
Resumption açılınca 0-RTT güvenli ve zorunludur.
0-RTT ayrı choice’tur; cross-connection non-replay ve forward secrecy scope’u daha zayıftır.
SIRA SENDE
Bu hikâyeyi sen çöz.
Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.
PSK-only branch’inde serverKeyShare=false. Fresh key agreement kaynaklı forward secrecy var mı?
- Hayır. Bu PSK-only branch fresh agreement içermez.
- Evet. Her resumption fresh ephemeral agreement yapar.
Gerekçeli cevabı oku
Hayır. Bu PSK-only branch fresh agreement içermez. — ordinaryForwardSecrecyFromFreshAgreement=false. Resumption etiketi tek başına fresh DHE garantisi değildir.
Ticket age lifetime içinde. Yine de full handshake fallback neden mümkün?
Dersten seçilen artifact alanları; öğretim örneği
- ticket.elapsedAgeSeconds
- 900
- ticket.lifetimeSeconds
- 3600
- cases[2].serverAcceptsPsk
- false
- cases[2].selectedMode
- certificate-full
- Uygun ticket server’ın PSK’yi kabul edeceğini garanti etmez.
- Lifetime geçerliyse server PSK’yi kabul etmek zorundadır.
Gerekçeli cevabı oku
Uygun ticket server’ın PSK’yi kabul edeceğini garanti etmez. — serverAcceptsPsk=false branch’i full certificate parametrelerine döner. Bu noktada handshake henüz tamamlanmış değildir.
publish-note neden early data’ya kapalı? Normal phase’te hangi application kontrolü yine gerekir?
Gerekçeli cevabı oku
publish-note state değiştirir. Early-data policy’si tekrar effect riskine karşı bu işlemi normal handshake phase’ine erteler. Handshake sonrasında da application authorization gerekir. PSK identity önceki context’i taşır; user/tenant izni veya business exactly-once sonucu oluşturmaz.
□ Early-data iznini operation effect’ine bağladım.
□ Normal phase için authorization gerekliliğini korudum.
Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç
Kaynaklar ve kapsam
- The Transport Layer Security (TLS) Protocol Version 1.31.2 Relationship to RFC8446 · 2.2 Resumption and PSK; 2.3 0-RTT · 4.3.9 PSK key exchange modes; 4.3.11 Pre-shared key · 4.7.1 New Session Ticket · 7.1 Key Schedule; 7.4.2 ECDH · 8 0-RTT and Anti-Replay; F.5
- Recommendations for Secure Use of TLS and DTLS3.4 TLS Session Resumption: ticket lifetime/key lifecycle; psk_dhe_ke recommendation · 3.10 Zero Round-Trip Time Data: explicit application profile