DEV Community

William Rodriguez
William Rodriguez

Posted on

Verifica sin exponer: Autenticación en tiempo constante con valid()

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.")
Enter fullscreen mode Exit fullscreen mode

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_digest internamente para neutralizar ataques de tiempo.
  • Resultado Booleano Estricto: Devuelve estrictamente True o False; el secreto nunca sale del núcleo criptográfico.

Problemas eliminados:

  • Desarrolladores llamando a get('SECRET') y haciendo if 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
Enter fullscreen mode Exit fullscreen mode

Autor: William Steve Rodríguez Villamizar (Wisrovi)

Top comments (0)