Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

WEB / WEB-14.S01

Account lifecycle ve password verification

Account kaydı, verified contact, password verifier ve session farklı state’tir. Registration’dan disable/closure’a kadar hangi kontrolün hangi state’i değiştirdiğini izle.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

Registration

  1. Registration talebi

    Contact ve password yalnız alias; kayıt henüz yok.

    Browser / Duru
    Registration alias hazır
    Application
    Request yok
    Account / verifier records
    Account yok
  2. Registration input ulaştı

    Input policy supplied; trusted identifier uniqueness kontrolü yapılır.

    Browser / Duru
    Registration receipt bekleniyor
    Application
    Registration iddiası ulaştı
    Account / verifier records
    Account yok
  3. Pending account ve verifier

    Local creation: contact pending; verifier alias kayıtlı, session yok.

    Browser / Duru
    Registration receipt bekleniyor
    Application
    Pending account oluşturuldu
    Account / verifier records
    subject-duru: pending-contact; güncel verifier alias
  4. Generic receipt Browser’da

    Browser registration receipt’i aldı; account hâlâ pending-contact’tır. Bu örnek, mail ve token delivery aşamalarını göstermeden verification alias’ının Browser’da hazır olduğunu varsayar. Browser şimdi verify-contact request’ini hazırlayabilir; session henüz verilmedi.

    Browser / Duru
    Verification alias hazır; session yok
    Application
    Contact verification bekliyor
    Account / verifier records
    subject-duru: pending-contact; güncel verifier alias
  5. Verification talebi ulaştı

    Browser’da hazırlanan verification alias’ı Application’a ulaştı. Application, bu proof’un subject-duru ve purpose=verify-contact bağına, kullanılmamış olmasına ve lifetime koşuluna bakacaktır; arrival tek başına account’ı active yapmaz.

    Browser / Duru
    Verification sonucu bekleniyor
    Application
    Verification alias ulaştı
    Account / verifier records
    subject-duru: pending-contact; token unused
  6. Contact bind commit

    Supplied match/subject/purpose/lifetime/unused true; token consume ve active transition local commit.

    Browser / Duru
    Verification sonucu bekleniyor
    Application
    Contact doğrulandı; session verilmedi
    Account / verifier records
    subject-duru: active; token consumed
  7. Active account sonucu ulaştı

    Verification account state’ini açar; normal login ayrı kalır.

    Browser / Duru
    Contact doğrulandı; normal login yapılabilir
    Application
    Verification tamamlandı
    Account / verifier records
    subject-duru: active; token consumed

Active verify ve rehash

  1. Account ve credential başlangıcı

    Account status ile old verifier metadata ayrı; credential candidate yalnız alias.

    Browser / Duru
    Login candidate alias hazır
    Application
    Request yok
    Account / verifier records
    active; eski verifier alias
  2. Login talebi ulaştı

    Trusted account ve throttle state local olarak değerlendirilecek.

    Browser / Duru
    Login sonucu bekleniyor
    Application
    Candidate ulaştı; context yok
    Account / verifier records
    active; eski verifier alias
  3. Throttle ve verifier kapısı

    attemptAllowed=true olduğundan verifier çağrısı bu örnekte yapılmış kabul edilir; passwordMatches=true’dur. accountStatus=active ayrıca kontrol edilir. Account uygun olsa da rehash commit henüz yapılmamıştır.

    Browser / Duru
    Login sonucu bekleniyor
    Application
    Context için uygun; upgrade bekliyor
    Account / verifier records
    active; eski verifier alias
  4. Conditional verifier update

    Normal active branch generation hâlâ beklenen kayıtsa current verifier’a geçer; disabled branch değişmez.

    Browser / Duru
    Login sonucu bekleniyor
    Application
    Context için uygun
    Account / verifier records
    active; güncel verifier alias
  5. Login sonucu Browser’da

    Browser olumlu login sonucunu aldı. Bu active account için doğrulama ve account policy geçmiş, beklenen generation’ın verifier upgrade’i tamamlanmıştır. Bu yanıtın session cookie taşıdığı veya her resource action’a izin verdiği gösterilmez.

    Browser / Duru
    Authenticated context için uygun
    Application
    Context kabul kararı
    Account / verifier records
    active; güncel verifier alias

