首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何存储多个密码短语的组合?

如何存储多个密码短语的组合?
EN

Cryptography用户
提问于 2012-02-22 20:46:53
回答 2查看 263关注 0票数 2

假设我们有两个短语,一个是来自用户的真实密码,另一个是从真实密码生成的,几乎无法猜测。您需要同时对用户进行身份验证。存储它们的最佳理论方法是什么,或者如何对它们进行加密,以便如果攻击者以某种方式得到加密的密码短语,就不能对这两个短语进行解密?我知道用蛮力攻击,攻击者最终可以破解加密,但如何才能不让攻击者更容易破解加密呢?)

如果我们单独对它们进行加密(使用对称算法),并将它们存储在某个地方(并不重要),那么第一个短语可能容易受到字典攻击。我们可以将它们结合起来,例如p1f1p2f2…。(phrase1=p1p2p3…,phrase2=f1f2f3…)然后加密。这样,合并的短语不应该容易受到字典攻击,攻击者只能使用蛮力。

但我不知道我们把它们结合在一起是如何影响加密算法的。有比其他加密算法更好的加密算法吗?我们如何组合它们是否存在漏洞,因为如果我们对许多加密组合密码短语的示例进行统计分析(我在这里猜测),就会发现它们吗?

或者,在实际分析算法、加密算法和加密密码短语之前,有没有办法知道呢?

EN

回答 2

Cryptography用户

发布于 2012-02-24 03:54:15

如果您问“服务器如何验证用户输入的密码(在您的情况下是密码)是否有效”,标准答案是根本不让服务器加密密码。相反,服务器所做的是存储两个密码中的一个哈希。这样,如果有人闯入服务器并获得哈希,就不会告诉他密码是什么。

一个简单的实现是接受一个标准哈希函数(例如,SHA256),在注册用户时,计算用户选择的密码的哈希值,并将其与从实际密码生成的密码连接起来;服务器将将该哈希存储在数据库中(或忘记实际密码)。然后,在对用户进行身份验证时,用户将提供密码,服务器将它们连接起来,散列,并将该哈希与数据库中的哈希进行比较(当然,只有在哈希完全相同的情况下才允许用户使用)。

这种加密密码的一个优点是,散列是一种单向操作;没有人能够逆转哈希(这实际上是密码散列的安全属性之一,给出哈希,没有人能找到该值的散列)。此外,如果用户输入了错误的数据,它也会很好地检测到这一点(因为这是另一个安全属性,没有人能够找到两个散列到相同的值)。

现在,如果你的第二个密码和你预期的一样好,那就是“几乎不可能猜到”,好吧,那就足够了。即使有人闯入服务器并恢复哈希,他们所能做的就是对两个密码进行猜测,对它们进行散列,看看这两种猜测是否正确;如果其中一个密码是不可猜测的,那么他们就不能这样做。

然而,我更怀疑密码可能比这更容易猜测(毕竟,如果它确实是不可猜测的,那么为什么还要考虑用户选择的密码呢?)如果可能出现这种情况,那么使用同样的方法,但使用密码派生函数(如PBKDF2),可能会更明智;它很像一个散列,但它做了以下这些好事:

  • 它提供了一个"salt“(它是一个附加值,被散列);它不会使对单个散列密码的暴力攻击更加困难,但它确实意味着攻击者不能同时攻击多个散列密码(因为每个密码都有不同的salt)。在注册用户时,服务器将选择一个随机盐,并将其包含在哈希旁边。
  • 评估速度比SHA256慢(在这种情况下,这并不是件坏事;这意味着攻击者需要更长的时间浏览他的字典)。
  • 它还提供了进行哈希计算所需的“键”;如果服务器单独存储密钥,那么哈希不会对攻击者有任何好处,除非他也得到了密钥。

哦,还有一件事;关于如何组合这两个密码的具体问题;嗯,散列函数和密码派生函数并不在乎;它们几乎可以处理任何事情。唯一需要小心的是确保以一种不会丢失信息的方式组合它们。例如,您不希望排他性--或者将它们放在一起,否则(作为一个微不足道的例子,两个密码"A“和"1”将与两个密码"B“和”2“一样散列)。一种简单而安全的组合方法是将这两个密码连接起来(如果这两个密码是"Alpha“和"Omega",那么实际上就会散列"AlphaOmega”。(注意:如果两个密码都是可变长度的,那么如果您想要变长,也要将其中一个密码连在一起;否则,两个密码"AB“和"C”将与两个密码"A“和”BC“一样散列)。

票数 2
EN

Cryptography用户

发布于 2012-02-23 07:36:03

“存储它们的最好的理论方法是什么,或者如何对它们进行加密,以便如果攻击者以某种方式得到加密的密码短语,就不能对这两个短语进行解密?”

如果你真的想加密,我想我会

推荐http://sourceforge.net/projects/ntru/

“我知道用蛮力,攻击者最终可以破解加密,

但是,怎样才能不让攻击者更容易地破坏它呢?“

最好的做法是完全不使用加密,而是使用氪石

“如果我们单独加密(用对称算法)并将它们存储在某个地方

(其实并不重要),第一个短语很容易受到字典攻击。“

嗯..。不完全是,我没听说过任何加密算法

字典里的攻击比蛮力还快。

“但我不确定我们将它们结合在一起对加密算法有何影响。”

从密码生成的东西可能会删除。

加密算法需要随机性。

“我们如何将它们结合在一起,会不会有弱点,

因为如果我们从统计学上分析

加密组合密码短语的例子(我猜在这里)?“

有可能,人们只是希望没有。

或者在分析算法之前没有办法知道,

加密算法和加密密码短语?

如果算法不是设计出来的,那么将它们结合起来

可能没有比单独加密更弱的了。

票数 0
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/1914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档