我使用RSA密钥通过ssh登录到远程服务器。我将点文件置于版本控制下的可公开访问的位置,以便我可以快速设置新服务器以自己喜欢的方式工作。

现在,我没有受版本控制的.ssh目录。但是,如果我可以将.ssh / authorized_keys保留在点文件存储库中,则可以节省一个步骤。当然,我的私钥仅位于我拥有的受信任的客户端计算机上。我把它做成了4096位RSA密钥,因为这似乎是在与通用sshd版本的广泛兼容性和安全性之间的最佳平衡。键?没有人经常在我的dotfiles存储库周围打扰,但这不是秘密,任何感兴趣的人都可以阅读它们。

评论

公钥是公开的,所以可以。应该没关系的如果不需要执行此操作,则不要无缘无故地将其丢弃,但应该没问题。

定义“完全安全”。在您告诉我答案之前,我可以用橡胶软管殴打您吗?我可以花费数万亿美元和数百万年试图打破它吗?

尼克:杜德,如果您想让我的用户的词汇表很糟糕,只需打破我的办公室窗口并克隆我的硬盘即可。如此侵略。

我认为GitHub发布所有用户的公钥毫无价值。您甚至不必登录。

@ djsmiley2k这个黑洞不是很安全。斯蒂芬·霍金(Stephen Hawking)推翻了他最初的观点。假设没有信息从黑洞中泄漏是不安全的;-)。这样的信息接收器将与宇宙如何运作的基本原理相矛盾。例如,它可以用来摆脱硬盘驱动器上的混乱情况。 las ...

#1 楼

公钥旨在共享,读取和/或发布公钥很好。

私钥是秘密的,只有该私钥的所有者才能访问它们。 />要将此观点带回家,请回想一下您曾经访问过的每个HTTPS网站。在每种情况下,作为HTTPS的一部分,站点都会为您提供其公共密钥。因此,不仅可以安全发布它,而且还可以这样做。例如,如果单击地址栏上的绿色锁定图标,则可以找到该网站的公共密钥(如果正在HTTPS上查看)。

*.stackexchange.com

Modulus (2048 bits):
af 46 03 ce c7 13 e6 2e 93 d8 56 91 b1 31 8d 0a 
22 c1 f0 eb 4f 5e ef 0d f6 20 32 b9 a4 4e 87 f9 
d2 d2 44 51 b0 df 30 50 c9 35 4e 68 19 84 fb 98 
33 aa 05 4b 7e fb 57 c5 b6 2e a8 4b 04 ca cf 5e 
2e e5 9e 1b ca b7 60 c5 58 2c b0 df c4 6b 0d b1 
2c 33 97 73 54 61 2b 9a 1b b1 dc 5d 10 a9 c4 c8 
f7 6c e3 55 6e b5 0e 61 3b 35 24 0b 89 1e 32 a2 
75 69 4e 97 40 68 ee 23 48 f2 71 9f c7 7e e2 9d 
6c 22 55 36 24 64 a4 f0 b6 52 58 5a 9a 44 e7 3b 
2a d5 ed 95 63 f8 1d a8 4d 45 9b 5d c2 f2 f9 74 
81 06 18 d5 b1 fb b0 7e 5d 50 1f 63 5c a0 73 f5 
22 b2 57 64 03 e6 b7 0f 6f b7 58 0b 57 80 56 51 
65 9f f5 09 61 63 29 62 4d 30 02 3a 64 10 2d 95 
b8 12 36 04 58 c5 d7 1d 95 e2 21 3c b0 b3 93 35 
b2 b1 f9 6d 7e 20 66 b2 68 33 e9 50 a8 15 1e 0a 
80 9a 3c 19 dd cc 79 35 a8 8c 1b 61 33 5d 12 2f 

Exponent (24 bits):
65537


可以在github.com上找到更多示例,它们要求您将公共密钥附加到您的帐户中以供git clone git@github.com:<user>/<repo>使用。以下URL

https://api.github.com/users/<user>/keys

mine列出为:始终应保护的私有密钥,绝不将其提供给第三方或在不加密的情况下通过电子邮件进行交换。

