Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

WEB / WEB-14.S02

Recovery, passkeys ve hassas hesap değişiklikleri

Yeni authenticator bağlamak veya recovery contact’ını değiştirmek gelecekteki account kontrolünü değiştirir. Passkey ceremony ve recovery yetkisinin hangi subject/purpose’e bağlı olduğunu izle.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

Yeni passkey association

  1. Scoped fresh proof başlangıcı

    Existing authenticator ile fresh reauth success supplied; yetki subject-duru/register-new-passkey için.

    Browser / Duru
    Registration options bekleniyor
    Atlas RP / Application
    Fresh reauth; scope ile sınırlı binding yetkisi
    Account / credential ledger
    Mevcut credential association; yeni key yok
  2. Registration challenge kaydı

    RP pending ceremony’yi trusted subject/purpose ile oluşturur; alias random bytes değildir.

    Browser / Duru
    Registration options bekleniyor
    Atlas RP / Application
    Create ceremony bekliyor
    Account / credential ledger
    Registration challenge pending; yeni key yok
  3. Options Browser’a ulaştı

    HTTPS response RP ID, challenge alias ve required UV intent’ini taşır.

    Browser / Duru
    Create options hazır
    Atlas RP / Application
    Registration sonucu bekleniyor
    Account / credential ledger
    Registration challenge pending; yeni key yok
  4. Local authenticator result

    Browser create/authenticator operation supplied result ile temsil edilir; bu adım HTTPS packet değildir.

    Browser / Duru
    Supplied create result hazır
    Atlas RP / Application
    Registration sonucu bekleniyor
    Account / credential ledger
    Registration challenge pending; yeni key yok
  5. Registration result RP’ye ulaştı

    Application transport forwarded result alias; RP henüz association kabul etmedi.

    Browser / Duru
    Binding kararı bekleniyor
    Atlas RP / Application
    Result ulaştı; validation bekliyor
    Account / credential ledger
    Registration challenge pending; yeni key yok
  6. Trusted ceremony validation

    RP, fresh proof ve subject/purpose bağına ek olarak webauthn.create türünü, challenge, allowed origin, RP ID hash ve required UP/UV koşullarını kontrol eder. Algorithm, attestation, credential-ID availability ve crypto sonuçları bu örnekte önceden verilmiştir; association henüz commit edilmez.

    Browser / Duru
    Binding kararı bekleniyor
    Atlas RP / Application
    Validation geçti
    Account / credential ledger
    Challenge kontrol edildi; yeni key commit edilmedi
  7. Association commit veya unchanged

    Bu registration’da tüm kabul koşulları olumlu olduğundan RP challenge’ı tüketip yeni public-key/subject association’ını kaydeder. Notification queue’ya alınmıştır; gönderildiği veya kullanıcıya ulaştığı gösterilmez. Browser hâlâ binding sonucunu bekler.

    Browser / Duru
    Binding kararı bekleniyor
    Atlas RP / Application
    Validation geçti
    Account / credential ledger
    Challenge consumed; yeni credential bağlı; notification queued
  8. Binding sonucu Browser’da

    Browser yeni passkey association’ının kaydedildiği sonucunu aldı. Bu sonuç register-new-passkey/subject-duru kapsamındadır; yeni login ceremony veya başka account üzerinde yetki üretmez. Notification delivery ayrı kanıt ister.

    Browser / Duru
    Passkey eklendi
    Atlas RP / Application
    Validation geçti
    Account / credential ledger
    Challenge consumed; yeni credential bağlı; notification queued