Account disabled

  1. Account ve credential başlangıcı

    Account status ile old verifier metadata ayrı; credential candidate yalnız alias.

    Browser / Duru
    Login candidate alias hazır
    Application
    Request yok
    Account / verifier records
    disabled; eski verifier alias
  2. Login talebi ulaştı

    Trusted account ve throttle state local olarak değerlendirilecek.

    Browser / Duru
    Login sonucu bekleniyor
    Application
    Candidate ulaştı; context yok
    Account / verifier records
    disabled; eski verifier alias
  3. Throttle ve verifier kapısı

    attemptAllowed=true ve passwordMatches=true olsa da accountStatus=disabled’dır. Account eligibility koşulu sağlanmadığı için yeni authenticated context verilmez; başarılı password sonucu hesabı active yapmaz.

    Browser / Duru
    Login sonucu bekleniyor
    Application
    Red: account disabled
    Account / verifier records
    disabled; eski verifier alias
  4. Verifier değiştirilmedi

    Account disabled olduğu için authenticated context kabul edilmez. Mevcut verifier değiştirilmez; bu dal rehash veya upgrade yapmaz.

    Browser / Duru
    Login sonucu bekleniyor
    Application
    Context reddedildi
    Account / verifier records
    disabled; eski verifier alias
  5. Login sonucu Browser’da

    Browser generic authentication failure sonucunu aldı. İç karar account disabled olduğu için ret vermiştir; contextIssued=false ve rehashCommitted=false kalır. Yanıt, mevcut session’ların bütün node’larda iptal edildiğini kanıtlamaz.

    Browser / Duru
    Authentication tamamlanamadı
    Application
    Red: account disabled
    Account / verifier records
    disabled; eski verifier alias

Attempt blocked

  1. Account ve credential başlangıcı

    Account status ile old verifier metadata ayrı; credential candidate yalnız alias.

    Browser / Duru
    Login candidate alias hazır
    Application
    Request yok
    Account / verifier records
    active; eski verifier alias
  2. Login talebi ulaştı

    Trusted account ve throttle state local olarak değerlendirilecek.

    Browser / Duru
    Login sonucu bekleniyor
    Application
    Candidate ulaştı; context yok
    Account / verifier records
    active; eski verifier alias
  3. Throttle ve verifier kapısı

    attemptAllowed=false olduğu için verifier çağrısı yapılmaz: verifyCalled=false ve passwordMatches=null. Password’ün yanlış olduğu sonucu çıkarılmaz. Yeni context ve verifier migration bu attempt’te yapılmaz.

    Browser / Duru
    Login sonucu bekleniyor
    Application
    Red: attempt engellendi
    Account / verifier records
    active; eski verifier alias
  4. Login sonucu Browser’da

    Browser generic authentication failure sonucunu aldı. İç karar attempt’i verifier’dan önce durdurmuştur; password sonucu bilinmez ve mevcut account/verifier kayıtları korunur. Active account state’i bu throttle kararını kaldırmaz.

    Browser / Duru
    Authentication tamamlanamadı
    Application
    Red: attempt engellendi
    Account / verifier records
    active; eski verifier alias

ROLLER · STATE · VERİ AKIŞI

Bir account tek bir loggedIn boolean değildir

Atlas’ın subject-duru kaydı loginIdentifier, contact verification, accountStatus, credential generation ve authenticator associations tutar. Session bu kaydın kendisi değildir. Yeni account yaratılabilir ama pending-contact state’inde protected login’e uygun olmayabilir; mevcut account disabled olunca password verifier bytes’i hâlâ doğru kalabilir.

