# 1. Сервер → Агент
{ nonce, epoch, challenge=[B1,B3,B5] }
# 2. Агент збирає evidence
quote = TPM.Quote(PCR, nonce)
geo = GNSS.fix() # OSNMA
uwb = [ranging(a) for a in challenge]
# 3. Агент → Сервер (підпис)
proof = signEd25519(quote‖geo‖uwb‖nonce‖epoch)
# 4. Сервер перевіряє все
✓ підпис від довіреного пристрою
✓ PCR == еталон · ✓ geo ∈ geofence
✓ ∀ маяк ∈ challenge: підпис ∧ дистанція
# 5a. OK → K_epoch = HKDF(master,nonce,…)
# 5b. FAIL → DENY (ключ не виводиться)