有些时候我需要在一台新的电脑上面使用ssh来管理我的服务器, 如何登录进系统就成了一个难题.
那么我们就来给私钥上个密码吧
上密码当然简单了, 创建密钥对的时候它就会让你创建一个密码. 可是由于太懒, 一般情况下这个密码都会留空. 毕竟密钥已经是个”密码”了, 给密码上个密码实在是有些多此一举.
可是如果我们真的有分享密钥的需求(虽然不推荐) 那么就需要一个十分难被破解, 就算私钥泄露了也不会让攻击者登录我们的服务器的密码了.
默认情况下
ssh-keygen
会创建一个2048 bit 大小的 RSA 密钥. 为了安全,我们要引入一个新的argument: -a
-a 可以让你指定密钥经过KDF加密的次数, 这个数字越大, 解密也就越慢. 我们要找到一个介于[安全但是太慢了] 和 [攻击者可以分分钟破解出来密码] 之间的一个完美的值.
-a 的默认大小为 16, 在一台不是太慢的机器上也就几十毫秒就能够解密. 我们的目标是至少让单次解密的速度在1-3秒之间. 这样就可以让暴力破解变得几乎不可能.
ssh-keygen -a 512
可是这样,默认的加密方法还是RSA 2048 bit. 为了更加安全, 我们可以自定义RSA 密钥的长度.
ssh-keygen -a 512 -b 4096
可现在问题又来了, 把RSA的长度加到2048 bit 并不会提高太多的安全性. 根据 GunPG FAQ 的说法, 如果你想要比RSA-2048更高的安全性, 与其把密钥加长,不如直接一步升级到椭圆曲线.
刚好, 稍微新一点的 ssh-keygen 都支持 ed25519 椭圆曲线
ssh-keygen -a 512 -t ed25519
如果密钥的解密实在是太慢了(五秒以上吧), 那么推荐把 -a <rounds> 那里的数字调小一些. 我个人用的通常是256.
这样就可以生成一个更加现代, 同时也用到了KDF加密的密钥了. 密钥的密码最好要复杂, 难猜一点. 虽然不是最好的分享密钥的方法, 但已经比直接分享一个没有密码的 RSA 密钥安全的多了.