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

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

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

答案1

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

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

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

多年来,哈希算法不断得到改进。最大的跳跃是Poul-Henning Kamp 基于 MD5 的算法1994 年,它用一种设计更好的算法取代了基于 DES 的算法。它取消了 8 个密码字符和 2 个盐字符的限制,并增加了速度。看IEEE 的使用开源软件进行开发、 1 月至 2 月2004 年,第 17 页。 7–8。基于 SHA-2 的算法是当今事实上的标准,它基于相同的原理,但内部设计稍好一些,最重要的是,可配置的慢速因子。

答案2

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

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

根据多个消息来源,UNIX 版本 3 于1973 年 2 月

汤普森和莫里斯的原始论文,我们可以确认最初使用的是明文存储:

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

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

答案3

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

密码阴影首次出现在 Unix 系统中,随着 20 世纪 80 年代中期 SunOS 的发展,[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 发行版中。

相关内容