Logo

Mi Blog con Emacs y Esteroides

Emacs, IA y Linux: Poder y Simplicidad en tu Flujo de Trabajo

mybloggingnotes@gmail.com


24/04/2025

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)

password-audit-diagram.png

6. Cómo usarlo

  • Carga el archivo con:

    (load "~/ruta/a/password-audit.el")
    
  • Ejecuta:
    • M-x audit-password-strength para auditar manualmente.
    • M-x generate-strong-password para crear contraseñas seguras.
    • M-x audit-password-from-pass para auditar claves almacenadas en pass.

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, KeePassXC o 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.

Categoría: seguridad emacs contraseñas pass orgmode tutoriales

Suscribirse al Feed RSS | Mapa del Sitio

© 2025 M.Castillo | Hecho con ❤️ en Emacs y org-static-blog

📊 Estadísticas Visit counter For Websites