es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Encriptar o hacer hash de un número de teléfono en Laravel.

Hemos desarrollado una aplicación móvil que utiliza el número de teléfono móvil y la OTP para la autenticación. Dado que el número de teléfono es parte de la información sensible del usuario, tenemos que encriptarlo o cifrarlo para reducir el riesgo de exposición de los datos sensibles de los usuarios en caso de filtración.

Cuando un usuario inicia sesión, después de la OTP, tengo que extraer la información del usuario de la base de datos y para ello, tengo que ejecutar una consulta para buscar los teléfonos de los usuarios en la base de datos. La encriptación funciona bien, ya que puedo descifrar el teléfono y luego compararlo con el número de teléfono de inicio de sesión. Sin embargo, debido al gran número de usuarios, esto es más lento.

Otra opción para mí es cifrar los números de teléfono. entonces puedo cifrar el número de teléfono de inicio de sesión con el número de teléfono cifrado en la base de datos. Sin embargo, dado que el mismo número de teléfono no generará el mismo cifrado, no es posible hacer la comparación.

Otra forma es utilizar la función de comprobación de Hash, pero eso solo puede utilizarse cuando se tiene un único valor del teléfono de inicio de sesión frente a una única fila obtenida de la base de datos.

Me gustaría saber si la coincidencia de hashes se puede utilizar en la consulta de Laravel para comprobar si los números de teléfono cifrados de los usuarios coinciden con los números de teléfono cifrados en la base de datos.

Agradecería que alguien me pueda dar una solución para esto.

Saludos.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en mysql, laravel, encriptación, hash y autenticación de laravel, existen varias formas diferentes de abordar este problema. Aquí tienes algunas opciones que podrías considerar:

    Opción 1: Indexación

    La encriptación de los números de teléfono puede aumentar la seguridad, pero como has señalado, también puede ralentizar las consultas. Una solución potencial para esto es utilizar la indexación para acelerar las búsquedas. En particular, podrías considerar crear un índice en la columna phone de tu tabla users. Esto podría ayudar a mejorar la velocidad de las búsquedas, incluso con números de teléfono encriptados.

    Por supuesto, la indexación no es una solución milagrosa y existen algunos inconvenientes potenciales a considerar. Por ejemplo, la indexación puede aumentar el tamaño de tu base de datos, por lo que debes asegurarte de supervisar el espacio en disco. Además, la indexación no siempre funciona perfectamente para campos de texto como los números de teléfono, por lo que es posible que aún tengas algunos problemas de rendimiento. No obstante, esto podría ser un buen punto de partida a considerar.

    Opción 2: Hashing

    Otro enfoque que podrías considerar es guardar los números de teléfono como hashes en lugar de encriptarlos. El hashing tiene la ventaja de ser unidireccional, lo que significa que no se puede obtener el número de teléfono original a partir del hash. Dicho esto, como has señalado, esto puede dificultar la comparación de dos números de teléfono en formato hashed.

    Una forma de solucionar esto es utilizar una técnica llamada “salting”. Básicamente, añadirías una cadena aleatoria de caracteres (llamada “salt”) a cada número de teléfono antes de hacerle el hash. Este salt sería único para cada usuario, lo que significa que incluso si dos usuarios tienen el mismo número de teléfono, tendrían distintos salts y, por lo tanto, distintos hashes. Al comparar los números de teléfono durante la autenticación, simplemente añadirías el salt al número de teléfono de inicio de sesión y harías el hash del resultado.

    Este enfoque puede ser más seguro que la encriptación porque no hay forma de obtener el número de teléfono original a partir del hash. Sin embargo, puede que siga siendo más lento que las búsquedas sin hash, y deberás asegurarte de manejar correctamente los salts para evitar vulnerabilidades de seguridad.

    Opción 3: Técnicas avanzadas de indexación

    Por último, vale la pena mencionar que existen algunas técnicas avanzadas de indexación que pueden ayudar con las búsquedas en datos encriptados o en formato hashed. Por ejemplo, podrías considerar utilizar filtros de Bloom, que son estructuras de datos probabilísticas que pueden comprobar rápidamente si un valor puede estar en un conjunto. Los filtros de Bloom se pueden utilizar para prefiltrar coincidencias potenciales antes de realizar búsquedas más computacionalmente costosas, lo que puede ayudar a acelerar las consultas.

    Alternativamente, podrías explorar el uso de motores de búsqueda como Elasticsearch o Solr para gestionar las consultas de búsqueda. Estas herramientas están diseñadas para manejar búsquedas a gran escala de forma eficiente, incluso en datos encriptados o en formato hashed. Sin embargo, pueden ser más complejas de configurar y gestionar que las bases de datos tradicionales, por lo que debes asegurarte de contar con los conocimientos y recursos necesarios.

    En general, existen varias opciones diferentes a considerar cuando se trata de buscar datos encriptados o en formato hashed. El mejor enfoque dependerá de tu caso de uso específico y de los requisitos de rendimiento, por lo que vale la pena experimentar con diferentes técnicas para encontrar lo que funcione mejor para ti.

Comments are closed.