【问题标题】:Authenticating email address without being able to view email address验证电子邮件地址但无法查看电子邮件地址
【发布时间】:2012-04-08 08:04:31
【问题描述】:

假设有以下想象的场景:

  • 我有一个用于招募新兵的网站。
  • 新兵和只有新兵可以在此站点上注册。 - 最简单的身份验证方法是获取预先授权的电子邮件地址列表。但是,军方显然不会公开他们的电子邮件地址列表。
  • 如何验证这些人的身份才能注册?

我最初的想法是我可以获得电子邮件地址的sha3 哈希值。然后,当人们注册时,我会根据数据库检查他们输入的电子邮件地址的sha3。基本上,这将是一种在不知道电子邮件地址的情况下获取电子邮件是否在系统中的布尔值的方法。

这听起来是不是一种现实的方法,可以确保电子邮件地址的匿名性?有更好的想法来实现这一点吗?

【问题讨论】:

  • 你的想法对我来说听起来很不错,当然假设新兵有一个可以用于所有事情的电子邮件地址。

标签: python security encryption


【解决方案1】:

听起来不错,只要“军方”确信(无论正确与否)哈希是真正不可逆转的,并且愿意信任您的哈希地址列表。 (顺便说一句,sha5 是什么?Afaik sha3 是最新一代)。

如果他们连加密哈希列表都不委托给您,另一种选择是委托身份验证:您通过安全连接将电子邮件地址转发给军方,他们会告诉您是否可以。它会更慢,但您只需在注册时执行一次。

【讨论】:

    【解决方案2】:

    我认为只有电子邮件地址的哈希是不安全的,因为哈希算法是不可逆的,但理论上可能有不正确的电子邮件与正确的电子邮件具有相同的哈希。 md5 哈希算法是正确的,理论上任何其他算法都是正确的。

    我建议使用某种盐(附加哈希函数负载)或个人注册密钥,因此永远不要使用 md5。

    使用您知道的盐和“军事”知道的信息,您可以只接收“军事”的哈希值,并且请确保加密足够公平,可以通过电子邮件识别新兵。但是这种技术仍然容易受到随机哈希重合的影响。

    可能,确保新兵电子邮件真正有效的最佳方法是在“军事”方面为新兵提供唯一的注册码,而不是他们需要给你成对的注册码和代码的哈希值以及相应的电子邮件.比每个新兵都需要提供该注册码,您将能够根据新兵的电子邮件和注册码重新计算新兵的个人哈希值。

    第二种方式的好处是,如果“军事”不仅会给你成对的代码/散列,而且给你每个散列的代码列表,那么即使你也不能轻易将散列强行强制到电子邮件中,只有其中一个是正确的。

    更新:偏执狂的高潮方式。你从“军方”收到的哈希值是新兵人数的两倍。每个新兵都会收到唯一的注册码。比您需要先计算注册码哈希并检查您是否拥有它。比您需要将此哈希与电子邮件组合并检查您是否有第二个哈希。这样一来,您将永远无法自己撤消电子邮件。

    【讨论】:

    • 理论上的碰撞可能性是一个有争议的问题。已经很难找到碰撞了。查找同样具有 RFC822 电子邮件地址格式的冲突必须要困难几个数量级。
    【解决方案3】:

    这是一个可行的零知识证明。但是,如果你有军方的合作,人们会认为你可以做得更好......你可以从军方获得一个(否则无意义的)序列号和初始密码,然后让新兵使用登录那个。

    这将解决人们与电子邮件地址没有 1:1 关系的问题,并且也更难猜测,因为您需要猜测密码和序列号。

    【讨论】:

      猜你喜欢
      • 2014-06-12
      • 1970-01-01
      • 2018-03-13
      • 2011-09-02
      • 2013-02-20
      • 2014-03-12
      • 1970-01-01
      • 1970-01-01
      • 2015-09-09
      相关资源
      最近更新 更多