网站管理员应该如何管理她所有的密码和密钥?

信息安全 Web应用程序 密码 应用安全
2021-08-13 11:27:13

我有几个私钥用于 ssh 到 AWS、dreamhost、github 等。我有所有这些私钥的密码,这些私钥太复杂而无法记住。我有我的应用程序和我都必须知道的 mysql 密码。

有什么方便和安全的方式来跟踪所有这些?我最初的想法是,使用所有这些信息加密和压缩一组文件并将其放在“云”(dropbox、gmail)上可能会很有用。我也可以把它放在我一直随身携带的 USB 棒上,但这太容易丢失了。有没有更好的办法?

更新 我使用 lastpass 作为密码,它很不错。我不确定如何处理私钥或 ssl 证书之类的东西。

4个回答

[披露:我为 1Password 的制造商 AgileBits 工作]

您已经提到使用密码管理器进行 Web 登录。但是对于 SSH 和 GPG/PGP 私钥之类的东西,您应该考虑使用密码管理器,它允许您将文件附加到特定项目并提供此数据的轻松同步。

加密文件系统。

另一个不使用密码管理器的选择是在一些便携式设备(USB 拇指驱动器)上拥有一个加密的文件系统。困难在于找到一种适合您的便携式格式。如果您只使用 OS X,则可以选择加密的 DMG,因为您可以在任何 Mac 上安装和解密它。我不知道 Windows 替代方案是什么。TrueCrypt 之类的东西可能是一种选择,但您还需要随身携带或安装 TrueCrypt。

要避免的事情

我会避免使用受密码保护的 zip 文件之类的东西。首先,密码保护/加密并不是那么好,但更重要的是,最终留下未加密的数据太容易了。

我也会避免尝试滚动您自己的加密文件系统。在设计这样一个大多数人不会考虑的系统时,确实有很多微妙之处。

我所做的

当然,我使用 1Password(见披露)。因为它处理附件,所以我可以将我的各种私钥附加到 1Password 中的项目。

缺点

我遇到的最大问题是 1Password 不能在 Linux 或 FreeBSD 上运行。(有一些开源项目可以为此类系统构建 1Password 阅读器,但它们还没有准备好。)。

同样,尽管我信任 1Password 和我的 1Password 主密码,但我仍然觉得将我的 PGP 私钥文件和它的密码存储在同一个保护良好的篮子中感到不舒服。所以我将我的 PGP 私钥存储在 1Password 中,但我依赖我的记忆来获取那个特定的密码。

“充满密码的文件”很好,但在使用时需要小心。当我和我一起旅行时,我用GnuPG加密它,我在运行 Linux 的便携式计算机(我的,所以它是“干净的”)上解密它,没有激活任何交换空间,我只在/tmp配置的 中解密作为tmpfs以 RAM 为后盾的“内存文件系统”( )。练习的目的是防止我的任何宝贵密码进入未加密的永久数据存储(内部硬盘/SSD)。

一些密码管理器应用程序(例如KeePass)可以自动执行此过程并为您提供更易于使用的系统。


另一种方法是在生成密码时切换到数学。这个想法是在你的脑海中存储一个“主密码”(让它很大而且非常随机;比如 20 个随机字母)。当您需要为某些用途U生成密码时,只需应用一些涉及U和主密码的确定性加密操作(例如散列)。U ” 这里将是一个使用某种格式(您希望的任何格式)的字符串,它以某种方式对密码的目的地进行编码。

例如,将U设为字符串“ ssh:foo.example.com”以表示“用于通过 SSH 连接到机器的密码foo.example.com”。只要它是明确的,编码就无关紧要,即您可以根据您对情况的了解动态重建字符串(“我想用 SSH 连接到foo.example.com”)并且您不会发生冲突(两种不同的用法结束在相同的使用字符串上)。

将主密码和使用字符串组合成密码的“密码操作”必须谨慎设计。我建议使用PBKDF2,使用字符串U是“盐”。PBKDF2 的迭代计数是一种权衡:较高的计数可以更好地保护您的主密码,但在您想要重新计算密码时意味着更高的成本。大约一百万的迭代成本可能就足够了。

我没有方便地参考这样做的现有产品,但我确信这样的产品存在;并且可以通过简单的 .NET 应用程序轻松地重新实现它(.NET自 .NET 2.0 起就有一个 PBKDF2 的实现,它也可以在 Linux 端口Mono上使用)。

使用数学的重点是你没有任何东西要存储:应用程序(公共的,固定的)和主密码(私人的,从不存储在你脑海中的任何地方)在概念上“包含”几乎无限数量的所有密码的用法。这种解决方案的挑战是:

  • 您需要将 PBKDF2 输出(字节序列)编码为“密码”,这将被认为是“无处不在”可接受的。不幸的是,每个接受密码的站点、服务器或应用程序都可能有自己的限制(最小长度、最大长度、可接受的字符集、不可接受的字符集......),并且不清楚您是否可以设计一个单一的编码导致适用于每个系统的密码。

  • 对于相同的目的地(我们的“使用字符串”),您总是得到相同的密码。某些站点/系统会定期强制更改密码(没有真正合理的原因,但这对您来说是人为的)。您可以通过在“使用字符串”中包含当前日期(月份和年份)来支持此类事情,但是必须记住给定站点是否需要此类轮换密码是很麻烦的。

因此,虽然这种方法有些优雅,但在投入大量思考和修补来创建可以完成这项工作的产品之前,它可能是不切实际的(该产品可以是带有短代码的命令行工具)。


编辑:至于您的更新,一旦您可以存储密码,您就可以随时使用 GnuPG 加密任意文件(使用密码进行对称加密:)gpg -c因此,您可以以这种方式存储任何内容,包括证书的私钥。

我们中的很多人使用 KeePass 之类的程序来跟踪帐户。它安全地加密它们并保持它们井井有条。它还具有适用于大多数智能手机和台式机的客户端,因此您可以随时随地访问您的密码。

你可以试试KeePassX至少在 Linux 中,您可以在每个条目中保存一个文件。可能它不会自动“打开”私钥或证书,但至少您可以安全地放置所有关键信息。