• Saltar al contenido principal
  • Skip to secondary menu
  • Saltar a la barra lateral principal
  • Saltar al pie de página
  • Inicio
  • Secciones
    • Ciencia de datos
    • Criptografía
    • Herramientas
    • Machine Learning
    • Noticias
    • Opinión
    • Productividad
    • Programación
      • JavaScript
      • Julia
      • Matlab
      • Python
      • R
  • Programación
    • JavaScript
    • Julia
    • Matlab
    • Python
    • R
  • Laboratorio
    • Encuestas: Tamaño de Muestra
    • Lotería: Probabilidad de Ganar
    • Reparto de Escaños (D’Hondt)
    • Tres en Raya con IA
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad
    • Tiendas afiliadas
      • AliExpress
      • Amazon
      • Banggood
      • GeekBuying
      • Lenovo

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Machine Learning
  • IA Generativa
  • Python
  • Pandas
  • NumPy
  • Excel
  • Matlab

¿Cómo guardar las contraseñas en aplicaciones?

julio 18, 2018 Por Daniel Rodríguez Deja un comentario
Tiempo de lectura: 6 minutos

guardar las contraseñas

A la hora de crear una nueva aplicación multiusuario siempre llega el momento de manejar contraseñas para gestionar el acceso de los usuarios a la misma. En estos momentos llega la pregunta de cómo guardar las contraseñas de una forma que sea segura y confiable para los usuarios. En esta entrada se presentarán algunos de los métodos incorrectos más utilizados y se explicará una forma segura de realizar esta tarea.

Tabla de contenidos

  • 1 Objetivos de la entrada
  • 2 Métodos inadecuados para guardar contraseñas
    • 2.1 Texto plano
    • 2.2 Encriptado
  • 3 Guardado seguro de contraseñas
  • 4 Mejoras a las funciones de hash
    • 4.1 Sal
    • 4.2 Pimienta
    • 4.3 Combinación de pimienta y sal
  • 5 Conclusiones

Objetivos de la entrada

Antes de continuar es importante acotar el alcance de la entrada. En esta se explicará cómo guardar las contraseñas en aplicaciones multiusuario. En las que el usuario de ha de identificar mediante un par usuario y contraseña. La aplicación solamente necesita saber que la contraseña introducida es la correcta o no. En ningún momento será necesario recuperar la contraseña para utilizar en otro servicio. Es decir, no se va a implementar un llavero sino un control de acceso. En el caso de los llaveros la única forma segura de guardar las contraseñas es encriptando las mismas.

Por otro lado, también es necesario definir que vamos a entender por guardar los datos de forma segura. En esta ocasión entendemos que las contraseñas se almacenan de forma seguirá si un atacante que accede al sistema y obtienen los datos no puede recuperar las contraseñas utilizadas por los usuarios.

Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo
En Analytics Lane
Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo

Publicidad


Métodos inadecuados para guardar contraseñas

Inicialmente, en esta primera sección se describirán dos métodos inadecuados muy utilizados. Por lo que no han de ser empleados para guardar contraseñas en una aplicación. Concretamente se explicarán porque no utilizar: texto plano y encriptado.

Texto plano

Uno de los métodos más sencillos de implementar es un archivo en el que se guardan los datos en texto plano. Permitiendo la lectura sin problemas de los pares usuario-contraseña. En este caso es fácil comprobar que si un atacante obtiene el archivo obtendrá automáticamente los datos. Esto le permitiría utilizar esta información para acceder a las cuentas de todos los usuarios y suplantar su identidad.

Publicidad


Encriptado

La primera idea después de ver esto es encriptar el archivo. A pesar de utilizar un algoritmo seguro esto no es una buena idea. Un atacante obtendrá un archivo encriptado del que no podrá obtener directamente las contraseñas. Pero posiblemente no sea difícil obtener esta información indirectamente.

A pesar de parecer una buena idea tiene un punto débil. La palabra utilizada para encriptar los datos ha de estar disponible para poder validar las cuentas. En tal caso es altamente probable que el atacante puede obtener esta palabra fácilmente. Buscándola en la base de datos o el código. Permitiéndole así obtener también el listado de las contraseñas.

En el improbable caso de que no obtenga también la palabra, mediante un ataque de fuerza bruta podrá obtener todas las contraseñas. Dificultado solamente un poco su objetivo.

Guardado seguro de contraseñas