Fixture’ın state adları uygulamaya aittir: pending-contact, active, disabled ve closed. Bunlar OWASP veya NIST’in zorunlu database enum’u değildir. Administrative disable, temporary throttle ve closure ayrı nedenler taşır; biri diğerinin süresini veya recovery yolunu otomatik belirlemez.

Registration: account claim ile contact kontrolünü ayır

Duru registration formunda duru.reader identifier’ını ve contact alias’ını verir. Application uniqueness ve ürün eligibility policy’sini trusted tarafta kontrol eder; password için WEB-14.01’deki uygun adaptive verifier yaklaşımını kullanır. Fixture candidateAllowed ve identifierAvailable sonuçlarını supplied true alır; gerçek kayıt verisi veya password içermez.

Atlas bu örnekte verified contact istemeden account’u active yapmaz. Verification token purpose=verify-contact ve subject-duru bağını taşır; tokenMatched/unused/lifetimeValid birlikte true ise contactVerified=true olur ve pending-contact→active geçişi yapılır. Mail transport sahne dışında bırakılmıştır; model hazır alias’ın ulaştığını varsayar.

Contact verification, o communication endpoint’inin kontrolü hakkında kanıttır. Gerçek kişi identity proofing’i, MFA possession assurance’ı veya başka tenant’a permission üretmez. Register response’u ve verification sonucunun public metni, internal account record’un bütün ayrıntılarını açmak zorunda değildir.

Password policy kayıt/değişiklik anında; verify login anında

Established password library, candidate’ı record’daki algorithm/salt/cost metadata ile verify eder; hash decrypt edilmez. Salt secret değildir. Verifier-only backup bile sensitive materyaldir; database ve backup erişimi, credential loglama ve metadata migration birlikte değerlendirilir.

Password seçimi sırasında compromised/common-value blocklist, uzunluk ve desteklenen input policy’si uygulanır. NIST SP 800-63B-4 kapsamındaki kuralları rastgele complexity veya periyodik değişim zorunluluğuna çevirmemek gerekir. Ürün assurance hedefi ve library’nin byte/Unicode/truncation davranışı belgelenmelidir; fixture production length veya cost sayısı önermez.

Credential policy’yi değiştirmek mevcut account’u yanlışlıkla disable etmekle aynı işlem değildir. Login’de eski verifier geçerli biçimde doğrulanabilir, sonra updated policy’ye göre rehash edilebilir. Password değiştirme/reset ve rehash aynı lifecycle event’i değildir.

Verify true sonrası account gate ve güvenli rehash

Normal login branch’i active account ve allowed attempt ile başlar. Supplied passwordMatches=true sonrası subject resolve edilir. needsRehash=true ise candidate hâlâ kontrollü verify path’te mevcutken established library yeni salt ve current cost policy ile yeni verifier üretir. Fixture verifier-old-alias→verifier-current-alias değişimini gösterir; hesap aynı subject kalır.

Credential generation değişimiyle rehash’in yarışı ayrı mesele olabilir. Örneğin aynı anda password reset edilmişse stale login eski candidate ile yeni reset verifier’ını overwrite etmemelidir. Account/credential version kontrolüyle beklenen generation’a conditional update ve conflict’te yeniden değerlendirme kullanılır; bu yüksek seviyeli tutarlılık kuralıdır.

Disabled branch’te passwordMatches=true olsa da accountAllowed=false olduğu için yeni authenticated context verilmez. Existing session invalidation’ın her node’a ne zaman yansıdığı ayrıca tasarlanır; verifier match sonucundan mevcut session’ların iptal edildiği çıkarılamaz.

Throttling state ile public failure farklı yüzeyler

Throttling, allowed attempt kararını yönetir; yalnız source IP’ye bağlı bir sayaç account seviyesindeki davranışı tam anlatmaz. Atlas fixture blocked attempt’i KDF çağrısından önce keser. Distributed limit state, contention, reset koşulları ve legitimate user lockout etkisi implementasyona bağlıdır; herhangi bir sayıyı evrensel retry policy diye vermiyoruz.