Origin mismatch

  1. Scoped fresh proof başlangıcı

    Existing authenticator ile fresh reauth success supplied; yetki subject-duru/register-new-passkey için.

    Browser / Duru
    Registration options bekleniyor
    Atlas RP / Application
    Fresh reauth; scope ile sınırlı binding yetkisi
    Account / credential ledger
    Mevcut credential association; yeni key yok
  2. Registration challenge kaydı

    RP pending ceremony’yi trusted subject/purpose ile oluşturur; alias random bytes değildir.

    Browser / Duru
    Registration options bekleniyor
    Atlas RP / Application
    Create ceremony bekliyor
    Account / credential ledger
    Registration challenge pending; yeni key yok
  3. Options Browser’a ulaştı

    HTTPS response RP ID, challenge alias ve required UV intent’ini taşır.

    Browser / Duru
    Create options hazır
    Atlas RP / Application
    Registration sonucu bekleniyor
    Account / credential ledger
    Registration challenge pending; yeni key yok
  4. Local authenticator result

    Browser create/authenticator operation supplied result ile temsil edilir; bu adım HTTPS packet değildir.

    Browser / Duru
    Supplied create result hazır
    Atlas RP / Application
    Registration sonucu bekleniyor
    Account / credential ledger
    Registration challenge pending; yeni key yok
  5. Registration result RP’ye ulaştı

    Application transport forwarded result alias; RP henüz association kabul etmedi.

    Browser / Duru
    Binding kararı bekleniyor
    Atlas RP / Application
    Result ulaştı; validation bekliyor
    Account / credential ledger
    Registration challenge pending; yeni key yok
  6. Trusted ceremony validation

    RP, fresh proof ve subject/purpose bağına ek olarak webauthn.create türünü, challenge, allowed origin, RP ID hash ve required UP/UV koşullarını kontrol eder. Algorithm, attestation, credential-ID availability ve crypto sonuçları bu örnekte önceden verilmiştir; association henüz commit edilmez.

    Browser / Duru
    Binding kararı bekleniyor
    Atlas RP / Application
    Validation reddedildi: origin mismatch
    Account / credential ledger
    Challenge kontrol edildi; yeni key commit edilmedi
  7. Association commit veya unchanged

    originMatched=false olduğu için RP yeni credential association’ını kaydetmez: newCredentialBound=false ve challenge rejected kalır. cryptographicResultValid=true bu bağımsız origin koşulunu karşılamaz; mevcut account associations değişmez.

    Browser / Duru
    Binding kararı bekleniyor
    Atlas RP / Application
    Validation reddedildi: origin mismatch
    Account / credential ledger
    Challenge rejected; mevcut associations değişmedi
  8. Binding sonucu Browser’da

    Browser registration reddini aldı; yeni passkey eklenmedi. Mevcut account associations korunmuştur. Bu branch, RP’nin received-result kontrolünü açıklar; gerçek Browser’ın böyle bir inconsistent result ürettiği iddiası değildir.

    Browser / Duru
    Passkey eklenmedi
    Atlas RP / Application
    Validation reddedildi: origin mismatch
    Account / credential ledger
    Challenge rejected; mevcut associations değişmedi

Restricted recovery

  1. Recovery context başlangıcı

    Approved recovery evidence ve assurance sonucu supplied; proof alias ordinary session değildir.

    Browser / Duru
    Recovery proof alias hazır
    Atlas RP / Application
    Recovery request yok
    Account / credential ledger
    Proof unused; generation-a; kayıp key active; eski session active
  2. Recovery proof request ulaştı

    Account/purpose, proof verify ve unused/lifetime koşulları RP’de değerlendirilecek.

    Browser / Duru
    Recovery sonucu bekleniyor
    Atlas RP / Application
    Recovery proof ulaştı
    Account / credential ledger
    Proof unused; generation-a; kayıp key active; eski session active
  3. Restricted recovery gate

    Kabulde proof atomik consume edilir; used proof hiçbir yeni mutation yetkisi üretmez.

    Browser / Duru
    Recovery sonucu bekleniyor
    Atlas RP / Application
    Sınırlı reset yetkisi verildi
    Account / credential ledger
    Proof consumed; sınırlı capability
  4. Reset ve affected invalidation

    Local commit new verifier generation, known-lost association invalidation ve old session generation revocation; notification yalnız queue.

    Browser / Duru
    Recovery sonucu bekleniyor
    Atlas RP / Application
    Sınırlı reset tamamlandı; normal session yok
    Account / credential ledger
    Proof consumed; generation-b; kayıp key invalidated; eski session revoked
  5. Recovery sonucu Browser’da

    Browser restricted reset’in tamamlandığı sonucunu aldı. Yeni verifier generation kaydedilmiş, bilinen kayıp association geçersiz kılınmış ve eski session generation revoked olmuştur; ordinarySessionIssued=false kalır. Normal login ve notification delivery ayrı işlemlerdir.

    Browser / Duru
    Reset tamamlandı; normal login gerekli
    Atlas RP / Application
    Normal session verilmedi
    Account / credential ledger
    Proof consumed; generation-b; kayıp key invalidated; eski session revoked

Proof consumed

  1. Recovery context başlangıcı

    Approved recovery evidence ve assurance sonucu supplied; proof alias ordinary session değildir.

    Browser / Duru
    Recovery proof alias hazır
    Atlas RP / Application
    Recovery request yok
    Account / credential ledger
    Proof consumed; generation-b; kayıp key invalidated; eski session revoked
  2. Recovery proof request ulaştı

    Account/purpose, proof verify ve unused/lifetime koşulları RP’de değerlendirilecek.

    Browser / Duru
    Recovery sonucu bekleniyor
    Atlas RP / Application
    Recovery proof ulaştı
    Account / credential ledger
    Proof consumed; generation-b; kayıp key invalidated; eski session revoked
  3. Kullanılmış proof reddi

    Proof daha önce tüketilmiştir. Recovery gate yeni reset yetkisi vermez; credential ve session generation’ları değişmez.

    Browser / Duru
    Recovery sonucu bekleniyor
    Atlas RP / Application
    Red: proof önceden tüketilmiş
    Account / credential ledger
    Proof consumed; generation-b; kayıp key invalidated; eski session revoked
  4. Recovery sonucu Browser’da

    Browser recovery reddini aldı. Yeni reset, normal session veya notification delivery oluşmadı; mevcut kayıtlar aynı kaldı.

    Browser / Duru
    Recovery tamamlanmadı
    Atlas RP / Application
    Normal session verilmedi
    Account / credential ledger
    Proof consumed; generation-b; kayıp key invalidated; eski session revoked

