对于 SSH 身份验证,哪个更安全?
使用 USB 令牌/Google 身份验证器(基于时间)
或
带密码的公钥/私钥的 2 因素身份验证
或者它们可以同时使用吗?如果可能的话,使用这样的多因素身份验证有什么缺点吗?
此外,任何人都可以发布一个示例或链接来展示我如何在可能的情况下同时实现公钥和 2 Factor。谢谢!
对于 SSH 身份验证,哪个更安全?
使用 USB 令牌/Google 身份验证器(基于时间)
或
带密码的公钥/私钥的 2 因素身份验证
或者它们可以同时使用吗?如果可能的话,使用这样的多因素身份验证有什么缺点吗?
此外,任何人都可以发布一个示例或链接来展示我如何在可能的情况下同时实现公钥和 2 Factor。谢谢!
这不是“一个比另一个更好”的问题。两者都增加了攻击者闯入您系统的负担:
使用(和强制执行)密钥可以提高“密码质量”(“mypassword123”与“long_binary_asymetric_keypair_here”)。人类在记住具有良好熵的长密码短语方面非常糟糕。
使用 2Factor 身份验证可确保攻击者必须控制 2 个属性:一个密码机制(通常的密码,PK)和另一个(通常)与第一个不同的物理位置。使用 2Factor 模式,您尝试进行身份验证的系统将在您第一次质询成功后再次质询您。但是,如果这两个挑战都是愚蠢/简单/容易打破整个 2Factor 的事情是毫无意义的。
因此,两种机制相辅相成。
关于 2Factor 部分的好教程:
将它与任何其他解释如何使用 ssh-keys 的教程结合起来(互联网上有很多)。那么认证流程如下:
除了其他答案,我还可以补充说,如果您的私钥在智能卡(例如 OpenPGP 卡)上,则基于 pubkey 的身份验证本身可以是两个因素。根据我的经验,在 ssh 级别添加 google-authenticator 会使管理员的工作变得过于繁琐——每次需要 scp 时都必须输入代码。我首选的方法是在执行 sudo 时在 OpenPGP 卡和 google-authenticator 上使用 ssh 密钥。
这两个链接将对您有用:
维护双因素或公钥身份验证的麻烦程度与每个提供的安全程度之间的权衡取决于如何/谁使用它。如果使用的是有限数量的熟悉安全性的服务器系统管理员,这样他们就不会通过允许访问他们的访问(PC、笔记本电脑、移动设备)受到损害来污染任何一个进程,那么这些中的任何一个都可以证明安全的。
我读过的各种报告、文章和博客都表明,打败双因素身份验证或公钥加密的最常见方法是获得对不安全客户端访问的访问权限——一台打开或没有密码保护的 PC,用于获得 root 访问权限(或其他领域)。密码可以存储在设备上的密码管理器中,或者由网络浏览器自动输入,或者记在桌子上的纸上。
另一种妥协方式是在员工/员工离职后未更改密码和密钥。
大多数暴力破解、分布式暴力破解攻击和其他外部攻击都可以通过双因素或公钥认证方法有效地阻止。如果使用相当严格的密码并且需要密码加密的公钥访问(一种双因素身份验证本身),则可以改善这种情况。
可以使用其他方法,例如使用非标准 SSH 端口,尽管有反对该方法的有效论据。另一种方法是使用旋转/随机非标准端口或使用端口敲门,其中必须依次敲击/敲门三个或更多端口,然后才能授予选定 SSH 或其他端口的访问权限。端口爆震端口也可以周期性地旋转。
后一种方法通常不合理,因为在实施了双因素或/和公钥身份验证方法的组织内部发生安全漏洞的可能性要大得多。如果工作/服务器的性质需要最高级别的安全性,那么额外的安全层可能是有意义的。
昨晚又重看了2014年的电影《模仿游戏》。它是关于破解纳粹之谜加密机,需要在数亿个可能的手动选择中进行确定。密码被英国人 Alen Turing 的机电计算机破解,只是在他们在通信中重复出现可以猜到“希特勒万岁!”的术语后才被破解。和每日天气报告中的其他术语。这对描述 Linux 服务器和其他安全系统的安全性大有帮助——它们的安全性取决于使用它们的人的做法。