密码分发的最佳实践

信息安全 密码 密码管理
2021-09-03 22:21:06

我即将在我的 Linux 服务器上为居住在美国另一个州的用户设置一个新帐户

我想不出一个好方法让这个用户获得他们的密码。必须有一个标准机制,对吧?

4个回答

尽可能方便地以双向对话方式与他们交谈(亲自/电话/即时消息/电子邮件保存),并为他们提供必须在首次登录时重置的初始密码。

这通常通过chagelinux/unix 上的命令完成:

sudo chage -d 0 the_new_user

之后验证他们是否使用独立的方法获得了新帐户(例如,如果您之前给他们打电话;向他们发送电子邮件),因此如果您以某种方式受到社会工程(例如,他们的手机被盗或电子邮件被截获),就会有之后进行独立检查。在您验证它们之前,也不要给它们 root 或其他提升的权限。

编辑:初始密码应该是随机的;例如由计算机生成的 12 个随机字符。

EDIT2:如果两端的人都可以信任,那么减轻窃听者的攻击很简单。如果您可以自信地识别电话/视频会议/等另一端的人,请给他们一个一次性初始密码(然后他们必须重置),验证他们是否在其中,然后提升权限。如果它是一个网络应用程序,这个初始密码可以是电子邮件链接中的一个令牌(一次有效;在短时间内自动过期)。如果它是一个工作帐户,也许只让 webapp 从/向您的本地域(您已配置为使用 SSL)发送密码电子邮件。即使窃听者被截获,他们也必须先击败该人才能开始使用它(然后合法用户会遇到问题,从而将窃听者踢掉)。

棘手的问题是建立对远程第三方应该有权访问该帐户的信任。首先要验证您为该用户提供此帐户的原因?他们是需要接触新事物的知名同事/熟人吗?或者你的老板有没有说给你一封电子邮件说让 joe@something.com 访问服务器 X?您可以进行社会工程(有人通过电话假装老板/窃取老板的电子邮件)吗?这不是一项简单的任务。但是,亲自检查指令,或通过视频会议或电话可以降低命令被社会工程化的风险。当然,你的老板可能是社会工程——也许新人不应该被信任。

密钥分发是一个已经写了很多论文的主题,并且可能会。基本上,需要某种安全通道来发送密钥,但该安全通道尚不存在,这就是为什么首先需要密钥的原因。

强大的攻击者

对于这个答案,首先想象一个非常强大的攻击者,例如一个可以偷听、拦截和合成网络上任何消息的Dolev-Yao 攻击者。当然,这种攻击者的权力远比通常合理的多,但这也是普通安全研究的起点。我们稍后会降低门槛。

鉴于我们非常强大的攻击者,我们实际上需要一些自举的信任。例如,如果您有某种电子邮件加密方案,则可以使用它。想想 PGP 或 S/MIME。这仍然存在信任问题,但在第一种情况下,可以委托给基于他们的信任网络的知情决定,或者在第二种情况下,委托给证书颁发机构的决定(可能仅基于电子邮件验证)。换句话说,信任包含在现有结构之一中,我们可以根据对通常被认为受信任的第三方的假设做出决定。

如果您打算使用公钥加密,例如 SSH 密钥。你把问题转过来。现在,您不需要密钥的机密性,但您的用户需要能够在向您发送公钥时保持完整性。在电子邮件加密示例中,需要确保带有用于服务器的公钥的消息由您的员工签名(而不是正确加密,只供他阅读)。

因此,当机密性是您的问题时,请使用一些自举信任进行加密,例如由电子邮件加密工具(或类似工具提供),而当完整性是您的原因时,让您的员工使用自举信任签名。

仅在一个通道上强大的攻击者

更现实地说,攻击者只拥有一个或多个不安全通道的权力。换句话说,您假设在您的主通道一侧存在一个安全通道。此通道可用于发送理解主要消息或验证主要消息所需的附加信息。例如,您使用另一个密码加密密码并通过电子邮件发送。另一方面,您发送一条短信,其中包含解密密码所需的密码。这样,需要折衷两个通道。请注意,这可以是任意组合(邮政、电话、SMS、电子邮件、传真等),只要它们断开连接足以确定即可。因此,既能处理传入短信又能处理电子邮件的智能手机还不够好!

双通道方法可以在完整性情况下类似地使用,例如通过两个单独的通道发送公钥。这样,您需要相互验证这些结果。

结论性说明

还有许多其他方法,但我预计这会产生太高的负担,而不是太多的额外安全性,因为您仍在与人类打交道。

此外,在首次登录时直接要求更改密码的事情将是明智的补充。

最后,您会注意到这些都是信任问题,这是许多密码系统和其他安全方法的基础。你应该在偏执和幼稚之间找到适当的平衡,例如 SSL 和 S/MIME 使用的证书系统肯定不是很好,但通常发现它对于网上银行来说已经足够好了,所以当你不谈论核导弹时,它可能会做得很好。只要确保你也做一些合理的审计。

这可能有帮助,也可能没有帮助,但您也可以考虑允许他们仅通过 SSH 密钥进行身份验证:

https://help.ubuntu.com/community/SSH/OpenSSH/Keys

您仍然需要验证您接受的公钥是否来自您认为的用户(即,您没有被社会工程,如上所述),但是通过电子邮件发送更安全公钥而不是密码。(我这样说是因为公钥是用来分发的,而密码不是。将公钥“永远”留在邮件服务器/邮件客户端比密码更有害。)

为了实用,请通过普通邮件或信使进行安排。然后从您的手机 (SMS) 发送一条包含密码的短信。请收件人通过邮件或信使确认。正如 jimbob 博士所说,如果可能,请使密码过期,因此需要在首次登录时更改密码。