ROLLER · STATE · VERİ AKIŞI

Future account control hassas bir permission’dır

Duru yeni laptop’a passkey eklemek ister. Bu action sıradan bir profil metni düzenlemez: yeni private key’i kontrol eden authenticator gelecekte subject-duru için authentication yapabilecektir. Atlas Browser’daki active session’ı tek başına association yetkisi saymaz; fresh reauthentication ve trusted account binding ister.

Fixture normal branch’te existing authenticator ile yapılan fresh reauthentication’ın başarıyla tamamlandığını başlangıç girdisi olarak alır. O ceremony ayrıca çizilmez. Authorization kapsamı register-new-passkey ve subject-duru ile sınırlıdır; başka account veya recovery contact değişimi aynı boolean’dan izin çıkarmaz.

Password change için current credentials/fresh proof, contact değişimi için eski trusted context ve yeni endpoint doğrulaması ayrı düşünülür. Active session süreklilik sağlar; sensitive change’e sonsuz ve sınırsız yetki sağlamaz. Account lifecycle temeli WEB-14.S01’dedir.

Passkey: server’da password yerine public-key association

Passkey bir website/application account’una bağlı FIDO credential’dır. WebAuthn’de RP server credential ID, subject/user handle ve public key ilişkisinin trusted kaydını tutar. Authenticator private-key operasyonunu yapar; server private key veya device unlock PIN’i istemez.

Platform ve roaming authenticator farklı erişim biçimleridir. Passkey device-bound veya syncable olabilir; bütün private key’lerin hiçbir koşulda tek device dışına çıkmadığını genelleme. Sync fabric, provider account recovery ve device lock modeli kendi güven sınırlarını getirir.

Biometric veya PIN device üzerindeki user verification için kullanılır; biometric template’in Atlas’a gönderildiği sonucu çıkarılmaz. User presence ve user verification farklı flag’lerdir. Ürün UV required istiyorsa trusted validation sonucu UV koşulunu kontrol etmelidir; UI’da yüz resmi görünmesi bu sonucu kanıtlamaz.

Registration ile authentication ceremony’leri ayrı

navigator.credentials.create() yeni credential üretimi/registration için, navigator.credentials.get() mevcut credential ile authentication assertion için kullanılır. RP server ceremony options/challenge sağlar; Browser authenticator API’si ile çalışır ve çıkan response’u application transport’u üzerinden RP’ye iletir.

Normal scene register-new-passkey’yi anlatır. Browser içindeki create result adımı supplied authenticator result’tır; key generation, CBOR/COSE parse veya cryptographic attestation uygulanmaz. Application tarafındaki validation kapısı trusted established WebAuthn implementation’ın sonucunu temsil eder. Gerekli algoritma, attestation policy, existing credential-ID uniqueness ve account binding kontrolleri normal fixture’da supplied true’dur.

Authentication get ceremony’sinde RP, stored credential public key ile assertion signature’ı ve credential/account binding’i kontrol eder. signCount azalması veya sabit zero bütün cihazlarda kesin compromise kanıtı değildir; authenticator türü, sync ve response ordering risk değerlendirmesine girer. Authentication assertion’dan yeni credential registration authority’si otomatik doğmaz.

Challenge, RP ID ve origin farklı bağlardır

Atlas fixture RP ID=library.atlas.example ve expected origin=https://library.atlas.example seçer. RP ID bir domain scope’udur; origin scheme/host/port bağlamıdır. Birbirinin yerine string comparison yapılmaz. Daha geniş RP ID scope seçimi subdomain trust yüzeyini değiştirir; credential cookie Domain/Path kurallarıyla scope edilmez.

Registration clientData type=webauthn.create, beklenen challenge ve allowed origin ile eşleşmelidir; authenticator data RP ID hash ve required flags yönünden değerlendirilir. Authentication type=webauthn.get ile ayrı ceremony’dir. Fixture type/challenge/origin/rpIdHash/UV/signature-or-attestation sonuçlarını boolean olarak verir; alias challenge gerçek random byte değildir.

Wrong-origin branch’te cryptographicResultValid=true verilse bile originMatched=false olduğu için RP association yapmaz. Bu, gerçek Browser’ın söz konusu inconsistent result’u üretmiş olduğu iddiası değildir; RP’nin received-input kabul sınırını açıklayan synthetic branch’tir. Fresh challenge’ın ceremony/account/purpose ile tutulması tamamlanmış sonucu yanlış subject’e bağlamayı engelleyen state ilişkisidir.

Recovery bir login success kısayolu değildir

Duru eski authenticator’ını kaybettiğinde recovery ihtiyacı doğabilir. Forgot-password, existing authenticator ile password replacement ve bütün gerekli authenticator’ların kaybından sonra account recovery aynı durum değildir. Kullanılabilir proof, account assurance ve ürün risk analysis’i seçilen recovery yolunu belirler.

