密码安全存储——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算法论文,粗略估计了破解上述每个算法需要的时间。

原文地址:https://www.cnblogs.com/gm-201705/p/9863918.html

时间: 2024-08-03 18:46:00

密码安全存储——PBKDF2、bcrypt、scrypt的相关文章

用户密码加密存储十问十答,一文说透密码安全存储

我们数据库的权限管理十分严格,敏感信息开发工程师都看不到,密码明文存储不行吗? 不行.存储在数据库的数据面临很多威胁,有应用程序层面.数据库层面的.操作系统层面的.机房层面的.员工层面的,想做到百分百不被黑客窃取,非常困难. 如果密码是加密之后再存储,那么即便被拖库,黑客也难以获取用户的明文密码.可以说,密码加密存储是用户账户系统的底裤,它的重要性,相当于你独自出远门时缝在内衣里钱,虽然你用到他们的概率不大,但关键时刻他们能救命. 那用加密算法比如AES,把密码加密下再存,需要明文的时候我再解密

python开发mysql:mysql安装(windows)&密码找回&存储引擎简介&库表的增删改查

一,mysql安装 1 下载地址 https://dev.mysql.com/downloads/file/?id=471342 2 解压后,将目录C:\mysql-5.7.19-winx64\bin添加到计算机环境变量中 3 4 用CMD命令行执行,mysqld --initialize-insecure 初始化数据库,这样C:\mysql-5.7.19-winx64 5 这个目录下就会产生data的目录,里面包含的就是初始化的东西,配置文件,用户密码信息 6 -insecure 这个参数就是

关于数据库中密码的存储

很多系统都是将密码进行一次 MD5 或 SHA1 Hash后存入数据库中.这样的密码抵挡不住字典攻击.所谓字典攻击,就是将常用密码进行Hash后做成一个字典,破解的时候,只需要查字典就能知道对应的明文密码. 为了抵御字典攻击,推荐的做法是使用 密码 + 盐(一串随机数) 再Hash的方式.每个密码对应一个不同的随机数.这个方法,实际上是将密码人为地拓展了N位,导致密码长度大增,使得攻击者无法构造这么大的一个字典. 使用 密码 + 随机串 的方式保存的密码就一定不能破解吗?设想这种方式的数据库表中

选择适合的Node.js授权认证策略

选择适合的Node.js授权认证策略 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 英文原文:https://stormpath.com/blog/choosing-nodejs-authentication-strategy/ Node.js正在兴起!我从2010年就开始使用Node工作,那个时侯我看着它从一个很小的个人项目成长为一个全功能的.能够让现代开发者用于构建真实.重要的大型应用的主要工具.一个完整的解决方案生态系统如雨后春笋般涌现,既帮

android全磁盘加密

android 全磁盘加密 什么是全磁盘加密? 全磁盘加密是使用一个密钥来为android设备上所有的用户数据加密的过程.一旦设备被加密,所有的用户创建的数据都将会在提交的磁盘之前自动加密,在读取之前都会自动解密. Android 5.0中添加了啥 创建了快速加密,该加密方式仅仅加密在数据分区中使用块设备的数据来避免第一次启动耗费较长时间.仅仅ext4和f2fs文件系统支持快速加密. 在首次启动的时候添加forceencrypt标志来加密 增加了对模式的支持和没有密码的加密 增加使用可信执行环境

如何安全的存储用户的密码

大多数的web开发者都会遇到设计用户账号系统的需求.账号系统最重要的一个方面就是如何保护用户的密码.一些大公司的用户数据库泄露事件也时有发生,所以我们必须采取一些措施来保护用户的密码,即使网站被攻破的情况下也不会造成较大的危害.如果你还在存储用户密码的MD5,那可真的有点弱了.赶紧来看看这篇文章吧. 保护密码最好的的方式就是使用带盐的密码hash(salted password hashing).对密码进行hash操作是一件很简单的事情,但是很多人都犯了错.接下来我希望可以详细的阐述如何恰当的对

如何安全的存储密码?

Clicks: 898 Date: 2014-09-24 15:47:48 Power By 李轩Lane Tag哈希hash加密 一.我是新手我怕谁 新手程序猿通常会直接存储明文密码在数据库中,好一点的会使用MD5来加密密码后存储md5(password),再好一点的会sha1加密密码后存储sha1(password).将常用的组合哈希后存入数据库,用来爆库,这个就是所谓的彩虹表. 二.加盐salted 在密码中加入随机数字或字符,然后再进行哈希,看起来叼了很多,但是实际上对于现在计算机来说,

存储用户密码和数据

来自:https://blog.csdn.net/u012491783/article/details/79465559 密码阶段: 1.单向hash(MD5) 以MD5和sha算法为代表,这类做法比明文直接存储看起来要安全,但是如果在db被攻破的时候,以目前计算机的算力加之黑客的各种技术手段,其实跟明文是差别不大的,我们知道密码学里面破解密码最笨的一种方法是暴力破解,随着目前计算机硬件的发展,带来计算能力的提升,每秒钟上亿次的hash计算已经不是问题,直接暴力破解几乎是分秒的事情,另外与之相近

浅谈密码存储安全

前言 用户信息泄露事件层出不穷,百度或谷歌输入"密码泄露",搜出来的泄密门更是让人目瞪口呆:从小公司到大公司,从明文存储到普通的哈希加密.作为一个IT从业者,我深刻感受到"得用户者得天下",尤其在互联网+盛行的趋势下.密码存储作为软件服务系统基础架构中不可缺少的一部分,越来越多的受到开发者的重视.对于一个服务,如果信息安全部分出问题,我想没有必要进一步去做用户体验的提升,性能的优化.进而也不可能获取大用户的青睐.还是那句话:出来混,迟早要还的. 本人并非密码学出生,