security

package
v0.0.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 18, 2026 License: MIT Imports: 2 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (

	// ErrInvalidHash se retorna cuando un hash (Argon2, Bcrypt, etc.) no cumple
	// con la estructura PHC o está corrupto.
	ErrInvalidHash = errors.New("el hash provisto no tiene un formato válido")

	// ErrIncompatibleVersion se retorna cuando el algoritmo o la versión del
	// hash no es compatible con la configuración actual del sistema.
	ErrIncompatibleVersion = errors.New("versión o algoritmo inalcanzable")

	// ErrInvalidCiphertext se retorna cuando el payload cifrado (AES-GCM) no se
	// puede autenticar o descifrar debido a corrupción o clave errónea.
	ErrInvalidCiphertext = errors.New("el texto cifrado no es válido o está corrupto")

	// ErrInvalidKeyLength se retorna cuando una clave secreta no cumple
	// con los requerimientos de tamaño del algoritmo (ej. AES-256 requiere 32 bytes).
	ErrInvalidKeyLength = errors.New("longitud de clave no válida")

	// ErrAuthenticationFailed se retorna cuando las credenciales son inválidas.
	// NO especifica si el usuario no existe o la contraseña es incorrecta.
	// Esto previene ataques de enumeración de usuarios.
	ErrAuthenticationFailed = errors.New("credenciales inválidas")

	// ErrPermissionDenied se retorna cuando el usuario autenticado no tiene
	// permisos para realizar la operación solicitada.
	ErrPermissionDenied = errors.New("permiso denegado")

	// ErrInsufficientSecurityLevel se retorna cuando una operación requiere
	// un nivel de seguridad mayor al configurado (ej. 2FA requerido).
	ErrInsufficientSecurityLevel = errors.New("nivel de seguridad insuficiente para esta operación")

	// ErrTokenInvalid se retorna cuando un token está mal formado, expirado,
	// ha sido revocado o no corresponde al usuario. No revela qué tipo de
	// token era ni por qué falló específicamente.
	ErrTokenInvalid = errors.New("token inválido o expirado")

	// ErrTokenRevoked se retorna cuando un token fue revocado explícitamente
	// (ej. logout, cambio de contraseña, reporte de robo).
	ErrTokenRevoked = errors.New("token revocado")

	// ErrSessionExpired se retorna cuando una sesión ha expirado por inactividad
	// o por alcanzar su tiempo máximo de vida.
	ErrSessionExpired = errors.New("sesión expirada")

	// ErrRateLimitExceeded se retorna cuando se superan los intentos permitidos
	// en un período de tiempo determinado (login, reset de contraseña, etc.).
	// No revela cuántos intentos quedan ni el tiempo exacto de bloqueo.
	ErrRateLimitExceeded = errors.New("demasiados intentos, inténtelo más tarde")

	// ErrAccountLocked se retorna cuando una cuenta ha sido bloqueada debido
	// a múltiples intentos fallidos o por acción administrativa.
	ErrAccountLocked = errors.New("cuenta bloqueada temporalmente")

	// ErrIPBlocked se retorna cuando una dirección IP ha sido bloqueada
	// por actividad sospechosa o múltiples intentos fallidos.
	ErrIPBlocked = errors.New("dirección IP bloqueada temporalmente")

	// ErrInvalidInput se retorna cuando los datos de entrada no cumplen
	// con las políticas de validación (contraseña débil, email mal formado, etc.).
	// No especifica qué regla falló para no dar pistas a atacantes.
	ErrInvalidInput = errors.New("datos de entrada no válidos")

	// ErrWeakPassword se retorna cuando una contraseña no cumple con las
	// políticas de fortaleza configuradas (longitud, complejidad, etc.).
	ErrWeakPassword = errors.New("la contraseña no cumple los requisitos de seguridad")

	// ErrOperationNotAllowed se retorna cuando una operación no está permitida
	// en el estado actual (ej. cambiar contraseña durante bloqueo).
	ErrOperationNotAllowed = errors.New("operación no permitida en este momento")

	// ErrPasswordChangeRequired se retorna cuando el sistema requiere que el
	// usuario cambie su contraseña (ej. expiración, compromiso detectado).
	ErrPasswordChangeRequired = errors.New("se requiere cambiar la contraseña")
)