Después de ver las técnicas poco recomendables se puede ver otra más fiable. Una que responda a la pregunta cómo guardar contraseñas de forma segura. Un método básico es guardar el código hash en lugar de la contraseña. Es decir, guardar una transformación una transformación de la contraseña. En una entrada anterior se explico algunas de sus propiedades de las funciones hash. Una de las más importantes para lo que nos afecta es que no son reversibles. Por lo que, a partir de un código hash no existe manera directa de obtener el conjunto de datos original.

Así para poder validar usuarios solamente se ha de guardar el nombre de usuarios y el código hash de contraseña. En un entorno así construido, la validación de un usuario no es más complicada que cuando las contraseñas se guardan en texto plano. Simplemente cuando el usuario introduce su par de palabras usuario y contraseña se ha de calcular el código hash de la segunda. En este punto es necesario comprobar si el par de palabras usuario y hash existe. En caso afirmativo se ha validado la identidad del usuario, mientras que en caso negativo se ha de denegar el acceso.

Por lo que, en este escenario un atacante que obtenga el archivo con los pares usuario y hash no puede recuperar directamente las contraseñas. Únicamente puede intentar obtener contraseñas mediante un ataque de fuerza bruta en el que pruebe contraseñas hasta que encuentre alguna que genere alguno de los códigos hash existentes. En este punto la dificultad del ataque depende de las contraseñas utilizadas por los usuarios. Aunque se puede complicar algo mas las cosas como se explica a continuación.

Publicidad


Mejoras a las funciones de hash

Existen dos técnicas que permiten complicar la obtención por fuerza bruta de las contraseñas, agregando a las contraseñas lo que se llama sal y pimienta.

Pimienta y sal

Sal

La complejidad de las contraseñas se puede aumentar utilizando una cadena aleatoria, diferente para cada uno de los usuarios, que se concatena a la contraseña antes de obtener el hash. Así, aunque dos usuarios tengan la misma contraseña, el hash en la base de datos será diferente. Evitando que el atacante pueda realizar un ataque genérico para encontrar las contraseñas de los usuarios, viéndose obligado a realizar un ataque diferente por usuario.

A la hora de guardar las contraseñas se ha de modificar el proceso ligeramente. En lugar de guardar el hash de la contraseña se guardará tanto la sal como en hash de la sal y la contraseña. Los pasos necesarios para validar la contraseña de un usuario al utilizar sal requieren los siguientes pasos:

  1. Solicitar el nombre de usuario y contraseña
  2. Comprobar si el usuario existe, en caso afirmativo obtener la sal y en caso negativo denegar el acceso
  3. General el código hash de código de la sal y la contraseña
  4. Comprobar si el código hash coincide con el almacenado, en caso afirmativo se valida el usuario, en caso negativo se deniega el acceso.

Debido a que el valor de la sal es diferente para cada usuario este se ha de almacenar junto al nombre de usuario y el hash de la contraseña. Aunque el atacante conozca el valor de la sal que se añade a la contraseña no es un problema ya que se ha aumentado la complejidad del ataque necesario para obtener las contraseñas.

Publicidad


Pimienta

Un segundo paso para aumentar la dificultad de los ataques es agregar una segunda cadena aleatoria de un conjunto que se ha generado previamente. Esta es la que se suele llamar pimienta.  Al agregar una segunda cadena un ataque por diccionario ha de probar tantas combinaciones como valores de pimienta exista. Multiplicando el coste de un ataque por fuerza bruta.

El proceso para guardar las contraseñas aumenta en complejidad con este método. Inicialmente se ha de generar un conjunto de pimientas y se han de guardar de forma que sea fácilmente recuperables. Una vez un usuario guarda una contraseña se escoge un valor de la pimienta al azar y se concatena con la contraseña para obtener un código hash. El proceso de validación requiere ahora los siguientes pasos:

  1. Solicitar el nombre de usuario y contraseña
  2. Obtener todos los posibles valores de la pimienta
  3. General el código hash de código hash de la contraseña con todas las pimientas
  4. Comprobar si alguno de los códigos obtenidos coincide con el almacenado, en caso afirmativo se valida el usuario, en caso negativo se deniega el acceso 

Combinación de pimienta y sal

Obviamente, la combinación de los métodos permite obtener un nivel mayor de seguridad que utilizar solamente uno de ellos por separado. Al combinar ambos, generalmente la sal se suele añadir antes de la contraseña y la pimienta después. Calculando los códigos hash de la cadena que se obtenga de concatenar: sal + contraseña + pimienta.

Publicidad


Conclusiones

