• 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
    • Estadística
      • Calculadora del Tamaño Muestral en Encuestas
      • Calculadora de estadísticos descriptivos
      • Test de normalidad
      • Calculadora de contrastes de hipotesis
      • Calculadora de tamano del efecto
      • Simulador de Regresión Lineal con Ruido
      • Visualizador de PCA
      • Visualizador de Series Temporales
      • Simulador de Regresión Logística
      • Simulador de K-Means
      • Simulador de DBSCAN
      • Detector de la Ley de Benford
    • Probabilidad
      • Calculadora de Probabilidad de Distribuciones
      • Calculadora de Probabilidades de Lotería
      • Simulador del Problema de Monty Hall
      • Simulador de la Estrategia Martingala
    • Finanzas
      • Calculadora de Préstamos e Hipotecas
      • Conversor TIN ↔ TAE
      • Calculadora DCA con ajuste por inflación
      • Calculadora XIRR con Flujos Irregulares
      • Simulador FIRE (Financial Independence, Retire Early)
    • Herramientas
      • Formateador / Minificador de JSON
      • Conversor CSV ↔ JSON
      • Comparador y Formateador de Texto y JSON
      • Formateador y Tester de Expresiones Regulares
      • Inspector de JWT
      • Generador y verificador de hashes
      • Codificador / Decodificador Base64 y URL
      • Conversor de bases numericas
      • Conversor de Timestamp Unix
      • Conversor de colores
      • Generador de UUIDs
    • Juegos
      • Tres en Raya
      • Nim con Q-Learning
    • Más
      • Método D’Hondt
      • Generador de Contraseñas Seguras
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad

Analytics Lane

Ciencia e ingeniería de datos aplicada

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

¿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.

Nueva calculadora de distribuciones de probabilidad en el laboratorio de Analytics Lane
En Analytics Lane
Nueva calculadora de distribuciones de probabilidad en el laboratorio de Analytics Lane

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.

Publicidad


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.

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.

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 

Publicidad


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.

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

  • Nueva calculadora de distribuciones de probabilidad en el laboratorio de Analytics Lane
  • Analytics Lane lanza un nuevo Formateador y Tester de Expresiones Regulares para desarrolladores
  • Analytics Lane lanza su Visualizador de Series Temporales: entiende tendencia, estacionalidad y ruido de forma visual e interactiva
  • Analytics Lane lanza su Conversor de Bases Numéricas: entiende cómo trabajan los ordenadores a nivel de bits
  • Analytics Lane lanza su Conversor TIN ↔ TAE: la herramienta definitiva para entender el coste real de depósitos, préstamos e hipotecas
  • 1200 publicaciones en Analytics Lane
  • El mayor riesgo de la inteligencia artificial conversacional: cuando la IA confirma lo que ya pensabas – Conversar con una inteligencia artificial – Parte III
  • Analytics Lane lanza su Generador de UUIDs: identificadores únicos, seguros y listos para producción en segundos
  • Conversor de Colores: convierte, compara y valida cualquier color en tiempo real

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

Analytics Lane lanza un nuevo Formateador y Tester de Expresiones Regulares para desarrolladores

abril 30, 2026 Por Daniel Rodríguez

Analytics Lane lanza su Visualizador de Series Temporales: entiende tendencia, estacionalidad y ruido de forma visual e interactiva

abril 30, 2026 Por Daniel Rodríguez

Analytics Lane lanza su Conversor de Bases Numéricas: entiende cómo trabajan los ordenadores a nivel de bits

abril 29, 2026 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Método del codo (Elbow method) para seleccionar el número óptimo de clústeres en K-means publicado el junio 9, 2023 | en Ciencia de datos
  • Comparar archivos en Visual Studio Code publicado el enero 10, 2024 | en Herramientas
  • Fijar la semilla de números aleatorios en Python publicado el febrero 11, 2019 | en Python
  • Buscar en Excel con dos o más criterios publicado el septiembre 7, 2022 | en Herramientas
  • Analytics Lane lanza un nuevo Formateador y Tester de Expresiones Regulares para desarrolladores publicado el abril 30, 2026 | en Noticias

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.9 (11)

Pandas: Cambiar los tipos de datos en los DataFrames

Comentarios recientes

  • M. Pilar en Cómo eliminar las noticias en Windows 11 y recuperar tu concentración
  • 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

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-2026 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto