שני שלבים · בקשת challenge → המתנה wall-clock → השלמה. השרת מסרב לפתיחה לפני שעבר זמן מינימלי שנחתם בתוך ה-token. אדם רואה countdown, בוט שמדלג מקבל 429 too_fast.
STATE
מצב · לא התחלנו
איך זה עובד
1. הלקוח מבקש challenge עם purpose + signal · השרת מחתים HMAC-SHA256.
2. ה-token מכיל iat + min_wait_ms · אינו ניתן לזיוף בלי המפתח של השרת.
3. הלקוח מציג countdown של min_wait_ms (default 8 שניות).
4. אחרי שהזמן עובר · הלקוח שולח /verify עם אותו signal.
5. השרת בודק now ≥ iat + min_wait_ms · בוט שמדלג מקבל 429 too_fast.
מה בוט לא יכול לעקוף
אין דרך לדלג על ה-wall-clock · ה-iat חתום בתוך ה-token.
אין דרך לזייף את ה-token · ה-HMAC משתמש במפתח שלא נחשף לדפדפן.
אין דרך לעשות replay · ה-signal_hash בודק שהמטרה זהה.
אין דרך להריץ במקביל אלפי בקשות · rate-limit + iat ייחודי לכל token.