Fixture’ın recovery branch’i approvedRecoveryEvidence=true ve assuranceRequirementMet=true sonuçlarını supplied başlangıç kararı olarak kullanır. RECOVERY_SECRET_ALIAS yalnız inert token referansıdır; tek code’un her AAL veya üründe yeterli olduğunu söylemez. Proof account/purpose=lifecycle-recovery için bound, valid, unused ve live ise atomik tüketilir.

Başarı restricted reset capability verir; doğrudan yeni authenticated user session vermez. Atlas örneği yeni password verifier generation’a geçer, bilinen lost credential association’ını invalidate eder, eski session generation’ını revoked işaretler ve independent notification’ı queue eder. Delivery veya bütün resource server’larda aynı anda revoke sonucu çizilmez; sonrasında normal login gerekir.

Reset, factor replacement ve notification’ın sınırı

Password reset token’ı securely generated, purpose-bound, single-use ve uygun lifetime’la saklanır; reset request’inin kendisi account state’ini değiştirip kullanıcıyı kilitlememelidir. Normal login’den ayrı restricted state ile password update tamamlanır. Kullanılmış recovery proof’u tekrar supplied input yapılınca unused=false gate’i mutation’ı durdurur.

Suspected account compromise sonrası yalnız password reset yetmeyebilir: active session, yeni eklenmiş authenticator veya değiştirilmiş recovery address kalabilir. Recovery review daha önce trusted evidence’i, mevcut associations’ı ve pending changes’i değerlendirir. Recently-added contact’ı otomatik en güçlü proof sayma; eski contact’ı da neden kaldırıldığını bilmeden geri yükleme.

Notification yetki veren proof değildir; kullanıcıya bir change’i fark ettirir ve itiraz yolu sağlar. Fixture notificationQueued=true bunu gönderilmiş/okunmuş saymaz. Email veya factor değişiminden sonra rollback/repudiation ve session effects açıkça tanımlanmalıdır.

2. Red · Güven ve etki

Hareket olmadan bütün senaryoları oku

Origin farklı

  1. Passkey association kapsamı seçildi

    Purpose register-new-passkey ve type webauthn.create olarak verilmiştir. RP ID library.atlas.example ile expected origin https://library.atlas.example farklı kontrol alanlarıdır.

    Ceremony/recovery context
    wrong-origin registration
    Account lifecycle gate
    Gate değerlendirilmedi
    Association/session boundary
    Credential bağlanmadı
  2. Fresh proof ve subject ayrıldı

    freshReauth=true ve subjectBound=true verilmiştir. Bu olumlu koşullar, ceremony origin kontrolünün yerini almaz; browser displayName authority değildir.

    Ceremony/recovery context
    Fresh proof; subject bound
    Account lifecycle gate
    Origin kontrolü bekliyor
    Association/session boundary
    Credential bağlanmadı
  3. Crypto ve origin ayrıldı

    cryptographicResultValid=true fakat originMatched=false’tur. rpIdHashMatched, challenge ve type true olsa da failed origin association gate’i korunur.

    Ceremony/recovery context
    Crypto predicate=true
    Account lifecycle gate
    Origin matched=false
    Association/session boundary
    Credential bağlanmadı
  4. Association commit reddedildi

    newCredentialBound=false ve afterChallengeState=rejected kalır. Doğru crypto flag’i, yanlış ceremony context’ine yeni credential ekleme yetkisi vermez.

    Ceremony/recovery context
    Crypto predicate=true
    Account lifecycle gate
    Challenge rejected
    Association/session boundary
    New credential bound=false
  5. Hassas değişiklik yetkisi genişlemedi

    Factor binding fresh proof ile account-bound ceremony validation’ı birlikte ister. Recovery veya password change capability’si bu registration’ın origin kapısını otomatik açmaz.

    Ceremony/recovery context
    Purpose: register-new-passkey
    Account lifecycle gate
    Origin gate başarısız
    Association/session boundary
    Association mutation yok
  6. Association sınırı kapalı kaldı

    Bu fixture wrong-origin denial’ı gösterir; gerçek browser ceremony, CBOR/COSE veya signature işlemi çalıştırıldığı sonucu eklenmez. Declared crypto predicate ile association kararı farklı evidence’tır.

    Ceremony/recovery context
    Declared crypto valid
    Account lifecycle gate
    Known: origin mismatch
    Association/session boundary
    No new credential association

