用于应用服务器交换的原始 Diffie-Hellman 密码学

Primitive Diffie-Hellman cryptography for app-server exchange

正在开发一款允许用户通过点击来呼叫某人的应用程序。通话结束后,将启动一个新的 activity,即 FeedbackActivity,用户会在其中输入有关他们所呼叫的人的反馈,该反馈已上传,服务器会随着时间的推移处理这些数字并生成 "rating."

但是,该应用没有传统的 "log in and password" 行为...(重要的是它没有这个)所以没有什么可以阻止用户一遍又一遍地恶意输入负面反馈再次...或更糟,正在加载

http://www.example.com/feedback.php?personICalled=334875634&feedback=blahblahblah

进入浏览器并一遍又一遍地重新加载它。

因此,我们需要确保人们只能对实际打电话的人提供反馈。

我想在用户单击 "call." 时将某种 "token" 发送到服务器,然后服务器保存此令牌。

然后,当他们随后上传反馈时,它看起来像:

http://www.example.com/feedback.php?personICalled=334875634&feedback=blahblahblah,&token=[same token sent prior]

这样,服务器会检查是否曾经保存过这样的令牌,如果是,则保存反馈,否则不保存。

或者,更好的是,可能有一个只有服务器(和应用程序)知道的秘密公式,其中 [根据反馈检查令牌] 是 [令牌上传于 [=49] 的(复杂数学)函数=]通话时间].

但是,很明显,通过查看应用程序源代码,或者随着时间的推移观察 y=f(x) 关系并找出公式,这对于某人来说并不难理解...并且有成为更好的方法。

我读到了 Diffie-Hellman 密钥交换...在我看来,必须有一种方法可以实现此目的...但我不是哈佛大学毕业生,它是虽然因为离散数学......而且我对密码学并不是特别了解......而且维基页面让我头疼!!!!

以这张图为例

如果有人能告诉我术语 "Common paint," "Secret Colors," "Public Transport" 和 "Common Secret" 是如何转化为我的场景的,我想我也许能够弄明白.

我猜 Public 交通 = 互联网...我说到这里了。

首先,Diffie Hellman 不会解决您的问题。加密有很多可能出错的地方,所以除非你真的知道你需要它并且知道你想要它做什么,否则不要玩它。

您的真实需求是什么?用户每次通话只能输入一次反馈。你不需要加密来解决这个问题。

当用户拨打电话时,生成令牌。将该令牌发送给用户并将其存储在数据库中。通话结束后,通过提供与令牌关联的反馈,允许用户 "consume" 令牌。服务器验证令牌是否存在于数据库中(并且尚未被使用)。假设它在那里,接受反馈然后从数据库中删除令牌(它已被消耗)。如果不存在,不接受反馈。

您还可以通过使用令牌存储时间(生成时间)来改进。如果他们过早尝试使用它,请不要让他们提供反馈。如果令牌在某个最大生命周期后未被消耗,则使令牌过期。这可以防止人们重复调用无限期存在于您的数据库中的用户或令牌 (DoS)。

您也可以通过 IP 地址限制人员。允许用户在任何合理的时间段(一天)内仅从一个 IP 地址接收一个评级。 IP 地址可以与数据库中的反馈一起存储。