Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 来自电子邮件地址的低级别安全哈希_Php_Algorithm_Security_Hash - Fatal编程技术网

Php 来自电子邮件地址的低级别安全哈希

Php 来自电子邮件地址的低级别安全哈希,php,algorithm,security,hash,Php,Algorithm,Security,Hash,我有两台服务器和一台客户端,这就是连接的工作方式: 服务器A=有很多这样的服务器,每个服务器对应于每个移动应用程序 服务器B=只有一个。用于收集某些数据的中央服务器 User=有很多这样的应用程序,它们使用多个不同的移动应用程序。 一个移动应用程序仅连接到一个服务器A和唯一的服务器B 这就是系统的工作原理: 用户启动一个移动应用程序 移动应用程序要求用户注册。用户添加他的电子邮件、密码、姓名等。移动应用程序将数据发送到服务器A 服务器A为用户创建一个用户帐户。服务器A返回基于电子邮件的低级别安全

我有两台服务器和一台客户端,这就是连接的工作方式:

服务器A=有很多这样的服务器,每个服务器对应于每个移动应用程序

服务器B=只有一个。用于收集某些数据的中央服务器

User=有很多这样的应用程序,它们使用多个不同的移动应用程序。 一个移动应用程序仅连接到一个服务器A和唯一的服务器B

这就是系统的工作原理:

  • 用户启动一个移动应用程序

  • 移动应用程序要求用户注册。用户添加他的电子邮件、密码、姓名等。移动应用程序将数据发送到服务器A

  • 服务器A为用户创建一个用户帐户。服务器A返回基于电子邮件的低级别安全哈希

  • 移动应用程序接收哈希并将其发送到服务器B(以及其他数据,如电子邮件、坐标、移动应用程序名称、版本等)

  • 服务器B接收电子邮件和散列,并使用相同的函数从电子邮件中重新计算散列。如果散列计算结果与移动应用程序发送的散列相同,则其他数据(如坐标等)将添加到服务器B的数据库中

  • 所以真正的问题是:我是否有现成的哈希算法,或者我应该通过添加一堆md5()、sha1()、strev()、分块、将字母转换为其他字母等来创建一个哈希算法(这是非常简单的解释)

    最理想的现成算法是只需要在两台服务器上使用相同的salt的算法

    这些数据对除我之外的任何人来说都没有任何价值,我们想把所有这些放在安全哈希后面的唯一原因是为了防止麻烦制造者向我们的数据库发送垃圾数据


    另外,我知道我可以让服务器A向服务器B发送一个随机散列,然后给用户相同的散列,这就足够了,但我希望将发送的数据保持在最低限度,因为服务器B每秒/分钟都会占用大量连接。

    听起来你基本上是在寻找一个预先共享的秘密,服务器A和B都知道,但其他地方没有披露。您希望能够给用户一个令牌,他可以从服务器a携带到服务器B,这将向服务器B证明用户以前与服务器a交谈过;不向用户透露服务器A和B之间共享的秘密

    这里最好的选择可能是,或消息签名。为两台服务器提供随机密钥。被签名的消息本质上是电子邮件地址,因此服务器A使用其密钥对消息进行“签名”。服务器B重复该过程并比较两个签名


    请注意,如果任何人在任何时候拦截签名,他都可以发起重播攻击(只需将签名重新用于任意新请求)。如果用户经常与服务器A交谈,您可以通过在签名哈希中包含时间戳(用户也需要将其与电子邮件地址一起发送)来最小化此类重播攻击,并通过这种方式限制签名的有效期。

    因此,基本上这里的秘密是算法(而不是任何数据),您要证明的是,用户在与服务器B对话之前已经与服务器A进行了对话?我假设服务器A和B之间没有共享状态(访问相同的数据库、API或类似的东西)?deceze,两者都正确。再次感谢下面的正确答案。Re“服务器B重复该过程并比较两个签名。”-让B使用a的公钥验证a的签名似乎更合适,而不是B重新应用共享私钥,但所有这些都非常简单……感谢您的时间戳想法。这真是一个很好的补充。