Skip to content

a fast and lightweight scrypt hash algorithm for browser

Notifications You must be signed in to change notification settings

EtherDream/WebScrypt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WebScrypt

一个浏览器版的 scrypt 算法,性能高、体积小。

scrypt 简介

scrypt 是一种密码学 Hash 函数,专门用于 Hash 口令。

不同于 PBKDF2、bcrypt 只有时间成本,scrypt 还可设定空间成本,该特征能使 GPU 等硬件设备破解 Hash 时瓶颈出现在内存上,从而降低硬件的计算优势。

另外 scrypt 支持并发维度,可充分利用多线程提高工作量,使破解时间成倍增加。详细讲解

前端计算

口令 Hash 函数的计算成本,决定了暴力破解的难度。但过高的成本,也会给服务器带来压力。因此通常只能在性能和安全之间折中。

事实上,口令 Hash 完全可在前端计算 —— 账号注册时,提交口令的 Hash 值(通常称之 DK);登录时,如果提交的 DK 相同,即可证明口令是相同的。

// REG or LOGIN
dk = scrypt(password, username, cost ...)

submit(username, dk, ...)

前端高成本 Hash 计算,不仅分担了后端压力,还能让原始口令数据更早消失,从而减少泄露环节,例如网络被窃听、服务端恶意程序等。

这就是本项目的初衷:在不增加网站基础设施的前提下,大幅提升账号口令安全。

API

演示

如何用到我的项目中?

更新中...

各种浏览器的性能对比

更新中...

其他的前端 scrypt 库

project ver asm.js flash purejs thread progress size (gzip -6)
WebScrypt latest ✔️ 2KB + 10KB / 54KB
js-scrypt 1.2.0 384KB
scrypt-async-js 1.3.0 3KB

备注:54KB 的是 flash.swf 文件,只有低版本浏览器才会使用

单线程性能

多线程性能

测试环境:Chrome56、OSX 10.11.6、MacBookPro 2013(2 GHz Intel Core i7,8 GB 1600 MHz DDR3)

探讨

探讨一些前端技术、隐私安全相关的话题。

License

MIT