Functions

This section is empty.

Types

type Level

type Level uint8

Level representa el nivel de rigor en las políticas de seguridad aplicadas. Cada nivel ajusta automáticamente los valores predeterminados de hashing, expiración de tokens, límites de intentos y restricciones de sesión.

PRINCIPIO DE DISEÑO: "Seguridad por defecto". Si el usuario no configura nada, LevelMedium se aplica automáticamente, garantizando un baseline seguro.

const (
	// LevelDefault es el valor cero: cuando SecurityLevel no se configura
	// explícitamente, GetDefaults() aplica los parámetros de LevelMedium.
	LevelDefault Level = iota

	// LevelLow: Para entornos de desarrollo o aplicaciones internas de bajo riesgo.
	// Hashing rápido (bcrypt cost 10), tokens de larga duración (24h),
	// límites permisivos. NO usar en producción con datos sensibles.
	LevelLow

	// LevelMedium: Para aplicaciones estándar de producción (recomendado por defecto).
	// Equilibrio entre seguridad y rendimiento. Bcrypt cost 12, JWT 1h,
	// 5 intentos de login antes de bloqueo.
	LevelMedium

	// LevelHigh: Para aplicaciones que manejan datos sensibles (PII, finanzas, salud).
	// Hashing robusto (bcrypt cost 14), tokens de corta duración (15min),
	// rotación obligatoria de refresh tokens, 3 intentos antes de bloqueo.
	LevelHigh

	// LevelCritical: Para infraestructura crítica, banca, gobierno o sistemas
	// con requerimientos regulatorios estrictos. Bcrypt cost 15 (o Argon2),
	// JWT de 5min, 2FA obligatorio, bloqueo de 24h tras 3 intentos.
	LevelCritical
)

func (Level) GetDefaults

func (l Level) GetDefaults() SecurityDefaults

GetDefaults devuelve la configuración segura predeterminada para un nivel dado. Si el nivel no es válido, retorna LevelMedium como fallback seguro.

Ejemplo de uso:

defaults := security.LevelHigh.GetDefaults()
fmt.Println(defaults.BcryptCost)          // 14
fmt.Println(defaults.AccessTokenDuration) // 15m0s

func (Level) IsValid

func (l Level) IsValid() bool

IsValid verifica si el nivel está dentro del rango válido.

func (Level) String

func (l Level) String() string

String devuelve la representación en texto del nivel de seguridad. Útil para logging y mensajes de auditoría.

type SecurityDefaults

type SecurityDefaults struct {
	// Hashing de contraseñas
	BcryptCost int // Costo computacional (10-15). Mayor = más seguro pero más lento.

	// Tokens
	AccessTokenDuration  time.Duration // Validez del token de acceso principal
	RefreshTokenDuration time.Duration // Validez del token de renovación

	// Rate limiting y protección contra fuerza bruta
	MaxLoginAttempts        int           // Intentos máximos antes de bloqueo
	LockoutDuration         time.Duration // Tiempo de bloqueo tras superar intentos
	PasswordResetMaxPerHour int           // Máximo de resets de contraseña por hora

	// Sesiones
	MaxConcurrentSessions int           // Máximo de sesiones activas por usuario
	SessionTimeout        time.Duration // Tiempo máximo absoluto de sesión
	IdleTimeout           time.Duration // Tiempo de inactividad antes de cerrar sesión

	// 2FA / MFA
	Require2FA bool // Si true, 2FA es obligatorio para todos los usuarios
}

SecurityDefaults define los parámetros base para cada nivel de seguridad. Estos valores son el resultado de auditorías de seguridad y recomendaciones de OWASP, NIST y otros estándares de la industria.

Directories

Path Synopsis
Package middleware provee middlewares HTTP reutilizables para el ecosistema GoKit: autenticación JWT, autorización por rol, verificación de sesión activa, limitación de tasa (rate limiting), CORS y logging de peticiones.
Package middleware provee middlewares HTTP reutilizables para el ecosistema GoKit: autenticación JWT, autorización por rol, verificación de sesión activa, limitación de tasa (rate limiting), CORS y logging de peticiones.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL