¿Por qué la contraseña que ingresé no está visible?

39

A continuación se muestra una imagen del proceso que tomé para crear un usuario en bash en Linux.

Crear usuario y asignar contraseña en bash

Entiendo que la contraseña no debe mostrarse por motivos de seguridad, pero lo que quiero decir es, ¿por qué no aparecen los asteriscos (o los caracteres que ingresé)?

Kaiylar
fuente
44
siempre que tenga una pregunta sobre Linux, la respuesta es la seguridad.
Katz
IBM Notes hace esta cosa extraña en la que muestra asteriscos aleatorios para cada carácter que escriba para una contraseña. Muy confuso.
1
también relacionado: security.stackexchange.com/q/35133/3945
wim

Respuestas:

43

Porque así es como hacemos las cosas en * nix land. :) Da un poco más de seguridad al no mostrar un montón de asteriscos. De esa manera, alguien que ve su pantalla no puede ver la longitud de su contraseña.

Pero debo admitir que da un poco de miedo no recibir comentarios cuando ingresas una contraseña, especialmente si tienes un teclado defectuoso. Por lo tanto, la mayoría de los diálogos de contraseña de la GUI en los sistemas * nix le brindan algún tipo de retroalimentación, por ejemplo, utilizando asteriscos, o más comúnmente ⬤. Y algunos incluso muestran cada carácter a medida que lo escribe, pero luego lo reemplazan inmediatamente con un *o ⬤, pero eso no es tan bueno si alguien puede mirar por encima del hombro. O si tienen un dispositivo que puede recoger y decodificar la señal de video que se envía desde su computadora a su monitor.

PM 2Ring
fuente
55
... con la ayuda destty -echo
Jeff Schaller
77
Esta respuesta no es mala, pero en mi humilde opinión, Gilles dio la respuesta real. Es casi seguro que los implementadores realmente no estaban pensando en "un poco de seguridad adicional" y definitivamente no estaban pensando en la experiencia del usuario. Lo hicieron como lo hicieron porque era barato y fácil hacerlo de esa manera. Luego, más tarde, llegamos a esperar que continuara funcionando de esa manera ...
Celada
2
@Celada: punto justo. FWIW, ya he votado por la excelente respuesta de Gilles.
PM 2Ring
2
@Celada La seguridad adicional puede no haber llevado a la decisión original de no mostrar nada, pero siempre lo he considerado un beneficio, y puedo ver cómo otros que piensan de esa manera pueden haber proporcionado una buena razón para mantenerlo de esa manera.
Monty Harder
1
Creo que la visualización breve del último carácter escrito es principalmente un enfoque móvil, probablemente porque escribir en un pequeño teclado en pantalla es más propenso a errores. No creo haberlo visto nunca en aplicaciones de escritorio.
Barmar
82

¿Cuál es la forma más simple de ocultar la entrada del usuario?

¡No lo estoy mostrando!

Ocultar las contraseñas cuando se escriben es una vieja tradición. Tiene sentido desde una perspectiva de seguridad en la mayoría de los contextos: si alguien está mirando por encima de tus hombros, no quieres que sea fácil ver lo que estás escribiendo. (Sin embargo, algunas pautas de seguridad modernas, p. Ej., 1 2 3 4 5 recomiendan tener una opción para hacer que la contraseña sea visible, ya que eso permite al usuario elegir contraseñas más complejas y tener la confianza de que no pasarán su tiempo reparando lo invisible) errores tipográficos: el mayor riesgo no es navegar por el hombro, es adivinar la fuerza bruta, posiblemente fuera de línea).

Habiendo decidido que la contraseña debería estar oculta, los implementadores tuvieron que decidir cómo hacerlo. El terminal tiene un modo donde se muestra la entrada del usuario (eco activado) y un modo donde no se muestra la entrada del usuario (eco desactivado). El modo de desactivación de eco tiene una existencia intrínseca en cierto modo: ese es el modo en el que el terminal no hace el trabajo adicional de repetir la entrada del usuario. Este modo también tiene que existir para aplicaciones en las que escribir una tecla no inserta ese carácter, sino que invoca algún acceso directo de aplicación que está vinculado a esa tecla. Entonces, comandos como passwdsimplemente configurar el terminal en modo de eco desactivado mientras leen una contraseña.

