Security 如何使服务器计算速度快,而客户端计算速度慢?
服务器需要几毫秒或更少的时间来计算,而客户端需要几百毫秒 服务器将创建一个质询,将其发送给客户端,客户端将计算答案并将其发送给服务器,然后服务器将验证答案Security 如何使服务器计算速度快,而客户端计算速度慢?,security,cryptography,Security,Cryptography,服务器需要几毫秒或更少的时间来计算,而客户端需要几百毫秒 服务器将创建一个质询,将其发送给客户端,客户端将计算答案并将其发送给服务器,然后服务器将验证答案 更新:为什么?服务器有一个使用大量处理能力的功能。我不希望客户端能够通过每秒向该函数发送100个请求来恶意地使服务器过载。通过要求回答挑战,攻击者只能以计算答案的速度发送请求。首先让我说,我认为你走错了路 话虽如此,完成您描述的任务的一种方法是组合一个简单的谜题,该谜题由接收端强行完成。例如,您可以发送3或4个字符的密码的散列(合理快速地解决
更新:为什么?服务器有一个使用大量处理能力的功能。我不希望客户端能够通过每秒向该函数发送100个请求来恶意地使服务器过载。通过要求回答挑战,攻击者只能以计算答案的速度发送请求。首先让我说,我认为你走错了路 话虽如此,完成您描述的任务的一种方法是组合一个简单的谜题,该谜题由接收端强行完成。例如,您可以发送3或4个字符的密码的散列(合理快速地解决),客户机需要找出密码(通过暴力)并将其发送回(如果您试图进行身份验证,则可能使用预共享密钥加密) 请理解,这不会阻止任何人恶意超载服务器。恶意攻击者仍然可以在收到谜题后立即断开连接(而不解决谜题),然后再次连接。如果攻击是分布式的,情况会变得更糟 编辑:
@尼克·约翰逊是对的。您还希望包含一个随机salt以防止预计算攻击。把盐和土豆条一起送去。它与客户端尝试的每个密码连接起来。让我先说我认为你走错了路 话虽如此,完成您描述的任务的一种方法是组合一个简单的谜题,该谜题由接收端强行完成。例如,您可以发送3或4个字符的密码的散列(合理快速地解决),客户机需要找出密码(通过暴力)并将其发送回(如果您试图进行身份验证,则可能使用预共享密钥加密) 请理解,这不会阻止任何人恶意超载服务器。恶意攻击者仍然可以在收到谜题后立即断开连接(而不解决谜题),然后再次连接。如果攻击是分布式的,情况会变得更糟 编辑:
@尼克·约翰逊是对的。您还希望包含一个随机salt以防止预计算攻击。把盐和土豆条一起送去。它与客户端尝试的每个密码连接起来。您所要求的被称为“工作证明”。这里有一个非常简单的例子:
n
,并选取若干位,b
,然后将两者发送到客户端h=sha1(n+x)
,其中x
是任意后缀,h
以b
'0'位结尾x
发送回服务器作为工作证明b
尾随0,则2^b
散列中的一个平均值将满足该标准,这意味着他们必须平均执行O(2^(b-1))
工作
这种方法需要注意的一点是:如果您处理的是web客户机,那么您需要使工作证明足够简单,以便能够在Javascript中快速完成。但是与本机代码相比,javascript速度较慢,而且攻击者能够编写本机代码以更快地计算工作证明,因此与合法客户端相比,他具有很大的优势
标准的替代方案虽然令人不快,但要求验证码。您要求的是所谓的“工作证明”。这里有一个非常简单的例子:
n
,并选取若干位,b
,然后将两者发送到客户端h=sha1(n+x)
,其中x
是任意后缀,h
以b
'0'位结尾x
发送回服务器作为工作证明b
尾随0,则2^b
散列中的一个平均值将满足该标准,这意味着他们必须平均执行O(2^(b-1))
工作
这种方法需要注意的一点是:如果您处理的是web客户机,那么您需要使工作证明足够简单,以便能够在Javascript中快速完成。但是与本机代码相比,javascript速度较慢,而且攻击者能够编写本机代码以更快地计算工作证明,因此与合法客户端相比,他具有很大的优势
标准的替代方案虽然令人不快,但需要验证码。告诉我们更多关于您正在尝试做的事情,也许我们可以帮助您。我可以想出很多方法来做你说的事情,但我不知道哪种方法适用。你不认为有。。。限制请求的更直接的方法?普通的DoS攻击应该尽量避免,DDoS更难,但可能还有更简单的解决方案。你可以抵御简单的DoS攻击,但你无法通过这种方式战胜DDoS。在允许客户机使用服务器的计算密集型功能之前,您需要寻找某种身份验证。@delnan-可能吧。我不知道我问的问题会有多复杂。告诉我们更多关于你想做什么,也许我们可以帮助你。我可以想出很多方法来实现你所说的,但我不知道哪种方法适用