ZDOSA Asked: 2019-09-22 07:58:08 +0800 CST2019-09-22 07:58:08 +0800 CST 2019-09-22 07:58:08 +0800 CST Unix 何时停止以明文形式存储密码? 772 Unix 什么时候不再在 passwd 中存储明文密码?另外,影子文件是什么时候引入的? password 3 个回答 Voted Best Answer Gilles 'SO- stop being evil' 2019-09-22T10:07:57+08:002019-09-22T10:07:57+08:00 有关 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 的算法基于相同的原理,但内部设计稍好一些,最重要的是,具有可配置的慢速因素。 Royce Williams 2019-09-22T10:00:41+08:002019-09-22T10:00:41+08:00 我还没有主要来源,但根据这个 TrustedSec 帖子(强调我的): 早期系统以明文形式存储密码,但最终被更安全的密码存储形式所取代。Robert Morris 基于 m-209 密码机开发了 crypt,并出现在 Unix 版本 3 中,尽管 Crypt 直到 Unix 第六版(1974 年)才用于存储密码。 根据多个消息来源,版本 3 UNIX 于1973 年 2 月发布。 从Thompson 和 Morris 的原始论文中,我们可以确认最初使用的是明文存储: UNIX 系统最初是使用包含所有用户的实际密码的密码文件实现的,因此必须对密码文件进行严格的保护,以防被读取或写入。 /etc/shadow 出现在 UNIX 的多个分支中,如其他答案中所述。 VGe0rge 2019-09-22T08:19:28+08:002019-09-22T08:19:28+08:00 根据维基百科密码页面中的历史部分, 随着 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 经历了一次计算机入侵,并编写了包含 login、passwd 和 su 命令的 Shadow Suite 初始版本。为 SCO Xenix 操作系统编写的原始版本很快被移植到其他平台。Shadow Suite 于 1992 年在 Linux 项目最初宣布一年后移植到 Linux,并包含在许多早期发行版中,并且继续包含在许多当前 Linux 发行版中。
有关 Unix 密码存储的早期历史,请阅读 Robert Morris 和 Ken Thompson 的Password Security: A Case History。他们解释了早期 Unix 系统为什么以及如何获得今天仍然被视为密码存储的重要特性(但做得更好)的大部分特性。
crypt
散列密码的功能。它被描述为“加密”而不是“散列”,因为现代密码学术语尚未建立,并且它使用了加密算法,尽管是以非常规的方式。他们没有使用密钥加密密码,当您拥有密钥(必须存储在系统上)时,这将是微不足道的撤消,而是使用密码作为密钥。最初密码散列在公开可读的文件
/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 的算法基于相同的原理,但内部设计稍好一些,最重要的是,具有可配置的慢速因素。
我还没有主要来源,但根据这个 TrustedSec 帖子(强调我的):
根据多个消息来源,版本 3 UNIX 于1973 年 2 月发布。
从Thompson 和 Morris 的原始论文中,我们可以确认最初使用的是明文存储:
/etc/shadow 出现在 UNIX 的多个分支中,如其他答案中所述。
根据维基百科密码页面中的历史部分,