Imprimir asteriscos para cada personaje requeriría un trabajo de implementación adicional por un beneficio relativamente pequeño, que los implementadores del passwdcomando no han tenido ganas de hacer. No hay modo de terminal para imprimir asteriscos porque sería una característica muy especializada, útil solo al ingresar contraseñas.

Por cierto, si desea ver su contraseña al cambiarla, puede usarla cat | passwd(al menos en algunos sistemas; algunas versiones passwdrequieren una opción como cat | passwd --stdiny otras no la aceptan). (Incluso puedes hacerlo { echo 'current password'; echo 'new password'; echo 'new password'; } | passwd, pero no hagas eso: guardaría las contraseñas en el historial de shell, de las cuales hay mucho más riesgo de fugas.) Organizar eso con comandos que leen la contraseña desde el terminal en lugar de lo que sea su entrada estándar, como sudoo ssh, es más compleja; si tiene una GUI disponible, puede usar ssh-askpass que muestra cuántos caracteres ha escrito ( SUDO_ASKPASS=/usr/bin/ssh-askpass sudo -Apara sudo; para ssh es complicado cuando lo invoca desde un terminal).

Gilles 'SO- deja de ser malvado'
fuente
1
Esta es, de lejos, la mejor respuesta de la OMI y en realidad es muy útil. ¡Gracias por aclarar mi creencia y expandir ^, ^ merece votar!
DankyNanky
44
El controlador de terminal se encarga de las funciones de edición simples (como el retroceso) y el almacenamiento en búfer de la línea. Una línea leída usando fgets () no regresa hasta que se presiona enter. eso hace que la impresión de asteriscos sea difícil. Si lo leyera un carácter a la vez y repitiera asteriscos, perdería la funcionalidad de retroceso o necesitaría un esfuerzo adicional para admitirlo.
Jasen
1
Al entrar en el ángulo de la historia sobre este tema, me pregunto cómo se relaciona esto con el momento en que tty realmente se refirió al teletipo ...
Jasper
1
Hay formas de ejecutar un comando sin que se almacene en el historial de comandos. Consulte, por ejemplo, Ejecutar comando sin mantenerlo en el historial .
un CVn
2
Anexo: Los terminales que "hacen un trabajo extra" para hacer eco de la entrada del usuario son los llamados terminales "full duplex". En Ye Olde Days también había terminales "semidúplex", donde el carácter se mostraba de inmediato por el terminal al ser tecleado, y el sistema operativo no lo enviaba de vuelta al terminal para su visualización. Si no recuerdo mal, estos terminales no tenían forma de desactivar el eco.
alexis
3

Hacer que la contraseña sea invisible la hace más segura, ya que otros no pueden ver la longitud de la contraseña. Esto evita el riesgo de que otros intenten adivinar la contraseña a partir de su longitud e inicien sesión en su cuenta.

Codificador AP
fuente
Los teclados tienden a hacer una cierta cantidad de ruido a medida que se usan, que se pueden escuchar o grabar para un análisis posterior para determinar la longitud de la contraseña. Algunos modelos de teclado son más silenciosos que otros . Además, algunas teclas tienden a emitir ruidos relativamente distintos (piense en la barra espaciadora, Intro, etc.). En este contexto, considere también ¿Qué tan importante es mantener en secreto la longitud de su contraseña? en seguridad de la información .
un CVn
@ Michael Kjörling: Lo que dijiste es un nivel de seguridad avanzado y un punto válido a tener en cuenta (especialmente para aquellos cuyo poder auditivo es realmente bueno, que pueden obtener la longitud de la contraseña a través del ruido de los teclados). Pero es un problema de hardware, que debe considerarse a nivel de hardware y, como tal, ahora tenemos la facilidad de los teclados de pantalla táctil, que no crean ruido.
Codificador AP