ssh-keygen
并接受默认设置即可。 但是用
ssh
生成ssh-keygen
密钥的最佳实践是什么?例如:
将
-o
用作OpenSSH密钥格式,而不是旧的PEM格式(大约3年前,OpenSSH 6.5在2014年1月30日引入了此功能)如何计算
-a
使用几轮KDF?应该使用
-T
测试候选素的安全性?与此配合使用的-a
值是什么?对于不同的密钥类型,建议的最小
-b
比特大小是多少?等等...(手册页中有令人难以置信的一组选项) 。
#1 楼
我建议使用Secure Secure Shell文章,该文章建议:ssh-keygen -t ed25519 -a 100
Ed25519是具有很小(固定大小)密钥的EdDSA方案,它在OpenSSH 6.5(2014-01-30)中引入。由于椭圆曲线加密(ECC),它们具有类似于4096位RSA的复杂性。
-a 100
选项指定了100轮密钥派生,这使密钥的密码更难以破解。然而,Ed25519是一个相当新的密钥算法(Curve25519的流行性只有在推测其他标准已经被稀释时才达到峰值),并且它的采用尚未普及。在2018年已迈出了一大步,所以我们已经接近完成了,但是在较旧的系统或较旧的服务器上,您可以生成具有4096字节的类似复杂的RSA密钥:
需要OpenSSH 6.5,它是从v7.8开始的默认值,因此它不再存在于
-o
手册页中,这指示使用新的OpenSSH格式存储密钥,而不是使用以前的默认PEM。Ed25519需要此新格式,因此在给定ssh-keygen
的情况下,我们无需明确声明它。先前的手册页指出:“新格式增强了对暴力密码破解的抵抗力。”更多信息,请参见此答案。另一种新的ECC算法称为ECDSA。它被认为是可疑的(它具有已知的弱点,并且由于美国政府已参与其开发,因此可能会受到损害)。 Ed25519的开发没有任何已知的政府干预。远离DSA(“ ssh-dss”)密钥:他们不仅怀疑,DSA是不安全的。
评论
谢谢,我一直在寻找-实用的命令行示例。
–汤姆·黑尔
16年1月1日在1:30
不需要第一个-o,因为手册页说Ed25519密钥始终使用新的私钥格式。
–汤姆·黑尔
16 Dec 10'在4:33
@juanmah –是的,这就是为什么我链接Ed25519采用页面并提供RSA 4096的原因。该页面指向Cyberduck在Azure上实施Ed25519(尽管大概是Windows,而不是Linux)。我以为您可以在Linux VM上升级OpenSSH。越新越好,但是Ed25519需要OpenSSH 6.5+。如果要使用轻量级服务器,请考虑安装pts-dropbear。
–亚当·卡兹(Adam Katz)
18 Mar 5 '18在15:20
从大约一个月前的7.8版本开始(请参阅第一个项目符号),ssh-keygen自动写入“新”格式,如果要使用旧格式(对于ed25519以外的格式),请使用-m PEM
–dave_thompson_085
18年10月2日在1:00
@BasilBourque –它将提示您输入密码。如果您在命令行上提供密码短语,例如-N“秘密密码短语e> Q9 =八位位组”,则该密码对系统上的其他用户可见(例如ps auxww | grep keygen),并且保存在您的命令历史记录中,因此最好以交互方式进入。
–亚当·卡兹(Adam Katz)
19年7月9日在13:42
#2 楼
大多数用户只需键入
ssh-keygen
并接受默认设置即可。是的。为了为人们提供安全保护,它必须很简单。因此,默认选项应安全,兼容且快速。您可以提供替代方案,但是对于那些不在乎的人,默认值应该是“足够好”。因此,目前旧的PEM格式的RSA(2048)是当前的默认设置。此功能几乎在3年前的2014年1月30日发布)
三年都不算什么。这些年来,许多容器都在不断发展,但是SSH已经存在20多年了,仍然需要处理较旧的客户端。新的OpenSSH格式尚未得到广泛采用和支持。
如何计算
-o
使用几轮KDF?取决于用例。在Github上为“资料”存储库创建密钥不同于在您最喜欢的国家机构中作为证书颁发机构创建密钥或在专用服务器上访问超级机密文件。
,这仅适用于尚未广泛使用的新格式,并且增加了解密密钥的时间。默认的回合数是
-a
(很高兴看到它记录在某处)。 应该使用
16
来测试候选素数的安全性吗?与此配合使用的-T
值是什么?否。它用于生成用于DH密钥交换的质数(
-a
)。它不以任何方式用于生成SSH密钥。有关如何生成和测试/etc/ssh/moduli
文件的信息,请参见moduli
手册的单独章节MODULI GENERATION
。对于不同的密钥类型,建议的最小
ssh-keygen
大小是多少? 这不是SSH专用的,但是NIST通常在本文档的第12页(每2015年)中建议使用密钥大小:
RSA (2048 bits)
ECDSA (Curve P-256)
Ed25519确实具有固定大小,因此
-b bit
参数被忽略。评论
通常,最佳实践是在使用密钥的同一系统上生成密钥,因此新文件格式与旧软件之间的不兼容性不是大问题。算法(-t)通常是一个问题:ed25519密钥无法与旧版本互操作,即使ECDSA也无法与非常旧的版本或RedHat-nobbled版本兼容,而新版本则拒绝DSA,除非您调整配置(对此已经有好几个问题了),因此-正如您所说的,我们最终选择了RSA作为无处不在的选择。
–dave_thompson_085
16年11月26日在8:02
关于协议,我的sshd_config手册页说:默认值为“ 2”。协议1遭受许多加密弱点的困扰,因此不应使用。它仅用于支持旧式设备。
–汤姆·黑尔
16-12-7在23:25
是。我什至不认为有人愿意允许这个协议。当前任何系统上都不是默认值,也没有理由允许它。
–贾库耶
16 Dec 8'在7:34
#3 楼
这是一个基于推荐值的Ed25519衬板:(不带密码)-N
:新密码-q
:静音ssh-keygen
评论
空密码短语不是最佳做法。是的,某些自动化任务是必需的,但这是例外。您的文件名是默认文件名,因此不必使用-f output_keyfile。
–亚当·卡兹(Adam Katz)
18年4月11日在18:34
用空密码短语-a 100根本没有价值吗?似乎这样的密钥仍然可以被蛮力地使用(什么也不尝试-它起作用了!)
–乔纳森·托默
19年3月13日在3:45
请解释为什么将-a与空密码短语一起使用。这似乎没有道理,但是我可能对此没有任何了解。
–罗勒·布尔克
19年7月9日,0:21
#4 楼
要获得额外的保护,请在这些键上使用chattr,例如sudo chattr + / home /“用户名” /.ssh/id_rsa.pub(在/ etc / passwd以及/ etc / shadow等上也是如此)
评论
这种“额外保护”如何运作?您为什么建议对公钥而不是私钥这样做?需要更多解释,尤其是因为手册页似乎表明您的示例命令实际上根本不执行任何操作。
– AndrolGenhald
18年11月29日在21:05
Chattr防止文件更改-在任何ssh密钥的情况下,它使某人无法简单地对其进行更改。不知道手册页中是否提到chattr,但这会使文件不可变。
–user192494
18年11月30日在18:13
在那种情况下,您可能是说chattr + i / home / ...而不是chattr + / home /...。尽管如此,我仍然看不到这是一个好主意,无法在没有root用户访问权限的情况下更改或删除密钥,但是当您需要更改密钥时,除了沮丧之外,还能获得什么?
– AndrolGenhald
18年11月30日在18:23
评论
(2)crypto.stackexchange.com/questions/40311/…(3)-T测试可能的素数而不是“安全性”;您绝对不应该为RSA安装的素数(4)至少为2048或3072的模数文件;对于DSA,NIST需要使用组2048,但还需要子组和哈希224+,而SSH无法处理后者(还好吗?);对于ECDSA,最小可能的256是可以的;对于Ed25519,别无选择令人困惑的-T手动解释是:为了安全起见测试DH组交换候选素数(使用-G选项生成)。什么是primes(4),以及如何将其转换为可以在命令行中键入的内容(例如,在RSA情况下)?
'primes'是我的'(3)'关于你的第三颗子弹的最后一个词,'(4)'是关于你的第四颗子弹的最后一个词。是的,ssh-keygen的手册页具有误导性;链接至moduli(5)的页面(“(5)”表示Unix man方案中的第5节)较好,但仍不准确。简而言之,如果要生成“模”(实际上是模数和生成器对),请始终执行-G THEN -T并仅使用第二个结果。它确实会产生“安全”素数(p = 2q + 1),但是这里的“安全”是历史遗物,重要的是非光滑素数。
le!当然没有素数是平滑的,我的意思是DH想要素数为Zp *的素数,即p-1不光滑。在我看来,大多数令人难以置信的选择都是关于密钥导入/导出/转换和文件管理以及OpenSSH的特有证书的;名为keygen的程序中实际的密钥(甚至参数)生成选项相对较少。