我询问的是与密钥生成、使用和管理相关的最佳实践。
有几次,由于各种原因,我在工作时通过 SSH 登录到远程多用户服务器(以及从家里登录到我办公室的台式机)时创建了 SSH 和 GnuPG 密钥。
当我输入新生成的密钥的密码时,我突然意识到我无法控制我登录的机器,也无法控制中间的链接。我有点信任工作中的系统管理员,SSH 也很安全,但尽管如此……通过这样的链接发送我的新密码感觉很奇怪。
您觉得如何?在本地生成密钥(SSH、GnuPG 或其他)然后通过 SSH 传输私钥是否更明智,还是我只是对整个事情过于偏执?
另外,如果我的疑虑至少是有点正确的,你觉得应该把私钥存放在哪里呢?它们都应该放在一个物理位置吗?我应该大量使用gpg-agent
and ssh-agent
always 吗?
我在两台独立的机器上工作,使用 SSH 登录到几个独立的多用户服务器来工作。我从大约四个位置(本地和远程)使用 GnuPG 签署 Git 提交。
我正在混合使用 Mac OS X(带有 MacPorts)和 Linux 机器(带有 Pkgsrc)进行工作,但始终在命令行上。
答案1
您觉得如何?在本地生成密钥(SSH、GnuPG 或其他)然后通过 SSH 传输私钥是否更明智,还是我只是对整个事情过于偏执?
这实际上没有什么区别,至少如果系统管理员没有篡改软件堆栈(但他们为什么要这么做,反正他们已经拿到了私钥?)。
只要私钥在远程机器上,就有没有不同它是如何到达那里的。系统管理员可以访问它。密码短语也只会增加获取密钥的额外努力,因为他们也可以访问您的输入。
另外,如果我的疑虑至少是有点正确的,你觉得应该把私钥存放在哪里呢?它们都应该放在一个物理位置吗?我是否应该一直大量使用 gpg-agent 和 ssh-agent?
这取决于您的要求、偏执程度、对系统管理员的信任以及最终密钥的使用。
如果你需要私人SSH用于访问某些服务(比如 GitHub)的机器上的密钥,只需生成一个仅在这台机器上使用的新密钥,并且仅用于在所需的服务/机器上进行身份验证。
关于开放PGP/GnuPG,事情取决于您的要求。您似乎想要对软件进行签名,我感觉您的公司也遇到过这种情况。如果密钥直接与公司相关联并且仅为此目的而创建,我认为他们不会反对不将密钥放在他们的机器上。
如果您出于任何原因需要使用自己的密钥,请创建一个子密钥,您至少可以限制子密钥的签名,并随时轻松撤销。无论如何,使用子密钥是一种很好的做法!许多 OpenPGP 高级用户实际上将他们的私有主密钥存储在离线状态,并且实际上仅将其用于密钥管理。
转发gpg-agent
套接字似乎是完全可行的,当然也会减少系统管理员对密钥的访问权限(他们不再拥有完整密钥的访问权限,但只能使用它,至少从 GnuPG 2.1 开始,它删除了全部私钥操作交给代理)。