如果有人访问了您的私有密钥,则他们可以访问任何设备或用您的公共密钥保护的加密文件。这也意味着他们可以代表您签名。如果某人获得了对您的私钥的访问权限,那将是非常糟糕的事情。读取权限。

评论


我想这可以通过揭露私钥为何是私钥等原因来改善。

–Délisson Junio
17年2月7日在4:06

简而言之,两个随机选择的素数是私钥,并相乘形成公钥。这是可行的,因为素数很常见。 RSA基于(技术上未经证实)的假设,即很难将它们分解为两个素数。

– J.A.K.
17年2月7日在8:13

我认为大多数人都不会单击该页面来理解基本的数学细微差别,因为问题在于公钥是什么的基本属性。我同意,“安全在于……”的措辞会更好。但是我相信这也是产生RSA-129的原因。以易于掌握的方式展示分解的难度

– J.A.K.
17-2-7在20:49



有趣的是,当我通过HTTP查看您的答案(无S)时,答案是“当然,您可以发布您的公共密钥和私有密钥,没问题”。

– dotancohen
17年2月9日在10:01

关于github键的快速提示。如果您使用github.com/user.keys网址,它将返回它们以放置在授权密钥中。

–HSchmale
17年2月9日在20:04

#2 楼


发布ssh公钥是否完全安全?


