Unix 何时停止以明文形式存储密码?

ZDO*_*OSA 37 password history shadow passwd

Unix 何时不再将明文密码存储在 passwd 中?另外,影子文件是什么时候引入的?

Gil*_*il' 61

有关 Unix 密码存储的早期历史,请阅读 Robert Morris 和 Ken Thompson 的Password Security: A Case History。他们解释了早期 Unix 系统为什么以及如何获得今天仍然被视为密码存储的重要功能(但做得更好)的大部分功能。

  • 第一个 Unix 系统以明文形式存储密码。Unix 第三版引入了crypt对密码进行散列的函数。它被描述为“加密”而不是“散列”,因为现代加密术语还没有建立,它使用了加密算法,尽管以非常规的方式。他们不是使用密钥加密密码,当您拥有密钥(必须存储在系统上)时,这将很容易撤消,而是使用密码作为密钥。
  • 当 Unix 从较早的密码切换到当时的现代DES 时,它也因多次迭代 DES 而变慢。我不知道那是什么时候发生的:V6?V7?
  • 仅仅对密码进行散列就容易受到多目标攻击:一劳永逸地散列所有最常见的密码,并在密码表中查找匹配项。在散列机制中包含一个盐,其中每个帐户都有一个唯一的盐,会破坏这种预先计算。Unix在 1979 年的第七版中获得了一种盐。
  • Unix 还获得了密码复杂性规则,例如 1970 年代的最小长度。

最初,密码哈希位于可公开读取的文件中/etc/passwd。将散列放在一个/etc/shadow只有系统(和系统管理员)才能访问的单独文件中是 Sun 的众多创新之一,其历史可以追溯到 1980 年代中期的 SunOS 4。它逐渐扩展到其他 Unix 变体(部分通过第三方影子套件,其后代今天仍在 Linux 上使用)并且直到 1990 年代中期左右才在任何地方可用。

多年来,散列算法得到了改进。最大的飞跃是1994 年Poul-Henning Kamp 的基于 MD5 的算法,它将基于 DES 的算法替换为一个设计更好的算法。它取消了对 8 个密码字符和 2 个盐字符的限制,并增加了速度。请参阅IEEE使用开源软件进行开发,1 月至 2 月。2004,第。7–8。今天作为事实上的标准的基于 SHA-2 的算法基于相同的原理,但内部设计稍好一些,最重要的是,一个可配置的慢度因子。


Roy*_*ams 8

我还没有主要来源,但根据这个 TrustedSec 帖子(强调我的):

早期的系统以明文形式存储密码,但最终这被更安全的密码存储形式所取代。Robert Morris 基于 m-209 密码机开发了 crypt,它出现在第 3 版 Unix 中,尽管直到第 6 版 Unix(1974 年)才使用 Crypt 来存储密码。

根据多个消息来源,第 3 版 UNIX 于1973 年 2 月发布。

Thompson 和 Morris 的原始论文中,我们可以确认最初使用的是纯文本存储:

UNIX 系统首先使用一个包含所有用户的实际密码的密码文件来实现,因此必须对密码文件进行严格的保护以防止被读取或写入。

如其他答案中所述,/etc/shadow 出现在 UNIX 的多个分支中。


小智 6

根据维基百科密码页面中的历史部分,

随着 1980 年代中期 SunOS 的发展,密码影子首先出现在 Unix 系统中,[10] 1988 年的 System V Release 3.2 和 1990 年的 BSD4.3 Reno。但是,从早期 UNIX 版本执行移植的供应商并不总是包括其版本中的新密码隐藏功能使这些系统的用户面临密码文件攻击。

系统管理员还可以安排将密码存储在分布式数据库(如 NIS 和 LDAP)中,而不是每个连接系统上的文件中。在 NIS 的情况下,NIS 服务器上仍然经常使用影子密码机制;在其他分布式机制中,访问各种用户身份验证组件的问题由底层数据存储库的安全机制处理。

1987 年,Shadow Password Suite 原版的作者 Julie Haugh 经历了一次计算机入侵,并编写了 Shadow Suite 的初始版本,其中包含 login、passwd 和 su 命令。最初为 SCO Xenix 操作系统编写的版本很快被移植到其他平台。Shadow Suite 于 1992 年在 Linux 项目最初宣布一年后移植到 Linux,并包含在许多早期发行版中,并且继续包含在许多当前的 Linux 发行版中。

  • 非影子密码存储!= 未散列的明文存储。 (5认同)