概述
- 一些审查/讨论的例子。
- 替代方案:本地密码生成的密钥供内部在加密密钥访问控制 API 中使用。
- 熵和增加它。
1. 一些回顾/讨论的例子
在采用用户密码/短语来导出加密密钥的系统中,密码强度和密钥强度之间的关系是什么?
这完全取决于您如何使用密码来派生密钥。如果您只是对密码进行哈希处理,甚至对密码进行哈希处理和加盐,您的函数可能如下所示:
generateKey(password, salt) := cryptoHash(password, salt)
如果我拿一张最弱密码表,我可能可以计算出潜在的哈希值,并从那里得到可能的加密密钥。然后给出一个message我可以用这个函数破解它:
crack(message, saltLen, weakPassList):=
for salt in 0..saltLen:
for weak in weakPassList:
let k := generateKey(weak, salt)
if decrypt(message, k) looks okay:
return k
根据大小saltLen和weakPassList大小,这可能需要很长时间才能运行;但是,您可以将k上面生成的内容缓存在一个表中,然后一次尝试一个,以消除实验性密钥生成的因素。
肯定有更好的方法来生成密码,但是如果没有更详细的规范或用例,就很难分析或推荐哪种方法最好。
2. 替代方案:本地密码生成密钥供内部在加密密钥访问控制 API 中使用。
我知道密码强度在身份验证中很重要;这是加密的一个有争议的问题吗?
除非您谈论的是特定的密钥生成方法或其他特定用例,否则我觉得没有区别。一把钥匙就是一把钥匙。
就我个人而言,我会使用密码生成本地加密密钥kLocal,用于隐藏正确生成的加密密钥kMessage,该密钥可用于加密通过非安全通道发送的消息。
这样密码只是一种访问控制机制,用于过滤可以向系统键入命令的用户,并防止他们使用彼此的加密密钥(如果他们无法获得权限kLocal,他们就无法发现其中的内容kMessage)。这是恰当的,因为您可以使用安全 API 和例如漏桶,以防止人们对本地计算机进行密码猜测攻击。
防止对已经公开发送的密文消息进行密码猜测攻击并不是那么简单!通过使生成的密码kLocal仅供内部、API 限制使用,您限制了攻击者的有效计算能力,这在软件安全方面是一件非常好的事情。
3.熵和增加它。
据我了解,人为创建的密码往往具有非常低的熵,这就是从它们派生密钥的原因。
当心!熵只是衡量事物不可预测的程度。如果我取一些带有X熵的值,并通过一些对手已知的函数运行它们,结果只能是X熵。也就是说,如果对手可以猜出原始值并且也知道操纵/扩展它们的功能,那么他就可以像猜测原始值一样轻松地猜测操纵/扩展的值。
除非您添加更多信息,否则您不会增加域的大小;并且你不会增加熵,除非你添加的信息本身有一些熵(不知何故不可预测/秘密)。