zoukankan      html  css  js  c++  java
  • 密码安全存储——PBKDF2、bcrypt、scrypt

    密码用单向哈希存储保证了数据库被脱后用户密码的安全。

    由于彩虹表这种攻击方式的存在,一般认为md5,SHA1等单向算法的安全性是不够的。那如何选择合适的加密算法?

    下面介绍业界几种高强度单向哈希算法,并比较其优劣。

    PBKDF2

    PBKDF2 是一个比较简单的算法,它根据’iterations’参数大小,执行N次HMAC运算。

    HW数据库密码存储的最低安全要求是,1000次HMAC-SHA256计算,推荐的是1万次。当然满足最低要求前提下,到底多少次合适需综合考虑性能要求。

    使用GPU阵列、或FPGA来破解PBKDF2仍相对容易。注意这里说的是相对,为了比较接下来提到的另外两种算法。

    BCrypt

    BCrypt 在1999年发明,由于使用GPU、FPGA的破解是基于它们相对于CPU的并行计算优势,因此BCrypt算法不仅设计为CPU运算密集,而且是内存IO密集。

    然而随着时间迁移,目前新的FPGA已经集成了很大的RAM(类型CPU缓存、大约几十兆),解决了内存密集IO的问题。

    Scrypt

    Scrypt 于2009年产生,弥补了BCrypt的不足。它将CPU计算与内存使用开销提升了一个层次,不仅CPU运算需要指数时间开销,还需要指数内存IO开销。

    上图摘自scrypt算法论文,粗略估计了破解上述每个算法需要的时间。

  • 相关阅读:
    Linux进程和线程
    Vim编辑器
    Java多线程编程(七)线程状态、线程组与异常处理
    Java多线程编程(六)单例模式与多线程
    Integer to Roman
    Container With Most Water
    Regular Expression Matching
    Palindrome Number
    c/c++获取硬盘序列号
    String to Integer (atoi)
  • 原文地址:https://www.cnblogs.com/gm-201705/p/9863918.html
Copyright © 2011-2022 走看看