Absent, wrong-password, pending-contact ve disabled account için public body aynı generic authentication failure olabilir. Internal reason ise troubleshooting ve control verification için ayrı tutulur. Aynı body; HTTP status, response size, timing, redirect veya registration/reset davranışının eşdeğerliğini tek başına kanıtlamaz.

Bu ders account listesi çıkarmak için request deneme akışı vermez. Kendi contract review’inde public response matrix ile internal state’i karşılaştırarak hangi ayrıntının exposed olduğunu açıklarsın; gerçek latency benzerliğini ölçmeden constant-time garantisi yazmazsın.

Disable, closure ve recovery birbirinin kısayolu değildir

Account eligibility sona erdiğinde authenticator ve erişim ilişkilerini kontrollü şekilde invalidate etmek gerekir. Closure’ın data retention/deletion yönü ürün ve yükümlülüklere bağlıdır; account’un login kapısında closed olması bütün audit veya backup verisinin silindiği anlamına gelmez.

Recovery, temporary throttle kaldırma veya active session’dan password change farklı authorization kapıları kullanır. WEB-14.S02 recovery ve hassas değişiklikleri açar. Registration’da contactVerified flag’i elde edildi diye gelecekte her factor replacement aynı e-posta kanalıyla koşulsuz yapılamaz.

2. Red · Güven ve etki

Hareket olmadan bütün senaryoları oku

Disabled account

  1. Account ve attempt state ayrıldı

    Account disabled fakat attemptAllowed=true olarak verilmiştir. Credential match bu lifecycle state’ini kendiliğinden active yapamaz.

    Account/attempt policy
    case=disabled
    Credential verification
    Verify sonucu yok
    Context issuer
    Context verilmedi
  2. Throttle gate’i değerlendirildi

    Allowed attempt verifyCalled=true olarak ilerler; throttle gate’in geçmesi account eligibility kararı değildir.

    Account/attempt policy
    case=disabled
    Credential verification
    Verify çağrıldı
    Context issuer
    Context verilmedi
  3. Password sonucu kendi kapsamında kaldı

    passwordMatches=true verilmiştir. Bu predicate disabled account için authenticated context issuance’a tek başına yeterli değildir.

    Account/attempt policy
    case=disabled
    Credential verification
    passwordMatches=true
    Context issuer
    Context verilmedi
  4. Eligibility ve generation kontrolü korundu

    Account active olmadığı için contextIssued=false ve rehashCommitted=false’tur. Migration ihtiyacı lifecycle kapısını açmaz.

    Account/attempt policy
    case=disabled
    Credential verification
    Rehash committed=false
    Context issuer
    Context issued=false
  5. Context issuance durduruldu

    Subject için yeni authenticated context kurulmaz. Resource permission ayrı downstream koşuldur; burada verilmemiş context üzerinden action grant’i üretilmez.

    Account/attempt policy
    case=disabled
    Credential verification
    Credential migration yok
    Context issuer
    Authenticated context yok
  6. Ret reason’ı doğru kaldı

    Bu case known password match ile disabled lifecycle’ı ayırır; generic public mesaj iç audit’teki bu farkı ortadan kaldırmaz.

    Account/attempt policy
    case=disabled
    Credential verification
    Known: disabled policy denial
    Context issuer
    Context issued=false

