¿Es posible obtener el Salt si tengo el hash y la contraseña original?
Mi intuición es no, pero ¿sería imposible o solo tomaría mucho tiempo?
No estoy realmente seguro de por qué querría encontrar la sal, ya que generalmente la sal no se considera secreta. Básicamente, en su caso, la sal es esencialmente la contraseña, ya que no sabe qué es y la contraseña es su sal (dejemos de lado la semántica, ya que la contraseña probablemente no será única a nivel mundial) ya que no es secreta.
El estándar PBKDF2 establece que se deben usar al menos 64 bits. Sin embargo, Thomas Pornin declara que:
Las sales deben ser únicas; Ese es su único trabajo. Debieras esforzarse, en la medida de lo posible, por nunca reutilizar un valor de sal; la la reutilización ocasional rara vez es crítica, pero aún así debe evitarse). Con esquemas de contraseña razonablemente diseñados, no hay otro útil propiedad en sales además de singularidad; Puedes elegirlos como quieras desea siempre que no reproduzcas exactamente la misma secuencia de bits. La singularidad debe ser entendida en todo el mundo.
Una forma común de tener más o menos valores de sal únicos es generar Al azar, con un buen generador (por ejemplo, uno que sea apto para Usos criptográficos, como / dev / urandom). Si la sal es suficientemente larga, Los riesgos de colisiones (es decir, reutilizar un valor de sal) son bajos. Si utiliza sales de n bits, las posibilidades de colisión se vuelven insignificantes una vez que alcanzar unos 2 valores generados n / 2 . Hay alrededor de 7 billones de personas. en este planeta, y parece seguro asumir que ellos, en promedio, poseen menos de 1000 contraseñas cada una, por lo que el número mundial de hash las contraseñas deben ser algo inferiores a 2 42.7 . Por lo tanto, 86 bits de La sal debería ser suficiente. Ya que nos gusta la llamada "seguridad". márgenes ", y, además, ya que los programadores aman los poderes de dos, vamos a 128 bits. Según el análisis anterior, eso es más que suficiente para asegurar la singularidad mundial con una probabilidad suficientemente alta, y no hay nada más que queramos de la sal que la singularidad.
Tenga en cuenta que también dependerá de su algoritmo de hash de contraseña, actualmente hay tres algoritmos de hashing de contraseña aceptados que se consideran seguros:
Estos son algoritmos bastante lentos, lo que hace que sea menos factible la fuerza bruta de la sal. Ahora, si su sal es de 64 bits y su algoritmo es lento, no es realmente posible. Digamos que tienes una sal de 64 bits:
((2 64 ) * t) / 2
Donde t es la cantidad de tiempo que se tarda en calcular un solo hash y dividido por dos como estadístico, probablemente lo encontrará después de haber hecho la mitad de los hashes. Independientemente de decir que es MUCHO tiempo.
Por lo tanto, dependerá en gran medida de la longitud de la sal y del algoritmo utilizado, en la medida en que sea factible en realidad es la fuerza bruta de una sal si no la conoces.
Suponiendo que conoce la función de hash y el método utilizado para generar el hash a partir de la contraseña y sal, es posible descubrir el salt si tiene la contraseña original y el hash final. Usaría la fuerza bruta, no hay una forma inteligente o rápida de hacerlo.
En su escenario típico, su hash se genera con 1) hashing de la contraseña, luego 2) combinándola con el salt y luego 3) hashing la combinación de hash y salt de la contraseña. Si sabes 1) y 3) y sabes la longitud de la sal, puedes probar cada combinación de la sal faltante hasta que la encuentres. Esto tomaría una gran cantidad de tiempo y potencia de computación.
No puedo pensar en un escenario en el que valga la pena descubrir la sal. Se supone que las sales solo deben usarse una vez, y usted no tiene que protegerlas. Hay muchos escenarios en los que la sal se envía a través de canales no cifrados, por lo que es probable que no necesite descubrirla de todos modos, si puede obtener el hash final, probablemente ya tenga la sal. Incluso si alguien implementara un sistema criptográfico que usara un sal estático (¡una mala idea!), No tendría que forzarlo bruscamente, ya que probablemente pueda obtenerlo por otros medios.
Lea otras preguntas en las etiquetas passwords