|  |      1lhbc      2017-03-16 21:08:06 +08:00 用 SHA256 | 
|  |      2egen      2017-03-16 21:11:17 +08:00 bcrypt 可以调节复杂度的呀,你设置了多少? | 
|  |      3stewforani OP @lhbc 如果服务器用的是 bcrypt 保存密码,那么客户端这边需要怎么处理密码? | 
|  |      4stewforani OP @egen 是哪个参数 你知道吗? | 
|  |      5cevincheung      2017-03-16 21:14:18 +08:00 @stewforani #4 cost | 
|  |      6stewforani OP @cevincheung 什么意思?大神 | 
|  |      7egen      2017-03-16 21:18:44 +08:00 @stewforani #4  不知道你用的是哪个库,一般会有一个 ROUNDS 参数,默认的可能是 10 或者 12 ,你可以调低到 8 看看,一般有效值会在 4 到 31 之间。 调整 rounds 参数不会影响旧密码的解密,如果后面你觉得可以性能上来了可以再调高然后更新旧密码即可。 | 
|      8maemual      2017-03-16 21:53:56 +08:00  2 给服务端做啊,干嘛要在客户端做。 | 
|      9AbrahamGreyson      2017-03-16 21:56:55 +08:00 via iPhone 楼上说得才是真理,客户端环境不可控,离复杂度设置多少都不合适。 | 
|  |      10yidinghe      2017-03-16 23:39:02 +08:00  1 BCrypt 的本质就是要耗电,所以如果楼主不想让用户看到自己在耗电名单上名列前茅的话。。。 | 
|      11honeycomb      2017-03-17 00:26:18 +08:00 @stewforani  现在还有新的 argon2 算法 | 
|  |      12yangqi      2017-03-17 00:27:40 +08:00 上 https 然后服务器端加密 | 
|  |      13lslqtz      2017-03-17 01:47:53 +08:00 | 
|      14maemual      2017-03-17 08:28:44 +08:00 via iPhone @lslqtz 1 、服务端还不需要节省这种负担 2 、如果会被中间人,被人截获密码和被截获 bcrypt 之后的结果并没有什么区别 | 
|  |      15lhbc      2017-03-17 08:49:00 +08:00 via iPhone @maemual 2. 避免大批量泄漏明文密码。最好就是在客户端 hash 一次,服务器加 salt 再 hash 若干次。 | 
|      17maemual      2017-03-17 08:56:39 +08:00 @lslqtz #16 服务端性能不够可以靠堆机器解决,客户端性能不够准备靠堆什么解决。更何况还没听说哪家穷到连跑 bcrypt 能成为性能瓶颈的。 | 
|  |      20momocraft      2017-03-17 09:04:18 +08:00 同感,想不出在客户端做 bcrypt 有意义的场景 | 
|  |      23linbiaye      2017-03-17 09:21:48 +08:00 @lhbc 人家都说走 tls 了,哪里还有什么明文了。 事实标准做法就是登录信息走 https/tls ,服务器端 BCrypt ( salt+hash )。没什么特殊需求就是跟着标准走啊。 在 C 端做 hash 就得意味着你在手机端 /web 端 /pc 客户端都得做。 | 
|  |      24momocraft      2017-03-17 09:24:00 +08:00 在客户端计算短密码的 bcrypt hash 再明文传输不比强制使用 72byte 密码更安全。你再想想。 | 
|  |      25lslqtz      2017-03-17 09:51:38 +08:00 via iPhone | 
|      26BOYPT      2017-03-17 09:53:52 +08:00 那些认为 bcrypt 更安全的人一个主要理由是 bcrypt 比 sha 系列算法慢…… | 
|  |      27chineselittleboy      2017-03-17 09:58:27 +08:00 想知道以后 web 端搞 bcrypt 方便不 | 
|  |      28linbiaye      2017-03-17 10:12:27 +08:00  1 @lslqtz 你这和我说的啥。你真的服务器端这么做么?架构做成这样就得改。上了规模的架构做成这样也可以开了做架构的了。 处理用户登录的计算量考虑什么性能。除非你的所有服务就是登录。 | 
|      30alamaya      2017-03-17 10:24:07 +08:00 https,服务端加密,你 app 被爆破了,啥加密都没用 | 
|  |      31lhbc      2017-03-17 10:35:35 +08:00 via iPhone @linbiaye TLS 里就是明文的。到了服务器也是明文的。能通过技术手段还原明文就是不可接受的。 各种客户端计算 SHA 不都是 10 行以内代码的事吗?又不需要自己写 SHA 算法。 | 
|  |      32linbiaye      2017-03-17 10:46:48 +08:00 @lhbc 只能说你们牛逼, PKI 都不值得信任。 TLS 这套本身就是为了防各种攻击,本来就是用作来安全传输。理论上没有什么加密是不可还原的,不过是时间问题罢了。 | 
|      35xiaolanglang      2017-03-17 10:57:20 +08:00 防范中间人要靠 https ,使用 http 提交 bcrypt 后的密码与直接提交明文密码其实没有多少区别…… | 
|  |      36lhbc      2017-03-17 11:57:02 +08:00 via iPhone  2 @linbiaye 不是不信任 PKI ,我说了安全取决最薄弱的环节。 如果客户端通过 TLS 发送明文密码,路上是加密的,但在服务器看来,就是明文。我说的不是 SHA 碰撞。 网站代码,基础组件和框架,运维,这些都是有条件接触到明文密码的。 所以,让客户的明文密码尽量不离开客户端。 | 
|  |      37ryd994      2017-03-17 12:14:45 +08:00  1 @lhbc 客户端加密不能增加安全性,重放攻击就好了。 hash 的密文已经成为实质上的明文密码 按你的做法:运维接触到了 hash ,运维只需要重放 /伪造请求,就可以登录 要纠结运维能不能接触密码,怎么不纠结客户端安不安全,中个密码钩子什么都没了 要求更高安全性的场合不应使用密码验证身份,比如用客户端证书,硬件密钥, OTP 这些 | 
|  |      38momocraft      2017-03-17 12:18:18 +08:00 以不传送明文这个目的来说,没有理由认为客户端计算 bcrypt (72byte) 会比计算加盐 sha512 更安全。 所以问题又回到 "图什么" | 
|  |      39lhbc      2017-03-17 13:25:01 +08:00 via iPhone  1 @ryd994 一定程度上能防止明文密码泄漏和撞库。 比如说,运维 /入侵者拿到 hash ,能重放,但无法拿去撞库。 另外,有些不懂安全的开发,谁知道他拿着明文会干嘛……也许直接发个邮件给客户说你改了密码,新密码是 xxx 比如某旅游网站,在日志里记录信用卡的安全码。 更高等级的安全就是另外一码事了。 | 
|  |      40lslqtz      2017-03-17 16:40:13 +08:00 | 
|  |      41jarlyyn      2017-03-17 17:33:44 +08:00 | 
|  |      42spongebobsun      2017-03-17 19:04:29 +08:00 https://github.com/PuffOpenSource/Puff-Android 可以参考下 https://github.com/PuffOpenSource/Puff-Android/blob/master/app/src/main/java/sun/bob/leela/runnable/CryptoRunnable.java 这个 其他代码有点乱,还没时间重构…… 我觉得我这个项目是滥用 EventBus 的教材…………(´・Д・)」 | 
|  |      43spongebobsun      2017-03-17 19:06:35 +08:00 @spongebobsun 楼主请忽略我…我这个并没做优化…可以考虑 c 实现然后 jni |