17 lines
693 B
JSON
17 lines
693 B
JSON
{
|
|
"feature_id": "CLUB-004",
|
|
"agent": "security",
|
|
"stage": "security_gate",
|
|
"verdict": "APPROVED",
|
|
"security_check": "security",
|
|
"summary": "Códigos hasheados con SHA-256, plaintext nunca persiste en DB. Race condition mitigada con FOR UPDATE.",
|
|
"checks": {
|
|
"storage": "OK: code_hash = SHA-256(plaintext), code_fingerprint = truncated hash",
|
|
"race_condition": "OK: consumeRecoveryCode usa FOR UPDATE + COMMIT en la misma transacción",
|
|
"expiry": "OK: códigos caducan a los 30 días",
|
|
"single_use": "OK: used_at se marca tras consumo exitoso",
|
|
"token_storage": "OK: device token hasheado igual que en DEVICE flow"
|
|
},
|
|
"timestamp": "2026-08-26T20:48:10Z"
|
|
}
|