但是,服务器必须存储某种形式的邮箱密码,以便用户可以通过身份验证。如果服务器上发生安全漏洞,确定真正的邮箱密码不只是时间问题吗?
安全是关于权衡的。有时有人说,唯一安全的计算机是拔掉任何电源、锁在保险箱中、用混凝土密封、位于马里亚纳海沟底部的计算机。我可能会补充一点,它必须没有能够存储任何信息的设备。这样的计算机将是(相对)安全的,但它不会非常用户友好、易于使用或对任何现实世界的目的特别有用。任何比这更有用的东西都必须以某种程度的安全性来换取它的可用性。
现在,话虽如此,但问题仍然存在:我们能否减轻合理的威胁?事实证明,是的,我们实际上可以。
现代密码算法(原语)对攻击具有很强的抵抗力。 即使是 SHA1,由于比预期的弱(也来自谷歌) ,目前已被淘汰,对于大多数用例来说仍然足够强大;它正在日落,因为它没有像我们认为的那样强大,因为它适用于这个特定的特定用例。这并不意味着 SHA-1 坏了;它只是意味着我们有理由转向更强大的东西。
至少在公众中,我们目前不知道我们将如何成功地攻击 AES-256(假设它被正确实施),只给定一个密文/明文对(“密钥恢复”或“暴力”攻击)。Wikipedia以 2^254.4 的复杂性给出了最广为人知的 AES-256 密钥恢复攻击,即便如此,可用的数据量也很荒谬。这将时间减少了大约三分之一到三分之二(2^-0.6 ~ 0.6596, 2^-1.6 ~ 0.3299;请记住,平均而言,通过暴力破解一个 n 位密钥的工作因数是 2^(n- 1)因为使用随机选择的密钥,您平均会在搜索一半密钥空间后找到它,可能性范围从第一次尝试找到它到在测试密钥空间中的每个密钥后找到它),这意味着我们认为应该完全完全完全完全地以指数方式进行攻击的时间比现在,宇宙的生命周期只需要比宇宙的生命周期几乎完全成倍地长。0.6 甚至 1.6 位的安全性差异在实践中完全是微不足道的,并且可能被会话中随机数生成或持久密钥生成阶段中的任何问题所掩盖。我们甚至无法在合理的时间内实际数到 2^128,更不用说对计数值做任何有用的事情了,2^256 的难度又是 2^128倍。
即使试图破解加密的实体可以访问量子计算机,Grover 的算法也只会将搜索时间(就基本操作而言)从大约 O(2^(n-1)) 减少到大约 O(2^(n /2)),这意味着 256 位密钥为您提供对抗量子能力对手的有效安全性,就像 128 位密钥为您提供对抗经典攻击者一样。这实际上已成为对称密码学中 256 位密钥的主要论据;对抗经典攻击者,出于所有实际目的,如图所示,128 位足以提供相当好的安全级别,但如果量子计算机在更大范围内变得可行,使用 256 位密钥提供了一个安全网。(请注意,这是关于对称密码学,而不是密钥交换!许多非对称加密算法,包括 RSA,在面对可行的、大规模的、通用的量子计算机时会被 Shor 算法彻底摧毁。)这是朝着被称为后量子的工作的主要驱动力密码学。
您使用提供接近 256 位熵的密码的概率基本上为零。作为比较,您需要一个 20 字的正确生成的Diceware密码来获得 258 位的熵,对应于 100 次完美公平的六面骰子;如果它是正确生成的 Diceware 密码并且不为公众所知(它,可能它的每一个排列,现在几乎可以肯定在地球上的每个密码字典中),正确的马电池主食只会给你 52 位熵,它在每秒一万亿次猜测(大约 2^40 次猜测/秒)将持续 2^11 到 2^12 秒或大约一小时. 这对攻击者来说只不过是一个小小的不便。但是,没有什么可以阻止您使用高熵密码。ProtonMail 似乎没有对密码长度施加任何任意限制,因此,如果您愿意,您可以自由生成和使用 20-25 字的 Diceware 密码短语进行安全匹配,理论上可以通过 AES-256 获得。
正如 Lucas通过合并XKCD 漫画“Security”所指出的那样,攻击者很可能不会攻击加密原语;他们会追求别的东西。它不必涉及用扳手打你;可能是远程闯入您的计算机或闯入您的家(可能是安装物理键盘记录器,或尝试获取有助于他们绕过加密的信息,例如未受保护的副本或书面-密码),或让他们亲自为您发货,并与他们一起做一些您不同意的有趣事情,或在正常操作期间远程监听您的计算机造成的排放,或通过某种形式的勒索或其他权力姿态迫使您合作。因为让我们明确一点:如果政府是专门针对你的,并且不会因为采取行动表明这一点而烦恼,那么他们就会找到一种方法来提取他们需要的东西。在某种程度上,可取之处在于,大多数人并没有被专门针对和/或不值得暴露在那种程度,而只是被拉网监视所困. (尽管如果政府级别的对手后来确实意识到他们对你特别感兴趣,那确实会让他们更容易回去查看旧的通信,也可能在那里找到有罪的东西。当你不知道是否或者您是否被针对,或者如果他们稍后选择针对您,他们可能会拥有什么,这将成为一个问题。)
还有一些方法可以确保某人知道密码,而实际上没有以任何可恢复的形式存储密码。加密哈希 ( HMAC ) 部分基于密码、零知识证明,或者只是在给定的随机明文上计算加密哈希并仅存储加密的明文和哈希(如果加密密钥与密码相关,则两者只有在密码正确的情况下才能恢复为匹配对),都是可以实现的方法。
有一些方法可以减缓攻击者的速度。像Blowfish这样的加密算法通过复杂(且缓慢)的密钥调度来实现这一点,或者我们可以使用运行缓慢的密钥派生函数,例如经过适当调整的PBKDF2、bcrypt、scrypt或其他具有不太复杂密钥调度的算法(例如 AES )。这里的想法是使攻击(相对低熵)密码几乎与直接攻击加密密钥一样困难,同时保持从密码到加密密钥的转换的性能损失足够小,不会打扰正在使用的人服务。如果 KDF 一直转动最多 11 个,这可以使攻击合理熵密码变得非常不切实际,而不会给人类用户带来太多不便。(登录时您可能基本上不会注意到 500-1000 毫秒的延迟,但是如果每个尝试的密码通常需要半秒,即使使用高度优化的实现或大量强大的硬件,这也会大大减少可以输入多少密码即使在给定的时间段内进行离线攻击也可以尝试。)
虽然这些都不一定是ProtonMail是如何具体解决问题的,但我希望通过上面的说明,虽然问题在理论上存在,但在实践中也是一个非常可以完美解决的问题。任何有能力编写的密码软件都将混合使用这些技术以及其他技术。