快速的一种方法和安全的哈希算法

问题描述

我一直在研究现有的哈希算法,以对使用基本auth进行身份验证的小型微服务的密码进行哈希处理。

根据社区标准,我选择了bcrypt算法来对密码进行哈希处理。但是在使用Apache Benchmark对服务器进行基准测试之后,我发现90%的cpu周期都花在了验证密码上。为了提供上下文,t3.large能够在不进行身份验证的情况下处理60 req / sec,而在具有身份验证逻辑的情况下只能处理6 req / sec。

我想到了使用python中可用的passlib库进行基准测试,这是使用认设置的passlib进行100次迭代的结果-

print (timeit.timeit('my_ctx.verify("password",hash_sha256)',setup=setup,number=100))
40.74972726893611
print (timeit.timeit('my_ctx.verify("password",hash_md5)',number=100))
0.03434068092610687
print (timeit.timeit('my_ctx.verify("password",hash_des)',number=100))
0.01271090202499181
print (timeit.timeit('my_ctx.verify("password",hash_bcrypt)',number=100))
25.593560334993526
print (timeit.timeit('my_ctx.verify("password",hash_sha512)',number=100))
46.78381339798216
print (timeit.timeit('my_ctx.verify("password",hash_pbkdf2)',number=100))
2.236785114975646
print (timeit.timeit('my_ctx.verify("password",hash_argon2)',number=100))
12.668332702014595

我知道在幕后进行多轮回合以将其哈希化。 将sha256的回合数更改为1000后,存在显着差异-

timeit.timeit('sha256_crypt.hash("password",rounds=1000)',number=100)

所以我的问题是-

对于使用基本身份验证而不是基于令牌的身份验证或任何其他方式的小型微服务,我想问一下采用哪种最佳方法,以便将密码安全地驻留在由Amazon托管的多级安全数据库中服务器?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)