Recuperar un secreto en memoria solo para comprobar si coincide con un input es un antipatrón de seguridad. valid() de wauth verifica tokens en tiempo constante sin exponer el texto plano.
Esta es la implementación exacta para producción de valid() Constant-Time Verification Protocol:
from wauth import WAuth
auth = WAuth()
# Setup: auth.set("ADMIN_TOKEN", "7483920:ABC-DEF-GHI")
user_submitted_token = "7483920:ABC-DEF-GHI"
# LESS SECURE: Calling get() leaks secret to memory and logs
# actual = auth.get("ADMIN_TOKEN")
# if actual == user_submitted_token: ...
# MORE SECURE: valid() compares in constant-time; secret never leaves wauth!
if auth.valid("ADMIN_TOKEN", user_submitted_token):
print("Access granted: Token valid.")
else:
print("Access denied: Invalid credentials.")
Ventajas de ingeniería:
-
Cero Exposición de Secreto:
auth.valid('KEY', input)valida la igualdad sin entregar el texto plano. -
Comparación en Tiempo Constante: Utiliza
hmac.compare_digestinternamente para neutralizar ataques de tiempo. -
Resultado Booleano Estricto: Devuelve estrictamente
TrueoFalse; el secreto nunca sale del núcleo criptográfico.
Problemas eliminados:
- Desarrolladores llamando a
get('SECRET')y haciendoif secret == user_input:, exponiendo secretos en logs y memoria - Ataques de canal lateral por análisis de tiempos que permiten adivinar el secreto carácter a carácter
- Secretos retenidos en el recolector de basura accesibles mediante inspección de memoria
Explora el código fuente abierto y auditado en GitHub o instálalo con:
pip install wauth
Autor: William Steve Rodríguez Villamizar (Wisrovi)
Top comments (0)