Proof kullanılmış

  1. Recovery capability sınırı seçildi

    recovery-used satırı lifecycle-recovery purpose’ına aittir. Önceki başarılı attempt credential-generation-b oluşturmuş ve eski affected state’i kapatmıştır; bu geçmiş işlem rollback edilmez.

    Ceremony/recovery context
    Recovery-used row
    Account lifecycle gate
    Consumption incelenmedi
    Association/session boundary
    Yeni reset yok
  2. Proof doğruluğu ile kullanılabilirlik ayrıldı

    proofMatches=true ve lifetimeValid=true olsa da unused=false’tur. Doğru proof’un tekrar sunulması one-time consumption koşulunu yeniden açmaz.

    Ceremony/recovery context
    Proof matches; unused=false
    Account lifecycle gate
    Already consumed
    Association/session boundary
    Yeni reset yok
  3. Yeni reset durduruldu

    resetCompleted=false kalır. credentialGenerationAfter=credential-generation-b ve lostCredentialStateAfter=invalidated önceki committed sonuçları korur; tekrar attempt yeni mutation yapmaz.

    Ceremony/recovery context
    Used proof rejected
    Account lifecycle gate
    Generation b korunuyor
    Association/session boundary
    No new credential reset
  4. Session ve notification ayrıldı

    ordinarySessionIssued=false ve notificationQueued=false bu yeni attempt için geçerlidir. Daha önce queue’ya alınan mesajlar silinmiş sayılmaz.

    Ceremony/recovery context
    Used proof rejected
    Account lifecycle gate
    Old session revoked korunur
    Association/session boundary
    No additional notification
  5. Recovery normal access’e yükselmedi

    Limited recovery purpose, unrestricted session veya yeni action grant’i oluşturmaz. Eski session’ın revoked olması browser cleanup veya bütün access-token revocation kanıtı değildir.

    Ceremony/recovery context
    Purpose: lifecycle-recovery
    Account lifecycle gate
    Generation b korunuyor
    Association/session boundary
    Ordinary session yok
  6. Geçmiş etki korunarak ret verildi

    Bu branch yeni reset ve ek notification üretmez. Önceki successful reset’i geri almaz; notification delivery ve downstream acceptance ayrı evidence bekler.

    Ceremony/recovery context
    Known: proof consumed
    Account lifecycle gate
    Prior committed state retained
    Association/session boundary
    No new reset/session/notification

VARSAYIM · SINIR · KONTROL

Doğru crypto, yanlış association’ı doğru yapmaz

Registration’ın normal yararı yeni authenticator public key’ini authorized subject’e bağlamaktır. Fresh reauth/account binding veya ceremony origin kapısı atlanırsa key kaydı yanlış subject/purpose’e eklenebilir. Prerequisite received result’un trusted association gate’ine kontrolsüz girmesidir; etki bu credential ile gelecekte kurulan account context’iyle sınırlıdır.

Blocking control challenge/ceremony context’ini trusted subject, RP ID, origin, required UV ve approved validation policy ile birlikte kontrol edip sonra association commit etmektir. Browser’dan verilen displayName authority değildir. Artifact wrong-origin sonucunda newCredentialBound=false tutar; crypto valid flag’i policy’yi tek başına aşmaz.

Recovery yetkisi normal access’e sessiz yükselmesin

Normal recovery, belirlenen proof sonrası kontrollü credential replacement sağlar. Recovery capability’yi unrestricted session’a çevirmek veya aynı proof’u tekrar kullanılabilir bırakmak daha geniş erişim/yeni değişiklik yetkisi doğurabilir. Tek response’un başarılı görünmesi bütün lost-key/session state’lerinin kapandığını kanıtlamaz.

Limited purpose, one-time consumption, new credential generation ve affected association/session invalidation ayrı kontrollerdir. Legitimate users da kayıp device, bozuk sync veya stale notification yaşayabilir; failure reason saldırı etiketi değildir. Kurtarma yolunun güveni primary authentication’dan bağımsız review edilir.

3. Blue · Güvenli geliştirme ve savunma

Hareket olmadan bütün senaryoları oku

Recovery ledger

  1. Recovery başarı kapsamı seçildi

    Normal recovery satırı dört ayrı state sonucu taşır: proof consumption, credential generation, affected old state ve notification queue. Tek successful etiket bunların hepsini delivery saydırmaz.

    Lifecycle observation
    case=recovery
    Association/queue review
    State eşleştirilmedi
    Evidence hükmü
    Delivery kanıtı yok
  2. Consumption ve generation eşleştirildi

    afterProofState=consumed ve credentialGenerationAfter=credential-generation-b kayıtlıdır. Bu sonuçlar restricted reset’in state değişimidir; ordinarySessionIssued=false ayrıca korunur.

    Lifecycle observation
    Proof consumed
    Association/queue review
    Generation b; no ordinary session
    Evidence hükmü
    Delivery kanıtı yok
  3. Affected old state okundu

    lostCredentialStateAfter=invalidated ve oldSessionStateAfter=revoked verilmiştir. Bu alanlar hangi eski state’in kapandığını açıklar; bütün resource-server token’larını kapsadığı varsayılmaz.

    Lifecycle observation
    Proof consumed
    Association/queue review
    Lost credential invalidated; old session revoked
    Evidence hükmü
    Downstream token state bilinmiyor
  4. Queue ile delivery ayrıldı

    notificationQueued=true yalnız bu attempt’in bağımsız notification’ı queue’ya aldığını gösterir. Mesajın gönderildiği, inbox’a vardığı veya kullanıcının okuduğu sonucu verilmez.

    Lifecycle observation
    Restricted reset completed
    Association/queue review
    Notification queued=true
    Evidence hükmü
    UNKNOWN: notification delivery
  5. Missing delivery kanıtı istendi

    Delivery telemetry yoksa queue success’i delivery success olarak gösterilmez. Aynı correlation ile producer ve notification sonucu ayrıca ilişkilendirilmelidir; secret veya yeni password log’a gerekmez.

    Lifecycle observation
    Restricted reset completed
    Association/queue review
    Queue kanıtı var
    Evidence hükmü
    Delivery observation gerekir
  6. Recovery hükmü kendi scope’unda kaldı

    Proof consumed, generation değişimi ve affected invalidation bilinir. Notification delivery ve diğer downstream acceptance UNKNOWN’dur; recovery’nin ordinary session vermediği açık kalır.

    Lifecycle observation
    Known: reset completed
    Association/queue review
    Known: scoped invalidation
    Evidence hükmü
    UNKNOWN: delivery/downstream

