GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuál es la longitud máxima de la contraseña en el sistema Unix/Linux?

Si su sistema utiliza un hash criptográfico para almacenar contraseñas, es decir, MD5, SHA1, etc., entonces no hay límite para la longitud de la contraseña, ya que estos hash se pueden crear con cualquier cantidad de datos. Se puede crear un hash MD5 o SHA1 para un disco duro completo y esto se hace comúnmente con fines forenses porque si se cambia un solo bit, entonces tiene un hash muy diferente y, por lo tanto, puede verificar que los datos han cambiado. Esto significa que puede usar exactamente estos mismos algoritmos para probar si los datos han sido manipulados. Linux (al menos el Linux actual) usa estas mismas funciones hash. Le pedirá una contraseña y luego creará un hash criptográfico de la contraseña que proporcionó y verá si este hash coincide con la contraseña almacenada. Esto también significa que sus contraseñas no se almacenan en texto sin formato y la única forma de recuperar una contraseña perdida es ejecutar una prueba de fuerza bruta que genera un hash de contraseña tras hash de contraseña hasta que encuentra uno que coincide con el hash actual y luego tiene su contraseña.

Hay una pequeña desventaja en el uso de estos hash, que es que un hash tiene un tamaño finito, por ejemplo, un hash MD5 es de 128 bits. Esto significa que un hash MD5 solo tiene 2^128 o 340,282,366,920,938,463,463,374,607,431,768,211,456 posibles combinaciones. Ahora, si bien ese es un número grande, lo que esto significa es que puede tener lo que ellos llaman una colisión de hash donde tiene dos elementos o claves diferentes que producen el mismo hash. En teoría, cuanto mayor sea el tamaño de la clave, menor será la probabilidad de una colisión y más tiempo debería tomar forzar una contraseña, pero eso es estrictamente evaluar la entropía y cuánto tiempo PUEDE tomar, pero también existe la posibilidad de que la primera entrada que intenten sea la que coincida, incluso si se trata de una colisión hash. En términos generales, realmente está más seguro usando un hash que tiene un tamaño de clave más grande porque, supongamos que esto es MD5, las probabilidades de que la primera contraseña coincida con 340,282,366,920,938,463,463,374,607,431,768,211,456 posibles coincidencias es extremadamente extremadamente improbable. También elija una buena contraseña porque muchos crackers intentarán usar listas de palabras, listas de nombres y mutaciones de estas listas (es decir, si la palabra es "pez", intentarán fish1234 , [email protected]#$ etc.) antes de que confíen en la fuerza bruta de una contraseña.

La forma en que puede saber si su sistema usa hashes criptográficos para almacenar contraseñas es mirar el /etc/shadow archivo (suponiendo que tenga acceso de root). Cada línea tiene el formato user:password:last-changed:minimum-age:maximum-age:warning-period:inactivity-period:expiration-date:reserved . El campo de contraseña puede comenzar con $num$ (es decir, un hash md5 en el campo de contraseña parece $1$01234567$b5lh2mHyD2PdJjFfALlEz1 donde comienza con $1$ ). Si comienza con esto, significa que su sistema está utilizando un hash criptográfico. El formato del campo de contraseña en todos los sistemas modernos es $id$salt$hash . La identificación especifica qué tipo de hash criptográfico está utilizando. La sal es una cadena generada aleatoriamente que se concatena con la clave (contraseña de texto sin formato) para proteger contra tablas precalculadas de hashes conocidos. El hash es el hash criptográfico creado a partir de la sal y la clave/contraseña. Si el campo de su contraseña comienza con $num$ entonces estás usando hashes criptográficos.

Así que ya sabes, los números significan esto:

  • $1$ significa que está usando MD5
  • $2$ o $2a$ significa que estás usando pez globo
  • $5$ significa que está utilizando SHA-256
  • $6$ significa que está utilizando SHA-512

SHA-512 es el mejor hash disponible para usar que ofrece glibc. No sé qué tan fuerte es el pez globo, pero no es parte de glibc y, por lo tanto, solo está disponible en ciertas distribuciones que lo han agregado. SHA-512 produce claves de 512 bits o 2^512 combinaciones posibles antes de que se pueda esperar una colisión y con una contraseña lo suficientemente compleja, le llevaría mucho tiempo a un grupo de computadoras encontrar la contraseña real o una colisión en el hash .

Además, si tiene un hash que no comienza con $num$ entonces está utilizando DES y eso está limitado a 8 caracteres. Creo que los sistemas más antiguos que usan DES, o al menos algunos de ellos, tomarán cualquier tamaño de contraseña pero solo usarán los primeros 8 caracteres. Esto significa que si establece su contraseña en mybigbigapple y alguien usa la contraseña mybigbigcity entonces se les permitirá entrar porque DES solo usará mybigbig y cualquier cosa después de eso se descarta.

Entonces, ya sabes, Ubuntu a partir de 8.04, que se lanzó en abril de 2008, usaba hashes MD5. Ubuntu desde 8.10, que se lanzó en octubre de 2008, y todas las versiones desde entonces usan hash SHA-512. No sé cuánto tiempo antes de abril de 2008, pero creo que durante varios años, si no más, la mayoría de las distribuciones usaban hashes.

Las versiones 12.04 y 14.04 LTS (versiones de soporte a largo plazo) actuales de Ubuntu parecen usar SHA-512 de forma predeterminada, como se puede ver con el $6$ antepuesto al hash en el archivo /etc/shadow:

catullus:$6$MsHYK60sqcv$BtDqVCMXibpqg[...]

Ahora, la longitud de la clave o contraseña permitida para cualquier algoritmo hash no es lo único que determina qué tamaño de contraseña puede tener. El otro elemento de interés es cómo se escribe el programa y qué longitud soportará el propio programa. Todos los programas passwd modernos y probablemente la mayoría de los crypt(3) función en Linux. crypt durante mucho tiempo (desde que se usó al menos MD5 y probablemente antes de eso) ha permitido punteros de caracteres para la clave real. Esto significa que el único límite en la duración de una clave que aceptará se basa en la cantidad de RAM que el programa tiene disponible, pero con toda probabilidad, esto es probablemente mucho, mucho más largo que cualquier contraseña que cualquier persona pueda recordar. (¿millones de caracteres?).

Esto debería responder a su pregunta sobre cuánto tiempo puede durar una contraseña. Espero haber ayudado.

Referencias:

  • página de manual de crypt(3) (Ubuntu 14.04)

  • SHADOW(5) página del manual (Ubuntu 14.04)

  • en.wikipedia.org/wiki/Crypt_(Unix)

  • en.wikipedia.org/wiki/Contraseña_fortaleza

  • en.wikipedia.org/wiki/Md5

  • en.wikipedia.org/wiki/Blowfish_(cifrado)

  • en.wikipedia.org/wiki/SHA-1


Depende de qué módulo de autenticación se utilice. En los sistemas Linux modernos, no existe un límite máximo en la longitud de la contraseña. Algunos sistemas obsoletos pueden tener límites impuestos por su sistema de almacenamiento de contraseñas; los máximos populares parecen ser 8, 40 y 255.


Dependiendo de cómo se almacene la contraseña, MD5, SHA1, BlowFish, etc., creo que no hay límite en la contraseña establecida por el método de almacenamiento en sí.

Las implementaciones más antiguas pueden tener un límite que probablemente sea de 8 o 255 caracteres.

Sin embargo, esta parece una pregunta más adecuada para www.serverfault.com :)


Linux
  1. Linux vs Unix:¿Cuál es la diferencia?

  2. ¿Cuál es el nivel de ejecución actual del sistema Linux?

  3. ¿Cuál es el equivalente Unix/Linux de E/S registrada?

  4. ¿Cuál es la diferencia entre una llamada de biblioteca y una llamada de sistema en Linux?

  5. ¿Cuál es el tamaño de una escritura atómica en el disco en mi sistema?

Introducción al sistema de archivos de Linux

¿Qué es el Shell en Linux?

¿Cuál es la diferencia entre Linux y Unix?

¿Qué es el comando matar en Linux?

¿Cuál es la contraseña predeterminada de la pantalla?

¿Cuál es la diferencia entre Unix, Linux, BSD y GNU?