
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
潍坊达内小编下面跟大家讨论实现上的问题。
现实中,用户的算力是不均衡的。有人用的是神级配置,也有的是古董 机。这样,加密强度就很难设定。
如果古董机用户登录会卡上几十秒,那肯定是不行的。对于这种情况,只 有以下选择:
强度固定
强度可变
1.强度固定
根据大众的配置,制定一个适中的强度,绝大多数用户都可接受。
但如果超过规定时间还没完成,就把算到一半的 Hash 和步数提交上来,剩 余部分让服务器来完成。
[前端] 完成 70% —-> [后端] 计算 30%
不过,这需要「可序列化」的算法,才能在服务端还原进度。如果计算中 会有大量的临时内存,这种方案就不可行了。
相比过去 100% 后端慢加密,这种少量用户「前后参半」的方式,可以节 省不少服务器资源。
对于请求协助的用户,也必须有一定的限制,防止恶意透支服务器资源。
2.强度可变
如果后端不提供任何协助,那只能根据自身条件做取舍了。配置差的用 户,就少加密一点。
用户注册时,加密算法不限步数放开跑,看看特定时间里能算到多少步:
# [注册阶段] 算力评估(线程 1 秒后终止)while x = hash(x) step = step + 1end
这个步数,就是加密强度,会保存到他的账号信息里。
和盐值一样,强度也是公开的。因为在登录时,前端加密需要知道这个强 度值。
# [登录阶段] 先获得 stepfor i = 0 ~ step x = hash(x)end
这个方案,可以让高配置的用户享受更高的安全性;低配置的用户,也不 会影响基本使用。(用上好电脑还能提升安全性,很有优越感吧~)
但这有个重要的前提:注册和登录,必须在性能相近的设备上。
如果是在高配置电脑上注册的账号,某天去古董机登录,那就悲剧了,可 能半天都算不出来。。。
3.动态调整方案
上述情况,现实中是普遍存在的。比如 PC 端注册的账号,在移动端登 录,算力可能就不够用。
如果没有后端协助,那只能等。要是经常在低端设备上登陆,那每次都得 干等吗?
等一两次就算了,如果每次都等,不如重新估量下自己的能力吧。把加密 强度动态调低,更好的适应当前环境。
将来如果不用低端设备了,再自动的调整回来。让加密强度,能动态适应 常用的设备的算力。
实现原理,和上一节的自动更换盐值类似。
4.异想天开方案
下面 YY 一个脑洞大开的方案,前提是网站有足够大的访问量。
如果当前有很多在线用户,它们不就是一堆免费的计算节点吗?计算量大 的问题,扔给他们来解决。
不过这样做也有一些疑虑,万一正好推送给了坏人怎么办?
显然,不能把太多的敏感数据放出去。节点只管计算,完全不用知道、也 不能知道这个任务的最终目的。
但是,如果遇到恶作剧节点,故意把数据算错怎么办?
所以不能只推送给一个节点。多选几个,最终结果一致才算正确。这样风 险概率就降低了。
相比 P2P 计算,网站是有中心、实名的,管理起来会容易一些。对于恶作 剧用户,可以进行惩罚;参与过帮助的用户,也给予一定奖励。
想象就到此,继续讨论实际的。