En esta entrada se ha presentado un método más seguro que la encriptación para guardar las contraseñas de los usuarios a la hora de crear una aplicación. La combinación de las técnicas descritas en esta entrada permite mejorar considerablemente la seguridad de nuestros sistemas.

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 5 / 5. Votos emitidos: 2

Ya que has encontrado útil este contenido...

¡Síguenos en redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

Publicaciones relacionadas

  • Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo
  • ¿Está concentrado el MSCI World? Un análisis con Gini, Lorenz y leyes de potencia
  • Curiosidad: ¿Por qué usamos p < 0.05? Un umbral que cambió la historia de la ciencia
  • Programador de tareas de Windows: Guía definitiva para automatizar tu trabajo (BAT, PowerShell y Python)
  • La Paradoja del Cumpleaños, o por qué no es tan raro compartir fecha de nacimiento
  • Cómo abrir una ventana de Chrome con tamaño y posición específicos desde la línea de comandos en Windows
  • Curiosidad: El sesgo de supervivencia, o por qué prestar atención sólo a los que “llegaron” puede engañarte
  • Documentar tu API de Express con TypeScript usando OpenAPI (Swagger)
  • Data Lake y Data Warehouse: diferencias, usos y cómo se complementan en la era del dato

Publicado en: Criptografía Etiquetado como: Contraseñas, Hash

Interacciones con los lectores

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

I accept the Terms and Conditions and the Privacy Policy

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Barra lateral principal

Suscríbete a nuestro boletín

Suscríbete al boletín semanal para estar al día de todas las publicaciones.

Política de Privacidad

Analytics Lane en redes sociales

  • Amazon
  • Bluesky
  • Facebook
  • GitHub
  • Instagram
  • Mastodon
  • Pinterest
  • RSS
  • Telegram
  • Tumblr
  • Twitter
  • YouTube

Publicidad

Entradas recientes

Data Lake y Data Warehouse: diferencias, usos y cómo se complementan en la era del dato

octubre 23, 2025 Por Daniel Rodríguez

Documentar tu API de Express con TypeScript usando OpenAPI (Swagger)

octubre 21, 2025 Por Daniel Rodríguez

Curiosidad: El sesgo de supervivencia, o por qué prestar atención sólo a los que “llegaron” puede engañarte

octubre 16, 2025 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Entendiendo la validación cruzada: Selección de la profundidad óptima en un árbol de decisión publicado el septiembre 13, 2024 | en Ciencia de datos
  • Buscar en Excel con dos o más criterios publicado el septiembre 7, 2022 | en Herramientas
  • Aprovecha un 40% de descuento en Coursera Plus para impulsar tus habilidades en Ciencia de Datos e Inteligencia Artificial publicado el noviembre 9, 2024 | en Noticias, Reseñas
  • Diferencias entre CPU, GPU, TPU y NPU publicado el abril 19, 2023 | en Herramientas
  • La Lotería: una perspectiva estadística publicado el diciembre 22, 2023 | en Opinión

Publicidad

Lo mejor valorado

4.9 (24)

Seleccionar filas y columnas en Pandas con iloc y loc

4.6 (16)

Archivos JSON con Python: lectura y escritura

4.4 (14)

Ordenación de diccionarios en Python mediante clave o valor

4.7 (13)

Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas

4.5 (10)

Diferencias entre var y let en JavaScript

Publicidad

Comentarios recientes

  • Daniel Rodríguez en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • Pepe en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • CARLOS ARETURO BELLO CACERES en Justicio: La herramienta gratuita de IA para consultas legales
  • Piera en Ecuaciones multilínea en Markdown
  • Daniel Rodríguez en Tutorial de Mypy para Principiantes

Publicidad


Footer

Analytics Lane

  • Acerca de Analytics Lane
  • Boletín de noticias
  • Contacto
  • Libros
  • Lo más popular
  • Noticias
  • Tienda
  • Tiendas afiliadas

Secciones

  • Ciencia de datos
  • Criptografía
  • Herramientas
  • Machine Learning
  • Opinión
  • Productividad
  • Programación
  • Reseñas

Sobre de Analytics Lane

En Analytics Lane tratamos de explicar los principales conceptos de la ciencia e ingeniería de datos con un enfoque práctico. Los principales temas tratados son ciencia de datos, ingeniería de datos, inteligencia artificial, machine learning, deep learning y criptografía. Además, también se habla de los principales lenguajes de programación y herramientas utilizadas por los científicos e ingenieros de datos.

Copyright © 2018-2025 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto