我对我的登录和验证系统有一个想法,但我想知道这是正确的想法还是已经在其他地方实现了。
为了尝试减轻一些攻击,在登录之前,id想向客户端提出一个挑战。所以我想向用户提出一个计算挑战。我需要以某种方式生成一个问题或某种代码,平均需要机器X秒来处理。答案是我可以快速计算和检查的。
例如,我知道哈希/加密算法需要时间,也许我可以使用一个简单的加密算法,生成一些随机的短长度密码和长长度关键字。然后我用密码加密关键字,并将其发送给客户端。
然后客户端必须随机猜测/检查密码,当它得到密码时,它会向我发送密钥。
例子:
Password:Foo
Length: 3
Answer: Bar
Keyword:123456
Output: encrypted(answer+keyword)->o3jubo3ibf32ib3o
发送->o3jubo3ibf32ib3o,答案:Bar。
然后,客户机处理这个问题,并尝试给出密码,猜测并检查前3个字母是否为bar。
当它找到答案时,它会将关键字和密码发回给我进行检查。我检查关键字是否匹配,如果匹配,我继续,如果不匹配。我试着用他们使用的密码解密这个挑战,看看它的前3个字母是否与答案相等。如果他们给我的密码前3个字母不等于密码,我会将IP列入黑名单5分钟左右,然后切断连接。
这看起来有用吗?
是否已为此创建库?
有c++中的示例可以看吗?
这种方法的最佳加密方法是什么?