Php 来自电子邮件地址的低级别安全哈希
我有两台服务器和一台客户端,这就是连接的工作方式: 服务器A=有很多这样的服务器,每个服务器对应于每个移动应用程序 服务器B=只有一个。用于收集某些数据的中央服务器 User=有很多这样的应用程序,它们使用多个不同的移动应用程序。 一个移动应用程序仅连接到一个服务器A和唯一的服务器B 这就是系统的工作原理:Php 来自电子邮件地址的低级别安全哈希,php,algorithm,security,hash,Php,Algorithm,Security,Hash,我有两台服务器和一台客户端,这就是连接的工作方式: 服务器A=有很多这样的服务器,每个服务器对应于每个移动应用程序 服务器B=只有一个。用于收集某些数据的中央服务器 User=有很多这样的应用程序,它们使用多个不同的移动应用程序。 一个移动应用程序仅连接到一个服务器A和唯一的服务器B 这就是系统的工作原理: 用户启动一个移动应用程序 移动应用程序要求用户注册。用户添加他的电子邮件、密码、姓名等。移动应用程序将数据发送到服务器A 服务器A为用户创建一个用户帐户。服务器A返回基于电子邮件的低级别安全
另外,我知道我可以让服务器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重新应用共享私钥,但所有这些都非常简单……感谢您的时间戳想法。这真是一个很好的补充。