Origin kanıtı yok

  1. Association audit kapsamı seçildi

    Bu branch normal association kaydının newCredentialBound ve freshReauth alanlarını inceler, fakat originMatched alanını kapsam dışında tutar. Eksik origin evidence başarı ile doldurulmaz.

    Lifecycle observation
    Partial binding record
    Association/queue review
    Origin kanıtı eksik
    Evidence hükmü
    Integrity hükmü yok
  2. Association sonucu okundu

    newCredentialBound=true ve freshReauth=true görülür. Bu iki alan ceremony origin veya rpIdHash validation’ın sunulan kayıtla doğrulanmış olduğunu göstermez.

    Lifecycle observation
    New credential bound=true
    Association/queue review
    Fresh reauth=true
    Evidence hükmü
    Integrity hükmü yok
  3. Selector’ın alan gereksinimi ayrıldı

    XPath false origin veya false freshReauth ile completed binding tutarsızlığı arar. Missing origin, originMatched=true ile aynı değildir; predicate kapsamı eksiktir.

    Lifecycle observation
    Completed binding claim
    Association/queue review
    Missing origin ≠ true
    Evidence hükmü
    UNKNOWN: origin validation
  4. Zero count temiz kanıt sayılmadı

    Eksik alanlar nedeniyle selection boş kalabilir; bu origin gate’in uygulandığını kanıtlamaz. Ayrı positive fixture, originMatched=false ile newCredentialBound=true tutarsızlığını gösterir.

    Lifecycle observation
    Completed binding claim
    Association/queue review
    Selection coverage incomplete
    Evidence hükmü
    UNKNOWN: association integrity
  5. Trusted source kaydı istendi

    Aynı ceremony ve subject scope’undaki origin kararına ihtiyaç vardır. Browser displayName veya credential alias’ı bu eksik kararı tamamlayan authentication proof değildir.

    Lifecycle observation
    Completed binding claim
    Association/queue review
    Origin decision gerekir
    Evidence hükmü
    UNKNOWN: association integrity
  6. Eksik kanıt ret veya bypass sayılmadı

    Bu kısmi kayıtla association güvenli veya yanlış kuruldu diye kesin hüküm verilmez. Event kaybı ve schema mapping kendi kanıtıyla incelenir; gerçek WebAuthn crypto sonucu eklenmez.

    Lifecycle observation
    Known: partial binding claim
    Association/queue review
    Missing origin evidence
    Evidence hükmü
    UNKNOWN: gate enforcement

UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA

Association ledger neyi gösterebilir?

RP’nin sanitized decision kaydı ceremonyRef, subjectRef, originMatched, rpIdHashMatched, challengeMatched, freshReauth ve newCredentialBound sonuçlarını ilişkilendirebilir. Public-key/credential correlation ref secret gibi authentication sağlamaz ama privacy ve retention yönünden yine korunur; private key, recovery secret ve biometric veri loga verilmez.

Artifact XPath newCredentialBound=true iken originMatched=false veya freshReauth=false olan integrity discrepancy’yi seçer. Normal binding sıfır, origin gate’i yok sayan pozitif synthetic audit tek satır verir. Source event eksikse yeterli kanıt yoktur; multi-host ordering veya real cryptographic verification bu seçimle yapılmaz.

Recovery success için dört ayrı sonucu izle

Proof consumed, replacement credential generation, old affected association/session invalidation ve independent notification ayrı state değişiklikleridir. Notification queue kaydı delivery kanıtı değildir; Browser’ın yeni password input’u accepted mesajı da eski resource server access token’ının anında bittiğini göstermez.

Own fixture normal recovery’de restricted reset completed / ordinarySessionIssued=false sonucunu korur. Used-proof branch’te record ve generation değişmez. Valid-proof ama delivery retry gibi normal koşullar incident kararıyla karıştırılmaz; authorization ledger ve notification delivery telemetry ayrı gözlemlenir.

Browser ceremony ile account policy birlikte doğrulanır

