Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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
Security 如何使服务器计算速度快,而客户端计算速度慢?_Security_Cryptography - Fatal编程技术网

Security 如何使服务器计算速度快,而客户端计算速度慢?

Security 如何使服务器计算速度快,而客户端计算速度慢?,security,cryptography,Security,Cryptography,服务器需要几毫秒或更少的时间来计算,而客户端需要几百毫秒 服务器将创建一个质询,将其发送给客户端,客户端将计算答案并将其发送给服务器,然后服务器将验证答案 更新:为什么?服务器有一个使用大量处理能力的功能。我不希望客户端能够通过每秒向该函数发送100个请求来恶意地使服务器过载。通过要求回答挑战,攻击者只能以计算答案的速度发送请求。首先让我说,我认为你走错了路 话虽如此,完成您描述的任务的一种方法是组合一个简单的谜题,该谜题由接收端强行完成。例如,您可以发送3或4个字符的密码的散列(合理快速地解决

服务器需要几毫秒或更少的时间来计算,而客户端需要几百毫秒

服务器将创建一个质询,将其发送给客户端,客户端将计算答案并将其发送给服务器,然后服务器将验证答案


更新:为什么?服务器有一个使用大量处理能力的功能。我不希望客户端能够通过每秒向该函数发送100个请求来恶意地使服务器过载。通过要求回答挑战,攻击者只能以计算答案的速度发送请求。

首先让我说,我认为你走错了路

话虽如此,完成您描述的任务的一种方法是组合一个简单的谜题,该谜题由接收端强行完成。例如,您可以发送3或4个字符的密码的散列(合理快速地解决),客户机需要找出密码(通过暴力)并将其发送回(如果您试图进行身份验证,则可能使用预共享密钥加密)

请理解,这不会阻止任何人恶意超载服务器。恶意攻击者仍然可以在收到谜题后立即断开连接(而不解决谜题),然后再次连接。如果攻击是分布式的,情况会变得更糟

编辑:


@尼克·约翰逊是对的。您还希望包含一个随机salt以防止预计算攻击。把盐和土豆条一起送去。它与客户端尝试的每个密码连接起来。

让我先说我认为你走错了路

话虽如此,完成您描述的任务的一种方法是组合一个简单的谜题,该谜题由接收端强行完成。例如,您可以发送3或4个字符的密码的散列(合理快速地解决),客户机需要找出密码(通过暴力)并将其发送回(如果您试图进行身份验证,则可能使用预共享密钥加密)

请理解,这不会阻止任何人恶意超载服务器。恶意攻击者仍然可以在收到谜题后立即断开连接(而不解决谜题),然后再次连接。如果攻击是分布式的,情况会变得更糟

编辑:


@尼克·约翰逊是对的。您还希望包含一个随机salt以防止预计算攻击。把盐和土豆条一起送去。它与客户端尝试的每个密码连接起来。

您所要求的被称为“工作证明”。这里有一个非常简单的例子:

  • 服务器生成一个随机的nonce,
    n
    ,并选取若干位,
    b
    ,然后将两者发送到客户端
  • 客户端计算
    h=sha1(n+x)
    ,其中
    x
    是任意后缀,
    h
    b
    '0'位结尾
  • 客户端将
    x
    发送回服务器作为工作证明
  • 这是因为预测安全哈希函数的输出是困难的,所以您唯一的选择是暴力。如果服务器要求一个
    b
    尾随0,则
    2^b
    散列中的一个平均值将满足该标准,这意味着他们必须平均执行
    O(2^(b-1))
    工作

    这种方法需要注意的一点是:如果您处理的是web客户机,那么您需要使工作证明足够简单,以便能够在Javascript中快速完成。但是与本机代码相比,javascript速度较慢,而且攻击者能够编写本机代码以更快地计算工作证明,因此与合法客户端相比,他具有很大的优势


    标准的替代方案虽然令人不快,但要求验证码。

    您要求的是所谓的“工作证明”。这里有一个非常简单的例子:

  • 服务器生成一个随机的nonce,
    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-可能吧。我不知道我问的问题会有多复杂。告诉我们更多关于你想做什么,也许我们可以帮助你。我可以想出很多方法来实现你所说的,但我不知道哪种方法适用