Blocked attempt

  1. Account ve attempt state ayrıldı

    Account active fakat attemptAllowed=false’tur. Active olmak her attempt’in verifier veya session issuer’a ilerleyebileceği anlamına gelmez.

    Account/attempt policy
    case=throttled
    Credential verification
    Verify sonucu yok
    Context issuer
    Context verilmedi
  2. Throttle gate’i değerlendirildi

    Blocked attempt için verifyCalled=false ve passwordMatches=null kalır. Çağrı yapılmaması yanlış password sonucu olarak yeniden adlandırılmaz.

    Account/attempt policy
    case=throttled
    Credential verification
    Verify çağrılmadı
    Context issuer
    Context verilmedi
  3. Password sonucu kendi kapsamında kaldı

    passwordMatches bilinmez, çünkü verifier çağrılmamıştır. needsRehash=true metadata’sı başarılı verify yerine kullanılmaz.

    Account/attempt policy
    case=throttled
    Credential verification
    passwordMatches=null
    Context issuer
    Context verilmedi
  4. Eligibility ve generation kontrolü korundu

    Attempt bloke olduğu için contextIssued=false ve rehashCommitted=false’tur. Metadata güncellemesi authenticated context üretmek için bir çıkış yolu değildir.

    Account/attempt policy
    case=throttled
    Credential verification
    Rehash committed=false
    Context issuer
    Context issued=false
  5. Context issuance durduruldu

    Subject için yeni authenticated context kurulmaz. Resource permission ayrı downstream koşuldur; burada verilmemiş context üzerinden action grant’i üretilmez.

    Account/attempt policy
    case=throttled
    Credential verification
    Credential migration yok
    Context issuer
    Authenticated context yok
  6. Ret reason’ı doğru kaldı

    Bu case blocked attempt ile unknown password sonucunu ayırır. Null predicate, credential mismatch veya attacker attribution olarak sunulmaz.

    Account/attempt policy
    case=throttled
    Credential verification
    Known: blocked; verify not called
    Context issuer
    Context issued=false

VARSAYIM · SINIR · KONTROL

Credential match ile account eligibility karıştırılırsa

Normal login password verify ve account policy’yi aynı trusted decision chain’de birleştirir. Bir match boolean’ını doğrudan session issuer’a vermek pending/disabled/closed state’ini gözden kaçırabilir. Etki, ürünün erişimi kesmek istediği account’a yeni authenticated context verilmesidir; ayrıca resource authorization yine ayrı sınırdır.

Blocking control explicit eligible state ve credential generation kontrolüdür. Concurrent account disable ile context issuance arasındaki tutarlılık tasarlanır; cached account status’un freshness varsayımı görünür yapılır. UI active etiketine veya client-supplied status’a güvenilmez.

Public response farklılığı neyi açığa çıkarır?

Registration veya login yanıtı “bu account yok” ile “password yanlış” durumunu ayırırsa public contract account existence hakkında fazladan bilgi verir. Prerequisite bir endpoint’in bu farkı dışarı açmasıdır; tek observation credential bilgisi veya access permission sağlamaz.

Generic mesaj yalnız bir katmanı düzeltir. Timing ve redirect farkı kalabilir; tersine her body farkı account discovery kanıtı değildir, locale veya ürün akışı da etkili olabilir. Sahip olunan fixture’da response matrix ve reason code ayrımı kontrollü incelenir; engine selection sonucu canlı endpoint efficacy sayılmaz.

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

Hareket olmadan bütün senaryoları oku

Contact verified

  1. Registration state seçildi

    Registration initialStatus=pending-contact olarak başlar. Identifier’ın available ve candidate’ın allowed olması, yeni authenticated session’ın kurulduğunu göstermez.

    Account observation
    Pending contact
    Transition/response review
    Transition incelenmedi
    Scope hükmü
    Session kanıtı yok
  2. Contact proof purpose’u okundu

    Purpose verify-contact’tır; subjectMatches, tokenMatches, unused ve lifetimeValid true verilmiştir. Contact alias gerçek mesaj adresi veya kullanılır token değildir.

    Account observation
    verify-contact scope
    Transition/response review
    Contact predicates true
    Scope hükmü
    Session kanıtı yok
  3. Terminal proof state okundu

    afterTokenState=consumed, contact proof’un bu transition’da one-time kullanıldığını gösterir. Contact verification ile password verification aynı proof türü değildir.

    Account observation
    verify-contact scope
    Transition/response review
    Proof consumed
    Scope hükmü
    Session kanıtı yok
  4. Account transition ile session ayrıldı

    afterStatus=active olurken sessionIssued=false kalır. Contact verification’ın account eligibility’yi değiştirmesi, kullanıcıya normal authenticated session verilmesi anlamına gelmez.

    Account observation
    Account active
    Transition/response review
    Proof consumed
    Scope hükmü
    Session issued=false
  5. Delivery veya KDF ölçümü eklenmedi

    Bu kayıt mail delivery, kullanıcının inbox gözlemi veya gerçek Argon2id verifier hesabı içermez. Alias metadata’sı production cost veya latency değerine çevrilmez.

    Account observation
    Account active
    Transition/response review
    Transition biliniyor
    Scope hükmü
    Delivery/KDF sonucu bilinmiyor
  6. Registration hükmü korundu

    Bu fixture için contact proof consumed ve account active bilinir; session issuance yoktur. Login ve resource authorization, bu limited purpose transition’dan bağımsız olarak değerlendirilir.

    Account observation
    Known: account active
    Transition/response review
    Known: proof consumed
    Scope hükmü
    No ordinary session

