Auditoría y generación de contraseñas seguras en Emacs
1. Introducción
En esta entrada presento password-audit.el, un módulo para Emacs que permite auditar contraseñas, generar claves seguras y verificar la complejidad mínima exigida. También añade soporte opcional para el gestor de contraseñas pass desde la terminal.
2. ¿Por qué usarlo?
Con frecuencia usamos contraseñas débiles o repetidas. Este módulo ayuda a evaluar si una contraseña es vulnerable, y ofrece recomendaciones inmediatas para mejorarla.
3. Funcionalidades principales
- Auditoría de longitud, complejidad y patrones inseguros.
- Generación de contraseñas seguras.
- Integración con `pass` para analizar contraseñas almacenadas.
4. Código fuente del módulo
;;; password-audit.el --- Auditoría de contraseñas + integración con pass -*- lexical-binding: t; -*- ;; Author: Mike ;; Version: 1.1 ;; Package-Requires: ((emacs "24.3") (cl-lib "0.5")) ;; Keywords: security, password, audit ;; License: MIT (require 'cl-lib) (defvar audit-password-sequences '("abc" "123" "qwe" "password" "qaz") "Lista de secuencias comunes que deben evitarse en contraseñas.") (defun audit-password-strength (password) "Audita la fortaleza de una contraseña y sugiere mejoras." (interactive "sContraseña a auditar: ") (let* ((length (length password)) (has-uppercase (string-match-p "[A-Z]" password)) (has-lowercase (string-match-p "[a-z]" password)) (has-numbers (string-match-p "[0-9]" password)) (has-symbols (string-match-p "[^a-zA-Z0-9]" password)) (has-sequences (cl-some (lambda (seq) (string-match-p (regexp-quote seq) password)) audit-password-sequences)) (score 0) (feedback '())) ;; Evaluación de longitud (cond ((< length 8) (push "Longitud crítica: menos de 8 caracteres." feedback)) ((< length 12) (push "Longitud insuficiente: menos de 12 caracteres." feedback) (cl-incf score)) ((< length 16) (push "Longitud aceptable: entre 12-16 caracteres." feedback) (cl-incf score 2)) (t (push "Longitud excelente: más de 16 caracteres." feedback) (cl-incf score 3))) ;; Evaluación de complejidad (when has-uppercase (cl-incf score) (push "Contiene mayúsculas [+]" feedback)) (when has-lowercase (cl-incf score) (push "Contiene minúsculas [+]" feedback)) (when has-numbers (cl-incf score) (push "Contiene números [+]" feedback)) (when has-symbols (cl-incf score) (push "Contiene símbolos especiales [+]" feedback)) ;; Penalizaciones (when has-sequences (cl-decf score) (push "Contiene secuencias comunes (ej: abc, 123) [-]" feedback)) (when (string-match-p (regexp-quote (user-login-name)) password) (cl-decf score 2) (push "Contiene tu nombre de usuario [-]" feedback)) ;; Limitar puntuación máxima (setq score (min score 10)) ;; Mostrar resultados (with-output-to-temp-buffer "*Password Audit*" (pop-to-buffer "*Password Audit*") (erase-buffer) (insert "=== AUDITORÍA DE SEGURIDAD DE CONTRASEÑA ===\n\n") (insert (format "Puntuación: %d/10\n\n" score)) (insert "Análisis:\n") (dolist (item (reverse feedback)) (insert (format "• %s\n" item))) (insert "\nRecomendaciones:\n") (cond ((< score 4) (insert "⚠️ Contraseña DÉBIL - Se recomienda cambio inmediato\n") (insert "• Use la función `generate-strong-password`\n") (insert "• Longitud mínima sugerida: 16 caracteres\n") (insert "• Incluir letras, números y símbolos\n")) ((< score 7) (insert "⚠️ Contraseña MODERADA - Se recomienda mejora\n") (insert "• Considere alargarla\n") (insert "• Añadir caracteres variados\n")) (t (insert "✅ Contraseña FUERTE - Cumple con los estándares\n") (insert "• Cambiarla periódicamente\n") (insert "• No reutilizarla en otros servicios\n"))) (insert "\n=== FIN DEL ANÁLISIS ===\n")))) (defun generate-strong-password (&optional length) "Genera una contraseña aleatoria de LENGTH caracteres (mínimo 16)." (interactive "nLongitud de la contraseña (mínimo 16): ") (let* ((chars "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_-+=<>?") (len (max 16 (or length 16))) (pass (cl-loop repeat len concat (string (elt chars (random (length chars))))))) (kill-new pass) (message "Contraseña copiada al portapapeles: %s" pass))) (provide 'password-audit) ;;; password-audit.el ends here
5. Diagrama del flujo de auditoría (PlantUML)
6. Cómo usarlo
Carga el archivo con:
(load "~/ruta/a/password-audit.el")- Ejecuta:
M-x audit-password-strengthpara auditar manualmente.M-x generate-strong-passwordpara crear contraseñas seguras.M-x audit-password-from-passpara auditar claves almacenadas enpass.
7. Próximos pasos
Estoy trabajando en:
- Exportación de reportes en Org.
- Clasificación automática por fortaleza.
- Versión interactiva con botones y enlaces.
8. Recomendaciones finales
- No reutilices contraseñas en diferentes servicios.
- Usa frases largas y mezcla diferentes tipos de caracteres.
- Guarda tus contraseñas en un gestor seguro, como
pass,KeePassXCo incluso con una integración segura en Emacs.
9. Conclusión
Gracias a este pequeño módulo puedes mejorar tu higiene digital sin salir de Emacs. ¡Haz de Emacs tu central de seguridad también!
¿Tienes sugerencias? Déjalas en los comentarios o en GitHub.
—
Hecho con Emacs y café ☕ por Mike
Este artículo forma parte de la serie "Seguridad con Emacs" en Emacs con Esteroides.