Established WebAuthn library ile supported Browser/device matrix’inde RP ID, allowed origins, userVerification, platform/roaming ve sync davranışını test et. API’nin available olması bütün credential’ların aynı assurance veya recovery özelliğine sahip olduğunu göstermez. Origin allowlist veya reverse-proxy external origin değişimleri kontrollü review gerektirir.

Sensitive-change path fresh proof’un hangi action ve süre için kabul edildiğini gösterir. Lost device’i invalidate etme, replacement factor enrollment ve repudiation yolu kullanıcıya anlaşılır sunulur. Credentials’ı topluca silmek yerine affected state ve ürün riskini belirleyerek kontrollü migration yapılır.

ŞİMDİ VAKAYA UYGULA

Crypto sonucu, recovery state ve notification nasıl ayrılır?

Origin association gate’i ve one-time recovery purpose’u farklı boundaries kurar. Ledger state’i notification delivery veya bütün downstream acceptance yerine kullanılmaz.

Vakadaki doğrulanmış actor, tenant ilişkisi ve requested action için gereken kararları ayır. Authentication veya proof başarısını object permission yerine kullanma.

Bağlı vaka dosyasını aç ↗

ÖRNEĞİ BİRLİKTE OKUYALIM

Recovery ve passkey association ledger

Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.

Ham kaydı ve alan açıklamalarını oku
{
  "subjectRef": "subject-duru",
  "rpId": "library.atlas.example",
  "expectedOrigin": "https://library.atlas.example",
  "credentialAlias": "CREDENTIAL_NEW_ALIAS_NOT_BYTES",
  "userHandleAlias": "USER_HANDLE_ALIAS_NOT_BYTES",
  "publicKeyAlias": "PUBLIC_KEY_ALIAS_NOT_COSE",
  "registrationChallenge": "REGISTRATION_CHALLENGE_ALIAS_NOT_RANDOM_BYTES",
  "registrationType": "webauthn.create",
  "authenticationType": "webauthn.get",
  "purpose": "register-new-passkey",
  "registrationRows": [
    {
      "case": "normal",
      "freshReauth": true,
      "subjectBound": true,
      "purposeMatched": true,
      "typeMatched": true,
      "challengeMatched": true,
      "originMatched": true,
      "rpIdHashMatched": true,
      "userVerified": true,
      "cryptographicResultValid": true,
      "algorithmAllowed": true,
      "attestationPolicyAllowed": true,
      "credentialIdAvailable": true,
      "challengeUnused": true,
      "newCredentialBound": true,
      "afterChallengeState": "consumed",
      "userPresent": true
    },
    {
      "case": "wrong-origin",
      "freshReauth": true,
      "subjectBound": true,
      "purposeMatched": true,
      "typeMatched": true,
      "challengeMatched": true,
      "originMatched": false,
      "rpIdHashMatched": true,
      "userVerified": true,
      "cryptographicResultValid": true,
      "algorithmAllowed": true,
      "attestationPolicyAllowed": true,
      "credentialIdAvailable": true,
      "challengeUnused": true,
      "newCredentialBound": false,
      "afterChallengeState": "rejected",
      "userPresent": true
    }
  ],
  "authenticationValidationNotes": {
    "requiredChecks": [
      "credential/account binding",
      "type",
      "challenge",
      "allowed origin",
      "rpIdHash",
      "required UP/UV",
      "stored-key signature verification"
    ],
    "signCountZeroIsNotUniversalCompromiseProof": true
  },
  "recoveryAlias": "RECOVERY_SECRET_ALIAS_NOT_A_SECRET",
  "recoveryVerifierAlias": "RECOVERY_VERIFIER_ALIAS_NOT_A_HASH",
  "recoveryPurpose": "lifecycle-recovery",
  "replacementVerifierAlias": "NEW_PASSWORD_VERIFIER_ALIAS_NOT_A_HASH",
  "recoveryRows": [
    {
      "case": "recovery",
      "approvedRecoveryEvidence": true,
      "assuranceRequirementMet": true,
      "subjectBound": true,
      "purposeMatched": true,
      "proofMatches": true,
      "unused": true,
      "lifetimeValid": true,
      "resetCompleted": true,
      "afterProofState": "consumed",
      "credentialGenerationAfter": "credential-generation-b",
      "lostCredentialStateAfter": "invalidated",
      "oldSessionStateAfter": "revoked",
      "notificationQueued": true,
      "ordinarySessionIssued": false,
      "notificationMeaning": "A new independent notification is queued for this attempt; delivery is not asserted."
    },
    {
      "case": "recovery-used",
      "approvedRecoveryEvidence": true,
      "assuranceRequirementMet": true,
      "subjectBound": true,
      "purposeMatched": true,
      "proofMatches": true,
      "unused": false,
      "lifetimeValid": true,
      "resetCompleted": false,
      "afterProofState": "consumed",
      "credentialGenerationAfter": "credential-generation-b",
      "lostCredentialStateAfter": "invalidated",
      "oldSessionStateAfter": "revoked",
      "notificationQueued": false,
      "ordinarySessionIssued": false,
      "notificationMeaning": "No additional notification queued by this rejected attempt; prior queued messages are not cleared."
    }
  ],
  "sensitiveChanges": {
    "passwordChange": "fresh current authenticator proof plus scoped permission",
    "contactChange": "fresh proof, new contact verification and independent notification",
    "factorBinding": "fresh proof plus account-bound ceremony validation"
  },
  "selector": {
    "language": "XPath",
    "xml": "<audit><binding newCredentialBound=\"true\" originMatched=\"true\" freshReauth=\"true\"/></audit>",
    "xpath": "count(/audit/binding[@newCredentialBound=\"true\" and (@originMatched=\"false\" or @freshReauth=\"false\")])",
    "expected": 0,
    "positiveFixtureXml": "<audit><binding newCredentialBound=\"true\" originMatched=\"false\" freshReauth=\"true\"/></audit>",
    "positiveExpected": 1,
    "scope": "Own association-integrity XML; no CBOR/COSE, Browser ceremony, crypto, recovery provider or delivery runtime.",
    "missingFieldBehavior": "Selection requires declared fields. Missing fields mean insufficient evidence; a zero count does not prove control efficacy."
  }
}
rpId / expectedOrigin
Domain credential scope ile scheme/host/port origin farklıdır; cookie scope değildir.
credentialAlias / userHandleAlias / publicKeyAlias
Account-key association’ı izleyen alias’lar; gerçek credential bytes veya usable key değil.
registrationRows
Fresh proof ve ceremony acceptance kapıları sonucu; crypto sonuçları supplied predicate’tir.
recoveryRows
Approved evidence/assurance supplied; restricted reset, proof consume ve affected invalidation ayrı.
notificationQueued / ordinarySessionIssued
Queue=true delivery değildir; recovery başarı normal login session’ı otomatik açmaz.