Public mesaj

  1. Failure matrix seçildi

    İnceleme absent-account, wrong-password, pending-contact ve disabled-account için publicFailures kayıtlarını kullanır. Internal reason ile public response farklı amaçlar taşır.

    Account observation
    4 failure row
    Transition/response review
    Public body karşılaştırılmadı
    Scope hükmü
    Timing kanıtı yok
  2. Body eşitliği karşılaştırıldı

    Dört satırın publicBody değeri Authentication could not be completed metnidir. Bu gözlem body metni eşitliğini gösterir; HTTP status veya redirect eşitliği henüz verilmez.

    Account observation
    4 failure row
    Transition/response review
    Public body eşit
    Scope hükmü
    Status/redirect bilinmiyor
  3. Internal reason ayrımı korundu

    Absent, wrong, pending ve disabled reason’ları aynı public mesaja rağmen ayrı kayıtlardır. Generic metin, audit’te karar kaynağını kaybetmeyi gerektirmez.

    Account observation
    4 farklı internal reason
    Transition/response review
    Aynı public body
    Scope hükmü
    Status/redirect bilinmiyor
  4. Context issuance ayrı okundu

    Dört failure satırında da contextIssued=false’tur. Public mesajın genel olması, internally context verilmiş olmasını gizleyen bir varsayım değildir; alan ayrıca kontrol edilir.

    Account observation
    4 failure row
    Transition/response review
    Context issued=false ×4
    Scope hükmü
    Timing kanıtı yok
  5. Timing eşitliği çıkarılmadı

    Bu kayıtlar süre ölçümü içermediği için timing eşitliği veya production enumeration direnci kanıtlanmaz. Locale ve envelope gözlemleri de body karşılaştırmasının dışındadır.

    Account observation
    Body contract biliniyor
    Transition/response review
    Internal reasons korunuyor
    Scope hükmü
    UNKNOWN: timing/envelope
  6. Response incelemesi sınırlandı

    Body düzeyinde tek public contract desteklenir; context issuance yoktur. Ek timing/status/redirect gözlemleri gelmeden bütün authentication flow’u uniform diye adlandırılmaz.

    Account observation
    Known: public body eşit
    Transition/response review
    Known: no context issuance
    Scope hükmü
    UNKNOWN: other response differences

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

Account transition ile verify kararını ilişkilendir

Sanitized application audit subjectRef, accountStatus, contactVerified, attemptAllowed, passwordVerified, contextIssued ve verifierGeneration alanlarını taşıyabilir. Bu fixture alanları standard log event değildir. Candidate password, verifier bytes ve verification token’ı telemetry’ye yazılmaz.

XPath selection contextIssued=true ama accountStatus active değilse integrity discrepancy seçer. Benign normal active login sıfır; supplied disabled context issuance pozitif fixture tek satır. Eksik status insufficient evidence’dir. Administrative disablement, user closure ve verification delay normal açıklamalar olabilir; tek satır kötü niyetli actor kanıtı değildir.

Response review ile rate-limit validation’ı ayır

