为什么输入的密码不可见?


39

下面是我在Linux的bash上创建用户的过程的图像。

在bash中创建用户并分配密码

我了解不应出于安全目的显示密码,但是我的意思是,为什么不出现星号(或输入的字符)?


4
每当您对Linux有疑问时,答案就是安全性。
卡兹(Katz)


IBM Notes做这件事很奇怪,在其中您输入密码的每个字符都会显示随机星号。非常混淆。

1
跨站点欺诈
2016年

Answers:


43

因为这就是我们在* nix土地上做事的方式。:) 通过不显示星号来提供一点额外的安全性。这样,看到您的屏幕的人就看不到您的密码长度。

但我必须承认,输入密码时,如果没有任何反馈,尤其是键盘输入不正确的情况,这有点令人恐惧。因此,* nix系统上的大多数GUI密码对话框确实会为您提供某种反馈,例如,使用星号或更常见的是⬤。甚至在您键入每个字符时都会显示每个字符,然后立即将其替换为a *或replace,但是如果有人看着您的肩膀,那就不好了。或者,如果他们的设备可以拾取和解码从计算机发送到显示器的视频信号。


5
...在stty -echo
Jeff Schaller

7
这个答案还不错,但是恕我直言,吉尔斯给出了真正的答案。几乎可以肯定的是,实现者并没有真正在考虑“一点点额外的安全性”,并且绝对没有在考虑用户体验。他们这样做的方式是一样的,因为这样做既便宜又容易。然后,后来,我们开始期望它会继续以这种方式工作……
Celada

2
@Celada:公平点。FWIW,我已经投票赞成Gilles的出色回答。
下午16年

2
@Celada增强的安全性可能不会导致最初决定不显示任何内容,但是我一直认为这样做是有好处的,并且可以看到其他人以这种方式认为可能提供了很好的理由来保持这种方式。
Monty Harder

1
我认为最后键入的字符的breif显示主要是一种移动方法,这可能是因为在较小的屏幕键盘上键入更容易出错。我认为我在桌面应用程序中从未见过它。
Barmar

82

隐藏用户输入的最简单方法是什么?

没有显示!

在输入密码时隐藏密码是一种古老的传统。在大多数情况下,从安全角度讲,这是有道理的:如果有人在您的肩膀上望着,您不想让您轻松查看输入内容。(一些现代安全准则,例如1 2 3 4 5确实建议您选择使密码可见,因为这使用户能够选择更复杂的密码,并确信他们不会花时间修复看不见的东西。错别字。最大的风险不是肩膀冲浪,而是蛮力猜测,可能是离线的。)

决定应该隐藏密码后,实现者必须决定如何进行操作。终端具有显示用户输入的模式(回显打开)和未显示用户输入的模式(回显关闭)。回声关闭模式在某种程度上具有固有的存在:在该模式下,终端不执行回声用户输入的额外工作。对于键入键不会插入该字符,而是调用绑定到该键的应用程序快捷方式的应用程序,还必须存在此模式。因此,诸如passwd在读取密码时将终端设置为回显模式的命令。

为每个字符打印星号仅需要相对较小的好处就需要额外的实现工作,而该passwd命令的实现者并不喜欢这样做。没有用于打印星号的终端模式,因为它是非常专业的功能,仅在输入密码时有用。

顺便说一句,如果您想在更改密码时看到密码,则可以使用cat | passwd(至少在某些系统上-某些版本的passwdrequire需要一个选项,例如cat | passwd --stdin,有些根本不接受此密码)。(您甚至可以这样做{ echo 'current password'; echo 'new password'; echo 'new password'; } | passwd,但不要这样做:这会将密码保存在shell历史记录中,这有很大的泄露风险。)使用从终端读取密码的命令(而不是其他任何命令)来安排这样做其标准输入(例如sudossh)更为复杂;如果您有可用的GUI,则可以使用ssh-askpass来显示输入的字符数(SUDO_ASKPASS=/usr/bin/ssh-askpass sudo -A对于sudo;对于ssh,当您从终端调用它时很复杂)。


1
到目前为止,这是imo的最佳答案,并且实际上非常有帮助。感谢您阐明我的信念并扩大^,^,值得投票!
DankyNanky

4
终端处理程序负责简单的编辑功能(例如退格键)和缓冲行。直到按下Enter键,使用fgets()读取的行才会返回。这样就使打印星号变得棘手。如果您一次要读取一个字符并回显星号,则会失去退格功能,或者需要额外的精力来支持它。
杰森

1
当从历史角度探讨这个问题时,我想知道这与tty实际指的是电传打字机的时间有何关系……
Jasper 2016年

1
有一些方法可以在不将命令存储在命令历史记录中的情况下执行该命令。请参见例如Execute命令,而不将其保留在历史记录中
CVn

2
附录:“做额外工作”以回应用户输入的终端是所谓的“全双工”终端。在“昔日时代”中,还存在“半双工”终端,在键入字符时,该字符立即由终端显示,并且操作系统没有将其发送回终端进行显示。如果我没记错的话,这些终端无法关闭回声。
亚历克西斯

3

使密码不可见使其更安全,因为其他人看不到密码的长度。这样可以避免他人尝试从密码长度猜测密码并登录到您的帐户的风险。


使用键盘时,往往会产生一些噪音,可以听到或记录下来,以便以后进行分析以确定密码长度。有些键盘型号比其他型号安静。而且,某些键会产生相对不同的噪音(请注意空格键,Enter等)。在这种情况下,还要考虑保持密码长度秘密有多重要?信息安全
CVn

@ MichaelKjörling:您所说的是高级安全性和需要考虑的有效点(特别是对于那些听觉确实很好的人,他们可以通过键盘的噪音获得密码长度)。但这是一个硬件问题,需要在硬件级别上加以考虑,因此,现在我们拥有不会产生噪音的触摸屏键盘。
编码器AP
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.