通过“加密”密码,您违反了CWE-257:以可恢复格式存储密码。但这正是法国政府想要的。他们希望能够获得任何用户的密码。无论如何,这是一件坏事,Bruce Schneier 同意。
那么,您如何才能满足法国的这一要求并保持高水平的安全呢?
通过“加密”密码,您违反了CWE-257:以可恢复格式存储密码。但这正是法国政府想要的。他们希望能够获得任何用户的密码。无论如何,这是一件坏事,Bruce Schneier 同意。
那么,您如何才能满足法国的这一要求并保持高水平的安全呢?
不要对您的用户强制使用另一个密码。使用 PKI、硬件令牌或其他一些方法,如OAuth或OpenID,这些方法利用位于您担心的任何司法管辖区之外的某个身份提供者站点。
请注意,有关 2004 年法国法律的实际要求Loi pour la confiance dans l'économie numérique aka对数字经济充满信心的法案并不明确,似乎一些报道曲解或夸大了其影响。例如,听起来似乎只需向执法部门提供对用户帐户的其他访问权限就足够了,例如,对于儿童色情调查,以一种不会让用户知道他们的帐户正在被访问的方式(作为典型的密码重置会)。
使用公钥密码术。您的服务器将只有公钥。这将允许服务器加密密码,然后可以比较密文以验证用户身份。
私钥应该在银行保险库内的驱动器上。如果法国政府要求输入密码,那么您可以访问私钥来解密密码。
一段时间以来,这个问题一直以一种或另一种形式被争论为“密钥托管”问题。让第三方访问受保护数据的架构存在根本问题。这些对于您如何实现加密是不变的。例如,请参阅这篇文章。
我将这个问题解释为如何为第三方提供对安全数据的访问:关于这是否真的符合我正在考虑的法国政府当前情况的辩论;根据问题的性质,这样做存在无法解决的风险。因此,请将此答案视为充分利用糟糕的情况。
一组要求可能是:
实际上,使用非常现代的加密技术有一个非常好的解决方案,称为功能加密,但是它效率不高。使用这些类型的方案,服务器可以拥有一个主私钥,允许他们解密任何记录,并且他们可以创建一个只能用于解密特定记录的新私钥。这解决了 (1)、(2) 和 (5),与 (3) 冲突并且不提供 (4)。
为了提供(4),我建议一个混合系统,其中任何现有的基于密码的身份验证系统都将继续用于(4),并通过对用户记录的加密(包括密码)。如果记录提供给政府,一旦它恢复了密码,它可以比较确保它是用于验证用户的相同密码。
使用函数加密的另一种方法是让服务器使用适当的加密方案对记录进行加密,该方案允许它们在每次政府要求记录时生成关于记录是什么的“零知识”证明(而不是提供私钥)。证明可以在传输到政府的过程中被加密(甚至可以使用“指定验证者”证明来阻止政府与其他人共享证明)。
这些解决方案都无法解决这样一个事实,即需要信任政府不会滥用其权威,因为防止这种情况与我们试图“解决”的问题的定义相冲突。
使用 PGP,无需存储密码。用户通过提交他们的公钥进行注册。当他们需要登录时,向用户发送一些随机文本,让他们签名并返回。然后验证他们的签名以对他们进行身份验证。