如果攻击者拥有原始数据和加密数据,他们能否确定密码?

Bra*_*pit 13 encryption cryptography

如果攻击者有多个不同的项目(例如:电子邮件地址)并且知道每个项目的加密值,攻击者是否可以更轻松地确定用于加密这些项目的秘密密码?意思是,他们能否在不诉诸蛮力的情况下确定密码?

这个问题可能听起来很奇怪,所以让我提供一个用例:

  1. 用户使用他们的电子邮件地址注册站点
  2. 服务器向该电子邮件地址发送确认URL(例如:https://my.app.com/confirmEmailAddress/bill%40yahoo.com)
  3. 攻击者可以猜出确认URL,因此可以使用其他人的电子邮件地址注册,并"确认"它,而无需登录该人的电子邮件帐户并查看确认URL.这是个问题.
  4. 我们不会通过URL发送电子邮件地址纯文本,而是通过密码密码发送.
  5. (我知道攻击者仍然可以拦截服务器发送的电子邮件,因为电子邮件是纯文本,但在这里请耐心等待.)
  6. 如果攻击者随后注册了多个免费电子邮件帐户并看到多个URL,每个URL都有相应的加密电子邮件地址,攻击者是否可以更轻松地确定用于加密的密码?

替代方案

我可以发送一个随机数或单向哈希的电子邮件地址(加上随机盐).这消除了存储秘密密码短语,但这意味着我需要在数据库中存储该随机数/散列.上面的原始方法不需要存储在数据库中.

我倾向于单向散列存储在数据库中,但我仍然想知道答案:确实有多个未加密的电子邮件地址和它们的加密对应物使得更容易确定密码短语用过的?

Rob*_*lan 12

你所描述的是一种已知的明文攻击.经典密码非常容易受到这种攻击,但现代密码的目的是抵制它.

你会想要了解一下加密.


Eri*_*ski 5

是的,它确实让它变得更容易.通常,攻击者拥有的信息越多,他们的工作就越容易.该具体示例称为已知明文攻击.

  • 但是对于一个设计良好的加密方法来说,它仍然很难以解决问题. (5认同)
  • 现代密码的设计不仅可以抵抗已知的明文攻击,还可以抵抗自适应选择密文攻击.假设你的原语很弱,设计你的协议是一个很大的错误; 选择受信任的原语. (4认同)

Dav*_*har 3

尽管通过一些研究,您可能可以选择足够强大的加密方法来抵御已知明文攻击,但仅仅为了避免在数据库中存储哈希值真的值得吗?

使用单个密码来加密所有注册请求似乎添加了不必要的单点漏洞:如果攻击者确实以某种方式破解了该密码,他们可以注册任意数量的帐户。另一方面,如果您为每个新帐户请求生成一次性哈希(例如,电子邮件地址+随机数)来验证确认 URL,那么即使黑客拦截了帐户 A 的确认电子邮件,也不会更接近您。访问 B、C 或 D。

无论如何,您可能希望在数据库中存储一些有关确认过程的状态信息:确认 URL 的有效时间可能应该有一个时间限制。