验证电子邮件地址,但无法查看电子邮件地址

时间:2012-03-23 18:33:15

标签: python security encryption

假设以下想象的场景:

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

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

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

3 个答案:

答案 0 :(得分:1)

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

如果他们不会委托你加密加密列表,那么替代方法就是委派身份验证:你通过安全连接将电子邮件地址转发给军方,他们会告诉你它是否正常。它会慢一些,但你只需要在注册时做一次。

答案 1 :(得分:0)

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

我建议使用某种盐(额外的哈希函数有效负载)或个人注册密钥,因为不要使用md5。

使用你知道的盐和“军事”知道你可以从“军事”中获得哈希,并且确信加密是公平的,可以通过电子邮件识别新兵。但是这种技术很容易受到随机哈希重合的影响。

或许,确保招募电子邮件真正有效的最佳方法是在“军事”方面为新兵提供唯一的注册码,而不是他们需要为您提供成对的注册码以及代码的哈希和相应的电子邮件。每个新兵都需要提供该注册码,您才能从他的电子邮件和注册码中重新计算新兵的个人哈希值。

第二种方式的好处是,如果“军事”不仅会为您提供代码/散列对,而且每个散列的代码列表,您甚至无法轻易地将哈希强制插入电子邮件中,其中只有一个是正确的。

更新:偏执狂的高潮方式。你从“军事”中得到的一些哈希值比新兵数量多两倍。每位新员都会收到唯一的注册码您需要先计算注册码哈希,然后检查是否有。您需要将此哈希与电子邮件结合使用,并检查是否有第二个哈希值。这样您就无法自行转发电子邮件。

答案 2 :(得分:0)

这是一个可行的零知识证明。但是,如果你有军队的合作,你会认为你可以做得更好......你可以从军方获得一个(其他非感性的)序列号和初始密码,然后让新兵登录使用这一点。

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