因此,我想实现服务器,它验证注册与captcha。首先,我考虑将captchas存储在服务器中,但后来我认为它会在缓存、内存方面遇到麻烦,如果我需要将它写入文件,等等。但是我有了一个天才的想法(可能是其他人已经做了),不如把captcha发送给客户,也发送加密的答案,当用户回答时,他发送captcha (或者它的摘要,如果它再大一点),我可以简单地从客户端解密答案。砰,我根本不需要存储海量的图像,而且我可以根据自己的意愿来放大这些图片!(不同的服务器可以发送captcha,不同的服务器可以为响应提供服务)。
现在,我有一个问题。我需要一个现在来加密脂肪钠中的东西。就像在这里,http://doc.libsodium.org/public-key_密码学/认证_encryption.html。现在,如果我每次都生成这个,发送给用户,让用户把它发回,那么它是公开的,这有什么意义?或者,如果我使用常量,那么,还有什么意义呢?服务器和客户端可以查找它。
我在这里该怎么办?在这种情况下,我应该使用常量现在,还是应该每次生成它,为什么?
发布于 2015-12-19 23:28:59
如果它是无状态的,则您的计划很容易被重放攻击。
无论最初发送了什么密文,客户端每次都可以使用相同的captcha+ciphertext进行响应。
使用一个timetamp+random字节作为一个现在。这不一定是秘密,只有钥匙必须保密。
您可以使用键控哈希,而不是加密captcha。
Hk(captcha) || timestamp || randombytes和k = secret || timestamp || randombytes。您可以为此使用crypto_auth()或crypto_generichash(),并使用192位秘密、32位粗时间戳和32位随机部分。Hk(captcha) || timestamp || randombytes || captchaH'k(captcha),并验证时间戳是否接近当前时间,并且H'k(captcha)与Hk(captcha)匹配。https://security.stackexchange.com/questions/103858
复制相似问题