私钥与密码短语无关。公钥也是如此。公钥通常也未加密存储,即使私钥受密码保护。(在公钥以加密形式存储的情况下可能存在例外情况,但在基本情况下并假设密钥足够大,这样做不会提供额外的安全性,因为公钥旨在公开分发或至少可以假设为对手可用。)
现在,不要误会我的意思。使用密码保护您的私钥是一个非常好的主意,并且这样做是最佳实践。私钥和公钥彼此具有数学关系。但是你的私钥仍然只是一个数字。此数字与您用来加密包含此数字的文件的密码短语无关,密码短语的作用就是如此。
如果攻击者 Eve 除了知道公钥之外还知道密码;他们可以推导出私钥吗?- 我认为有足够的时间。
公钥与私钥在数学上是相关的,简单的答案是肯定的,只要有足够的时间,理论上可以从另一个推导出来。几乎按照定义,公钥需要以明文形式传输,以便在建立加密通信通道之前建立身份,所以 Eve(按照惯例 Eve 是被动窃听者;Mallory 是中间的主动人)可以看到它。
从 RSA 中的私钥派生公钥很容易。从公钥导出私钥在计算上被认为是不可行的,并且对于足够大的密钥实际上是不可能的。据我们所知,没有快速的方法可以从经典计算机上的 4096 位公共 RSA 模数导出私有 RSA 密钥数据(这是我们目前拥有的)。即使是对 2048 位公共 RSA 模数的有效攻击也将是一项壮举,尽管 1024 位 RSA 在合理的时间内是可行的,并且768 位 RSA 私钥已被考虑在内(它花了在相当现代的硬件上相当于大约 2,000 个 CPU 年)。
所以,“有足够的时间”,这是可能的。但这与密码短语或缺少密码短语无关。
为了理解上述原因,为了简单起见,我将使用教科书 RSA。(现实世界的 RSA 与教科书 RSA 相似,但不完全相同,因为有许多现实世界的攻击是教科书 RSA 无法处理的。)这里,在其他一些数字中,私钥是一对质数通常称为p和q,公钥是它们的乘积,n = pq,其中n称为公共模数。给定p和q,计算n是微不足道的(你只需要将两个 - 非常大 - 数字相乘),但只给出n,确定p和q的对应值是极其困难的。但是,我们没有证据证明确实如此;只是没有任何公开的简单方法可以实际做到这一点,即使有很多非常聪明的人已经在这个问题上工作了很长时间。这就像计算出 15 = 3 * 5,只是所涉及的数字不是几位数,而是数百位数。对于一阶近似值,对于 4096 位 RSA 密钥,n的长度约为 1300 个十进制数字,而p和q的长度分别略大于 600 个十进制数字。我们可以看到这一点,因为 log 10 (2 4096 ) ≈ 1233 和 10 615 * 10 615 = 10 1230。
如果他们可以导出公钥,他们可以使用什么算法来做到这一点?- 我不知道。
半素数分解算法。大于 10 100(100 个十进制数字,大约 332 位)的数字的当前技术状态是通用数字域筛选(GNFS) 算法。
量子计算机可以使用Shor 的算法来有效地分解半素数,但是(至少在公开场合)我们还不知道如何构建一个足够大的可以实际工作的量子计算机。这就是推动所谓的后量子密码学的一部分内容。上次我听说,最先进的技术是考虑数字 15,但那是几年前的事了。众所周知,量子计算机现在可能能够分解大于 15 的数字。
每个算法派生私钥所需的操作数量(或顺序)是多少?
使用 GNFS 分解数字的复杂性在其 Wikipedia 页面上进行了讨论。直接讨论操作数确实很难,但是在对先决条件进行了一些讨论之后,维基百科的文章总结说,数字字段筛的运行时间是超多项式的,但在输入的大小上是次指数的。您可以比较用于各种RSA 数字的各种因式分解时间和算法,这是 1990 年代初开始的竞赛的一部分,旨在扩展与整数分解相关的知识,现在已不活跃。
也比较一下,观察正在建立的 HTTPS 连接的人怎么可能不知道如何解密它?请注意,HTTPS 与 SSH 的工作方式不同,但基本操作原理仍然相似。