python - 我在 python 中进行注册操作的最佳时间是什么时候?

标签 python registration tornado crypt

在注册操作中,有一个密码密码,据我所知,它无法并行化,因为如果它进行 key 派生操作(例如PBKDF2),那么它需要以前的值,那么我猜它是线性的操作?

让这个过程变慢,对用户来说是有好处的,因为他的密码对于暴力破解来说会更强,但还有另一个问题:DOS 攻击!如果每个注册操作需要 1 秒,那么使用像 NGinx 这样的负载均衡器每秒会处理 8 个同时注册操作,这会阻塞应用程序吗?而如果我们添加其他操作,比如说:2秒,那么应用程序就不好了?

那么,有什么建议吗?使用 Tornado 并不能解决问题,因为据我所知,Tornado 在 I/O 操作中进行异步操作...

最佳答案

Key stretching功能类似于 PBKDF2允许您通过调整迭代计数(或其他函数的其他等效参数)来控制散列密码所需的时间。您正确地观察到,在使密码难以被暴力破解和避免 DoS 攻击之间存在权衡。您需要选择迭代计数来平衡这两个考虑因素。

请记住,现代 CPU 每秒可以计算数百万次哈希迭代。即使您使用的迭代计数(例如,仅 1000 次)仍然使破解密码比根本不迭代哈希要困难 1000 倍,即使使用 1000 次迭代对单个密码进行哈希处理只需要大约一毫秒。

还有其他方法可以避免或减轻登录 DoS 攻击。例如,您可以实现基于 IP 的限制,以便每个 IP 地址每分钟只能进行有限次数的登录尝试。当然,分布式 DoS 攻击可以绕过这个问题,但这仍然是任何潜在攻击者需要克服的障碍。

此外,如果您实现 login anti-CSRF tokens (您应该这样做),它们还可以通过在进行任何登录尝试之前要求额外的往返来获取 token 来保护您免受某些简单类型的登录 DDoS 攻击。 CAPTCHA这可能是处理登录 DoS 尝试的另一种有用方法。最后,您可能希望将所有登录请求限制到一组单独的服务器和/或进程,并具有适当的资源限制,这样即使登录表单上成功的 DoS 攻击也不会导致其余部分崩溃。 > 您网站的内容。

如果您真的想变得更奇特,您甚至可以要求客户端提交加密 proof of work或多或少相当于散列密码的工作。例如,您可以向客户端发送一个随机字符串,并要求它发回该字符串的后缀,以便随机字符串加上后缀哈希值以 n 零位结尾,其中 2< super>n 大约是您的迭代次数。存在JavaScript crypto libraries您可以使用它来实现此类系统的客户端。

关于python - 我在 python 中进行注册操作的最佳时间是什么时候?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13838019/

相关文章:

javascript - 除非输入所有数据,否则不要提交

windows - 如何调试regsvr32编译后DLL注册异常?

python - 结合 Tornado 和 zmq ioloops : Connection reset by peer exception

java - 这个 SQL 会导致任何问题吗?

python - 删除后,如果从base.py 检查,仍然出现mysqlclient 版本错误?

android - DJI Mobile Sample Sdk Android - SDK 注册失败 [dji-sdk]

python - 使用 Tornado 上传文件

python - 分析 Tornado/Asyncio 时哪些函数是免费的?

python - 在 cython 中修剪一个 numpy 数组

python - 如何在 python 中的字符串之前执行 C# @ @