我希望该用户/攻击者加密数据并发送到服务器。现在我想要一种与标准算法完全相反的算法(快速使用,难以解密),即使用服务器发送的密钥加密像密码这样的数据非常困难,以防止随机攻击,但非常容易解密所以服务器在验证用户时消耗的时间非常少,但是攻击者很难用服务器发送的密钥加密新的试用密码。
我再次谈论SSL。
答案 0 :(得分:5)
一个可能工作得很好的愚蠢想法是在加密方案中附加一个“谜题”。这样做是为了将加密数据发布到服务器,你必须解决一些已知的NP难问题(例如,找到一个令人满意的大布尔公式赋值)并发送答案。然后,服务器可以轻松验证解决方案,但假设P≠NP,尝试发布数据的客户必须执行超多项额外工作,以防止它们充斥您的服务器。
希望这有帮助!
答案 1 :(得分:5)
听起来好像你正在寻找一个proof-of-work方案 - 这个方案的一个应用就是你所描述的:强迫客户做一定数量的工作,所以要防止它从请求中充斥服务器。
答案 2 :(得分:0)
您可以使用RSA签名(例如PKCS#1)。
只有当您的服务器使用您之前分发的私有部分的某个RSA密钥进行签名时,您的服务器才可以接受答案。服务器使用公共部分。
RSA具有以下特性:当您选择一个小的公共指数(通常称为e,例如e=3
)或x10或x100时,验证比签名快得多,具体取决于密钥长度和是否您的客户足够聪明,可以使用CRT。
RSA密钥生成速度非常慢,但只要您在协议中包含挑战以阻止重放攻击,就可以为所有客户端使用一个密钥。
最后,RSA签名不会给你机密性。