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

27

¿Cuál es la longitud máxima permitida de contraseña en el sistema unix / linux?

hari
fuente
20
Si la respuesta no es 42, debería serlo.
tvanfosson
una mejor pregunta podría ser: ¿qué puedo esperar razonablemente que alguien escriba? Si el límite es 40 y está excediendo eso, está haciendo algo mal.
msw

Respuestas:

39

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 incluso un bit se cambia muy ligeramente, entonces tiene un hash muy diferente y, por lo tanto, puede verificar que los datos hayan cambiado. Esto significa que puede usar estos mismos algoritmos para probar si los datos han sido alterados. Linux (Linux actual al menos) 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.

Hay un pequeño inconveniente 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^128o 340,282,366,920,938,463,463,374,607,431,768,211,456posibles combinaciones. Ahora, si bien es un gran número, 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 se necesitará para forzar una contraseña por fuerza bruta, pero eso es evaluar estrictamente la entropía y cuánto tiempo PUEDEpero también existe la posibilidad de que la primera entrada que prueben sea la que coincida, incluso si se trata de una colisión hash. En términos generales, realmente es más seguro usar un hash que tiene un tamaño de clave más grande porque, supongamos que es MD5, las probabilidades de que la primera contraseña coincida con las 340,282,366,920,938,463,463,374,607,431,768,211,456posibles coincidencias es 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, fish!@#$etc.) antes de confiar en que la fuerza bruta forzará una contraseña.

La forma en que puede saber si su sistema usa hashes criptográficos para almacenar contraseñas es echar un vistazo al /etc/shadowarchivo (suponiendo que tenga acceso de root). Cada línea está formateada como 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 se parece a $1$01234567$b5lh2mHyD2PdJjFfALlEz1donde comienza $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 su campo de contraseña comienza con$num$ entonces estás usando hashes criptográficos.

Entonces, los números significan esto:

  • $1$ significa que estás 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, tomaría un grupo de computadoras mucho tiempo encontrar la contraseña real o una colisión en el hash .

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

Así que ya sabes, Ubuntu a partir de 8.04, que se lanzó en abril de 2008, utilizaba hash MD5. Ubuntu de 8.10, que se lanzó en octubre de 2008, y todas las versiones desde entonces usan hash SHA-512. No sé qué tan lejos antes de abril de 2008, pero creo que durante varios años, si no más, la mayoría de las distribuciones utilizaron 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 que permite la clave o contraseña para cualquier algoritmo de hash no es lo único que determina qué tamaño de contraseña se le permite tener. El otro elemento de interés es cómo se escribe el programa y qué duración del programa será compatible. Todos los programas passwd modernos y probablemente la mayoría de las crypt(3)funciones en Linux. La cripta durante mucho tiempo (ya que se usó al menos MD5 y probablemente antes) ha permitido punteros de caracteres para la clave real. Esto significa que el único límite de cuánto tiempo aceptará una clave se basa en la cantidad de RAM que ese programa tiene disponible, pero con toda probabilidad, esto es probablemente mucho más tiempo que cualquier contraseña que cualquier persona pueda recordar (¿millones de personajes?)

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

Referencias

Jetole
fuente
77
"¿Cuál es la longitud máxima de una respuesta SU?" jajaja Gran respuesta!
James Mertz
1
Cabe señalar que el algoritmo crypt () ha quedado en desuso durante más de una década. No importa cuánto tiempo sea una contraseña crypt (), se trunca a 8 caracteres. Combinado con el espacio de teclas muy pequeño de una sal de 12 bits, crypt () se ha vuelto completamente inseguro. Como referencia, aquí hay un artículo sobre cómo se expusieron 1 millón de contraseñas de Gawker debido al uso de crypt () en 2010: https://www.lightbluetouchpaper.org/2010/12/15/the-gawker-hack- how-a-million-passwords-were-lost /
cremefraiche
8

Depende de qué módulo de autenticación se use. En los sistemas Linux modernos, no hay 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.

John Millikin
fuente
3

Dependiendo de cómo se almacena 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 :)

Kelsey
fuente
55
¡Esto está relacionado con la computadora en general, no necesariamente específico para los servidores!
Darth Android
0

El comando passwd involucra el comando mcrypt para el cifrado. Según el código fuente de mcrypt, el tamaño máximo de stdin está restringido a 512 caracteres (cifrados), pero esto fue hace dos años ... - (Actualizaré esta respuesta las próximas horas) ... Sí ... En el código fuente 2.6.8 de mcrypt en el directorio src, hay un archivo getpass.c: allí al principio, verá el valor 512 establecido como valor de carácter estático. (Me encantaría bombearlo hasta 1.4 GB ...):

dschinn1001
fuente