Aliases actual secret/key/challenge değildir. Fresh existing-factor reauth, approved recovery evidence ve crypto/attestation/required-flag sonuçları declared input’tur. Browser create/get, signature, provider recovery, mail delivery veya distributed revocation çalıştırılmaz.

İki yanlış kanı

Passkey login’de biometric template ve private key server’a gönderilir.

Authenticator key operasyonunu yapar; RP public-key association ve valid result’u değerlendirir. Local biometric verification raw biometric aktarımı anlamına gelmez.

Password reset başarıyla bitince bütün authenticator ve session’lar kendiliğinden iptal olur.

Affected credentials, session/token revocation ve notifications ayrı lifecycle işlemleridir; propagation ve ordinary login ayrıca değerlendirilir.

SIRA SENDE

Bu hikâyeyi sen çöz.

Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.

Passkey registration’da cryptographicResultValid=true, fakat originMatched=false. Yeni credential account’a bağlanır mı?

  1. Evet. Crypto sonucu true ise ceremony context’i önemsizdir.
  2. Hayır. newCredentialBound=false; challenge rejected.
Gerekçeli cevabı oku

Hayır. newCredentialBound=false; challenge rejected. — Bu registration policy’si origin, challenge, type, subject ve diğer koşulları birlikte ister. Tek geçerli crypto sonucu yanlış origin’i kabul ettirmez.

Recovery proof’u zaten consumed. notificationQueued=false, daha önce kuyruğa eklenen bildirimin silindiği anlamına mı gelir?

Dersten seçilen artifact alanları; öğretim örneği

recoveryRows[1].unused
false
recoveryRows[1].resetCompleted
false
recoveryRows[1].notificationQueued
false
recoveryRows[1].notificationMeaning
No additional notification queued by this rejected attempt; prior queued messages are not cleared.
  1. Hayır. Reddedilen attempt yeni bildirim eklemez; önceki kuyruk temizlenmez.
  2. Evet. Reddedilen proof bütün önceki recovery effect’lerini geri alır.
Gerekçeli cevabı oku

Hayır. Reddedilen attempt yeni bildirim eklemez; önceki kuyruk temizlenmez. — unused=false reset’i reddeder. notificationMeaning yalnız bu attempt için ek bildirim olmadığını açıklar; eski kayıtların silindiğini söylemez.

Recovery yeni generation kurup eski session’ı revoke ediyor, fakat ordinarySessionIssued=false. Recovery neden normal login ve notification delivery ile aynı işlem değildir?

Gerekçeli cevabı oku

Recovery, account’a bağlı ve gerekli assurance koşulunu sağlayan ayrı lifecycle proof’u ister. Bu örnekte password verifier değişir, kayıp credential geçersiz olur ve eski session revoke edilir; yeni normal session üretilmez. Notification queued olmak delivery kanıtı değildir. Yeni factor binding veya contact değişikliği de kendi fresh proof ve ceremony koşullarını ister. Alias’lar gerçek recovery secret, COSE key veya çalıştırılmış browser ceremony değildir.

□ Recovery purpose’unu normal session issuance ile eşitlemedim.

□ Notification queued sonucunu delivery veya eski effect’lerin geri alınması saymadım.

Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç

Kaynaklar ve kapsam