不,但是您仍然可以毫无顾虑地做到这一点(很多人都这样做,只需查看https:// sks-keyservers.net/i/或https://pgp.mit.edu/)

之所以不完全安全,是因为如果我知道你的公钥,我可以很整洁数学,计算您的私钥。您的公钥包含一个大n,它基本上是两个质数的乘积,如果我找到这两个质数,就可以轻松找到您的私钥。

您之所以没有不必担心:当n = 21时,很容易找到n的因数,但是当n为4096位数字时,要困难得多。目前尚无生还的数学家还没有发表一种在可接受的时间内将如此众多的因子分解的方法。使用最著名的方法,我们都已经死了很久,直到有人找到构成n的因素。

并不是总能找到捷径来分解大数并不是完全不可能的。如果发生这种情况,RSA将一文不值。在此之前,您不必担心。

SSH同时使用RSA(或其他签名方案)和Diffie Hellman(用于会话密钥交换)。 Diffie Hellmann密钥交换的1024位(数学上与RSA的工作方式略有不同)可能不再足够大。这是因为某些使用Diffie Hellman的ssh实现(以及ssl实现,如果我没记错的话)会重用一些常量,而不是随机选择它们,并且一旦有人建造了一台机器进行必要的计算,它们就可能基于这些常量破坏所有加密。 1024位仍然需要极高的计算能力来分解或计算离散对数(以及数十亿美元用于快速构建机器),但是对于某些州级参与者而言,这可能是值得的,因为这只是打破了一些问题实例将中断如此大量的加密会话。但是,仍然认为2048位和4096位是安全的。

RSA密钥也是如此;我认为尚未公开考虑1024位数字,但是它可能即将出现,这意味着预算非常高的机构现在可能会考虑1024位数字,尽管数量不多。

(编辑:澄清了最后一段的含义,并纠正了RobIII指出的错误)

评论


1024位RSA可能有点太舒适了。 2048位应该是可以的,而4096位可以增加相当大的安全裕度(但不如从AES-128到AES-256的安全性),可以抵抗目前已知的攻击。

–用户
17年2月6日在21:58

同意我看到最后一段是令人误解的;我的意思是说2048位和4096位密钥对于RSA也是安全的,而1024位密钥可能不再适用,因为即使是公共/研究工作也可能很快将其中的一个分解(所以可能会有三个字母机构)

–带外
17年2月6日在22:09



“请注意,ssh允许您在RSA和Diffie Hellman之间进行选择。”我可能会误会,但是选项“ RSA1”,“ DSA”,“ RSA”(对于RSA2),“ ECDSA”和“ ED25519”不是吗?如我错了请纠正我。

–RobIII
17-2-7在13:10



“目前尚无生死的数学家发表过一种在可接受的时间内将如此众多的因子分解的方法。”我认为用户@PeterShor可能与您不同意

–史蒂夫·考克斯(Steve Cox)
17年2月7日在14:23

@grawity-啊-你永远都不会完成学习。这就是为什么我喜欢stackexchange。谢谢!

–带外
17年2月9日在8:16



#3 楼

没有什么是“完全安全的”;问题是它是否增加了任何其他风险。

SSH协议仅在与服务器协商了对称会话加密密钥之后,才将加密的客户端公共密钥发送给客户端。因此,窃听连接的对手不会学习客户端的公钥。这意味着发布它确实为对手提供了他们原本不会拥有的额外信息。好吧,这一切都取决于攻击者是否可以破解RSA。让我们考虑两个子情况。 (我假设服务器和客户端的RSA密钥都足够大,足以在一开始就安全-2048位或更多)。公钥

通过一般攻击,我的意思是不管您使用什么密钥都可以破坏RSA。例如,这类似于解决RSA问题的有效算法(例如多项式时间素因分解算法)或通过构建实用的量子计算机。

在这种情况下,是否发布客户端公共密钥无关紧要,因为SSH和使用RSA的所有其他应用程序都会被破坏。因此,没有额外的风险。

攻击者可以对“弱” RSA公钥的子集进行攻击。这是一个现实问题。在某些系统中,由于错误的密钥生成算法或错误的随机数生成器,选择了实际上容易受到攻击的RSA密钥。最著名的例子是Debian GNU / Linux发行版附带了一个弱随机数生成器,使用了将近两年(2006年9月至2008年5月13日)。 2011年对710万个公共Internet RSA密钥的调查发现,他们看到的1024个RSA公共密钥中约有0.4%较弱。

如果您的客户端公共密钥是这样的弱密钥,并且您将其发布,则获得该密钥的攻击者可能会这样说并利用这一事实。然后,他们将能够登录到使用该密钥进行身份验证的SSH服务器。

如果您的服务器具有如此弱的公钥,则该服务器是不安全的;攻击者可以窃听连接,这使他们无论如何都可以学习您的公钥。因此,在这种情况下,没有额外的风险。最大的风险是您的客户端公共密钥是弱密钥,这是由软件故障引起的。如果要发布客户端公共密钥,则可能需要采取步骤来确保您的密钥不是弱项。例如:


使用弱密钥测试器工具检查您的公钥

在您进行了尽职调查以确保不会给你弱键。例如:


将所有安全补丁应用到您的操作系统,尤其是那些解决其随机数生成器,SSH或SSH依赖的库的问题的补丁。
确保系统可以访问良好的熵源的措施。 (复杂的主题。)




评论


您可能还建议旋转钥匙作为缓解措施。有什么技巧可以使之变得容易吗?例如,添加新的私钥后,是否有工具可以在您使用旧密钥登录站点时向客户端发出警告,因此您知道仍需要更改该服务器上的authorize_keys文件吗?

–R .. GitHub停止帮助ICE
17年2月7日,下午3:16

无论如何+1,这是最好的答案,因为它实际上着眼于哪些潜在风险存在和不存在。

–R .. GitHub停止帮助ICE
17年2月7日,下午3:18

#4 楼

不可以,除非您为每个服务使用唯一的服务。它使攻击者可以识别您。
如果您对服务A和服务B使用相同的公钥,并且您的公钥都被泄露,那么这将使您的两个帐户交叉链接。两种服务都不令人尴尬。但是即使在这种情况下,如果攻击者想攻击您,这也将为攻击者提供更好的线索,使其有一天可以确定要入侵哪个帐户。

评论


识别几乎是“泄露”公钥的唯一真正风险。

–Filip Haglund
17年2月9日在18:05

在blog.filippo.io/ssh-whoami-filippo-io上进行演示

–user541686
17-2-9在23:43



@Mehrdad怪胎。

–迈克尔
18年1月3日在22:03

@Mehrdad很好找到。我花了一点时间才意识到它给了我“通过”的权利。它回显了“下面”的公钥,但我找不到它们。终于意识到它所回响的是什么,什么也没有尝试过。

–user135823
18年8月25日在15:39

#5 楼

如果您的公钥末尾包含您的主机名作为注释,则可能会透露您的身份,例如ssh-rsa C4F3B4B3... johndoe@companyname.com。如果您的名字不太常见,则可能可以识别您的身份。

评论


即使您删除了主机名,它也适用于ssh auth。

–布赖恩
17年2月7日在9:18

是的,它有效,因为它只是可以删除的注释。但是,如果您忘了在赠送之前先将其删除,则可能是个问题。

–旋风
17年2月7日在11:10

我的主机名是2013-iMac.local,虽然不是那么个人,但可以这样。

–布赖恩
17年2月7日在22:22

#6 楼

是的,但是...

如果您的安全性依赖于公钥的私密性,那么您所做的事情就不是那么理想。这不是为非对称加密而设计的。

前面的所有答案都指出了一些漏洞


,如果知道您的公钥,则风险更大,
,或者它们显示出您拥有的其他一些防御措施,因为它是保密的。 。例如,您对公钥的了解使您可以进行身份​​识别。这可以通过隐藏的pubkey来处理,但是如果您为此任务使用一些其他机制(例如,具有每个会话自动生成的随机密钥对的附加加密层),则可以做得更好。

但是,一切也可以用于其他任务,甚至可以取得成果,特别是如果我们不在防御方面。

#7 楼


现在,我的.ssh目录没有版本控制。但是如果我可以将.ssh / authorized_keys保留在dotfile
存储库中,它会节省一步。公开,我认为这不是一个好主意:

私钥也存储在.ssh目录中,因此存在不小心将其从点文件存储库中排除并发布的风险。意外。

#8 楼

共享公钥的另一个问题是公钥是否不安全生成。关于RSA和Diffie Hellman密钥可以后门使用但以其他方式显得完全正常的方式的大量论文已经发表。在这种情况下,提供您的公钥将为攻击者提供他们获取私钥所需的所有信息。

参考文献:

http://kukuruku.co/hub / infosec / backdoor-in-a-public-rsa-key
https://www.cryptologie.net/article/360/how-to-backdoor-diffie-hellman-quick-explanation/

#9 楼

您可以考虑几种威胁。其他答复者讨论的一种是恶意用户试图破解公钥的行为。另一个值得考虑的威胁是该恶意用户用其替换了您的公共密钥。如果他更改了密钥,而您没有注意到这一点,则可以使用恶意用户的密钥来建立系统,从而部署他拥有私有对的HIS公共密钥。

#10 楼



如果RSA按设计工作,则这不是安全问题。它可能会显示一些有关您的身份的信息,但是这个问题也不会显示。

为什么?

对于AES,您只需要256位,因为密钥是完全秘密的使用RSA,您可以为对手提供一些信息(公钥),但可以证明它仍然很难破解。但是,因数分解比暴力破解密码要快得多。 (这是可行的,因为素数很常见)。 RSA基于这样的假设,即很难将它们分解为两个素数。数量分解算法已经取得了很大的进步,如果成熟的量子计算机出现,Shor的算法将成为RSA的终结。

评论


请不要在没有留下任何评论的情况下投票。

– J.A.K.
17年2月7日在20:55

#11 楼

根据PKI系统的理论,没有。当算法和公钥都为世人所知时,该系统被设计为“安全”,或更准确地说,不弱。原因。简而言之,不要因失误而损害自己的安全。最好为每个目的创建不同的密钥对。 。通过提交您的.ssh文件夹中的任何内容,您正在接受潜在的人为错误风险;你一定要小心。 (而且,如果确实发生了这种情况,则再次删除它可能不会将其从历史记录中删除。在当今最流行的系统中并非如此。根据版本控制系统,您可能难以完全清除它。)
取决于您的公开程度储存库是什么,以及您将该公用密钥用于敌对方的其他用途,它也许能够跟踪使用该公用密钥完成的活动,从而建立您的行动历史。可以想象,在此过程中识别您的身份。远射。