Public response matrix’i absent/wrong/pending/disabled koşullarını aynı contract altında gösterir. Metin eşitliğini, status ve content envelope’u ayrı karşılaştır. Timing eşitliği için kontrollü ölçüm ve yük koşulları gerekir; buradaki boolean fixture bunu çalıştırmaz.

Throttle gate testinde blocked attempt’in verifier çağrısına ve session issuer’a ilerlemediğini gözle. Multi-node request dağılımı, store unavailable sonucu ve legitimate retry deneyimi ayrıca doğrulanır; çözüm yalnız tek bir IP blacklist’i değildir.

Verifier migration ve disablement için kalıcı kontrol

Credential generation ve cost policy metadata’sını envantere al. Current policy’ye geçişin kapasite etkisini benchmark et; successful verify sonrası rehash’i stale-reset overwrite sınırıyla uygula. Salt/cost alias’ları production parametresi diye kopyalanmaz.

Disable/closure event’inin active credentials, session store/cache ve recovery eligibility üzerindeki etkisini belgeli şekilde kapat. Aynı subject için audit correlation korunurken gereksiz personal data azaltılmalıdır. Verification contact’ını yeniden bağlama yetkisi existing session’dan otomatik türetilmez.

ŞİMDİ VAKAYA UYGULA

Password match neden account lifecycle’ı geçersiz kılamaz?

Contact verification, throttle, password verify ve context issuance farklı transitions’dır. Generic mesajın hangi gözlemi eşitlediği ayrıca sınırlandırılır.

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

Account state ve verifier metadata 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",
  "contactAlias": "CONTACT_ALIAS_ONLY",
  "accountStates": [
    "pending-contact",
    "active",
    "disabled",
    "closed"
  ],
  "credentialRecord": {
    "algorithm": "Argon2id illustration",
    "salt": "SALT_ALIAS_NOT_BYTES",
    "costProfile": "BENCHMARKED_POLICY_ALIAS_NOT_PARAMETERS",
    "oldVerifier": "VERIFIER_OLD_ALIAS_NOT_A_HASH",
    "currentVerifier": "VERIFIER_CURRENT_ALIAS_NOT_A_HASH",
    "plaintextStored": false,
    "generation": "credential-generation-a"
  },
  "registration": {
    "identifierAvailable": true,
    "candidateAllowed": true,
    "initialStatus": "pending-contact",
    "contactTokenAlias": "VERIFY_CONTACT_ALIAS_ONLY",
    "purpose": "verify-contact",
    "subjectMatches": true,
    "tokenMatches": true,
    "unused": true,
    "lifetimeValid": true,
    "afterTokenState": "consumed",
    "afterStatus": "active",
    "sessionIssued": false
  },
  "loginRows": [
    {
      "case": "normal",
      "accountStatus": "active",
      "attemptAllowed": true,
      "passwordMatches": true,
      "needsRehash": true,
      "verifyCalled": true,
      "contextIssued": true,
      "rehashCommitted": true
    },
    {
      "case": "disabled",
      "accountStatus": "disabled",
      "attemptAllowed": true,
      "passwordMatches": true,
      "needsRehash": true,
      "verifyCalled": true,
      "contextIssued": false,
      "rehashCommitted": false
    },
    {
      "case": "throttled",
      "accountStatus": "active",
      "attemptAllowed": false,
      "passwordMatches": null,
      "needsRehash": true,
      "verifyCalled": false,
      "contextIssued": false,
      "rehashCommitted": false
    }
  ],
  "publicFailures": [
    {
      "internalReason": "absent-account",
      "publicBody": "Authentication could not be completed",
      "contextIssued": false
    },
    {
      "internalReason": "wrong-password",
      "publicBody": "Authentication could not be completed",
      "contextIssued": false
    },
    {
      "internalReason": "pending-contact",
      "publicBody": "Authentication could not be completed",
      "contextIssued": false
    },
    {
      "internalReason": "disabled-account",
      "publicBody": "Authentication could not be completed",
      "contextIssued": false
    }
  ],
  "selector": {
    "language": "XPath",
    "xml": "<audit><login accountStatus=\"active\" contextIssued=\"true\"/></audit>",
    "xpath": "count(/audit/login[@contextIssued=\"true\" and @accountStatus!=\"active\"])",
    "expected": 0,
    "positiveFixtureXml": "<audit><login accountStatus=\"disabled\" contextIssued=\"true\"/></audit>",
    "positiveExpected": 1,
    "scope": "Local account/context integrity; no production log, latency, KDF or mail measurement.",
    "missingFieldBehavior": "Selection requires declared fields. Missing fields mean insufficient evidence; a zero count does not prove control efficacy."
  }
}
accountStatus / contactVerified
Ürün eligibility ile communication endpoint kontrolü; identity proofing değil.
credentialRecord
Established library record’unu açıklayan salt/cost/verifier alias’ları; gerçek hash veya production cost değil.
attemptAllowed / verifyCalled
Throttle gate blocked ise verification çalışmamış kabul edilir; passwordMatches null unknown’dur.
contextIssued / rehashCommitted
Authentication context verme ve verifier upgrade ayrı sonuçlardır; generation yarışları ayrıca korunur.
publicFailures / selector
Internal reason’dan ayrılmış public contract ve own XML integrity selection.

