SSH-Keygen的更安全用法

有些时候我需要在一台新的电脑上面使用ssh来管理我的服务器, 如何登录进系统就成了一个难题.

为了安全,我把服务器上面的”密码登录”给关掉了. 这样唯一的登陆方式就是通过我的SSH Key. 这样做十分方便,在已经有密钥的电脑上登录服务器根本不需要密码. 可我们又该如何添加新的电脑呢? 为了保证密钥的安全, 私钥永远都不能够离开创建的电脑. U盘备份或者是网盘备份实在是太不安全了.

那么我们就来给私钥上个密码吧

上密码当然简单了, 创建密钥对的时候它就会让你创建一个密码. 可是由于太懒, 一般情况下这个密码都会留空. 毕竟密钥已经是个”密码”了, 给密码上个密码实在是有些多此一举.

ssh-keygen的截图
ssh-keygen的截图

可是如果我们真的有分享密钥的需求(虽然不推荐) 那么就需要一个十分难被破解, 就算私钥泄露了也不会让攻击者登录我们的服务器的密码了.

默认情况下

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更高的安全性, 与其把密钥加长,不如直接一步升级到椭圆曲线^1.

刚好, 稍微新一点的 ssh-keygen 都支持 ed25519 椭圆曲线

ssh-keygen -a 512 -t ed25519

如果密钥的解密实在是太慢了(五秒以上吧), 那么推荐把 -a <rounds> 那里的数字调小一些. 我个人用的通常是256.

这样就可以生成一个更加现代, 同时也用到了KDF加密的密钥了. 密钥的密码最好要复杂, 难猜一点. 虽然不是最好的分享密钥的方法, 但已经比直接分享一个没有密码的 RSA 密钥安全的多了.

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据