别再纠结前端要不要提交明文口令,浏览器已经内置非常好的方案

查看 66|回复 5
作者:iqoo   
这个十年前就有结论的问题每隔一段时间都会有人讨论。结论是不管什么环境,前端提交 hash 后的口令总是好的,防的不是中途的嗅探者,而是脱库后的破解者。前端 hash 越耗时,脱库后跑字典越慢。
至于前端 hash 也不用自己捣鼓 js/wasm 这些,主流浏览器早已内置 PBKDF2 算法,较新的 CPU 都有相应的硬件加速,比自己实现可以快很多倍。
演示:
const username = new TextEncoder().encode('alice')
const password = new TextEncoder().encode('hello1234')
// 重复 1000 万次 SHA256
const pbkdfOpts = {
  name: 'PBKDF2',
  hash: 'SHA-256',
  salt: username,
  iterations: 1e7,
}
async function pbkdf2(pwd, opts, bits) {
  const baseKey = await crypto.subtle.importKey('raw', pwd, 'PBKDF2', false, ['deriveBits'])
  const buf = await crypto.subtle.deriveBits(opts, baseKey, bits)
  return new Uint8Array(buf)
}
const dk = await pbkdf2(password, pbkdfOpts, 256)
// 注册/登录提交 dk 即可,无需提交 password
console.log(dk)
lisxour   
你强任你强,md5 一把梭
passon   
@lisxour md5 公司已经不让用在密码场景了
LandCruiser   
前端明文提,后端就要铭文存?什么逻辑啊。。。
majula   
可以了解一下 PAKE ,比传统的 KDF 泄露密码的风险更低。
我们公司网站目前用的是 OPAQUE: https://www.ietf.org/archive/id/draft-irtf-cfrg-opaque-02.html
iqoo
OP
  
@LandCruiser KDF 计算量太大,后端算成本太高。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部