Account policy state’leri authored’dır. Password/hash/token/contact alias’ları işlevsizdir. Mail, real KDF, session issuance, distributed limiter ve timing measurement çalışmaz; fixture predicate’leri trusted sonucu temsil eder.

İki yanlış kanı

Password verify true ise disabled account login olmalıdır.

Credential match ile account eligibility ayrı kapılardır; disabled state yeni context issuance’ını durdurabilir.

Aynı generic error metni enumeration riskinin tamamen bittiğini kanıtlar.

Status, timing, size, redirect ve diğer lifecycle endpoint’leri de farklılık oluşturabilir; metin eşitliği tek kanıttı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.

Account disabled, fakat passwordMatches=true. Login context ve rehash commit üretilir mi?

  1. Hayır. contextIssued=false ve rehashCommitted=false.
  2. Evet. Password eşleşmesi disabled state’i otomatik active yapar.
Gerekçeli cevabı oku

Hayır. contextIssued=false ve rehashCommitted=false. — Bu policy disabled account için context üretmez. Password eşleşmesi account state koşulunu kaldırmaz.

Contact doğrulaması account’ı active yaptı. Browser için authenticated session da üretilmiş midir?

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

registration.initialStatus
pending-contact
registration.purpose
verify-contact
registration.afterTokenState
consumed
registration.afterStatus
active
registration.sessionIssued
false
  1. Evet. Active account bütün browser session’larını otomatik oluşturur.
  2. Hayır. Account active, fakat sessionIssued=false.
Gerekçeli cevabı oku

Hayır. Account active, fakat sessionIssued=false. — verify-contact proof’u bu lifecycle geçişi için consumed olur. Account activation, login session üretme amacıyla eşitlenmez.

PublicFailures dört internal reason için aynı body veriyor. Neden aynı message bütün response/timing davranışlarının eşitliğini kanıtlamaz? KDF alias’ları neyi ölçmez?

Gerekçeli cevabı oku

Aynı public message, gereksiz account durumunu açıklamama kararını gösterir. Status, timing, retry davranışı veya başka response farklarının eşit olduğunu tek başına kanıtlamaz. Credential record Argon2id rolünü anlatan salt/verifier/cost alias’ları taşır; gerçek hash byte’ları veya benchmark parametreleri değildir. Internal audit nedeni sınırlı biçimde kaydedebilir, fakat password veya credential materyalini public body’ye taşımamalıdır.

□ Aynı public body’yi timing eşitliği kanıtı saymadım.

□ KDF alias’larını gerçek hash veya kalibre edilmiş parametre saymadım.

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

Kaynaklar ve kapsam