前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >按照措施将密码安全等级划分为5层

按照措施将密码安全等级划分为5层

原创
作者头像
用户8983410
修改2021-10-08 14:56:16
8980
修改2021-10-08 14:56:16
举报

按照措施将密码安全等级划分为5层:

Level0:明文也就是不加密

代码语言:javascript
复制
username	password
tom	123456

Level1:摘要式身份验证

验证流程:

  1. 提交用户名密码
  2. 计算密码哈希值
  3. 比对存储的哈希值和计算出的哈希值是否相等

相同:登陆成功 不同:登陆失败 使用哈希算法(可以是md5, sha1, sha256,sha512 结果长度依次增长):

123456→SHA-512→ba3253876aed6b

代码语言:javascript
复制
username	password
tom	ba3253876aed6b…

**哈希算法缺点: ** 1.容易遭受彩虹表(rainbow table, 如下)攻击!通过把大量的哈希值和原密码存储的组合存储在表中。达到用得到的hash值反向查询原密码。

代码语言:javascript
复制
hash_value	original_password
ba3253876aed6b…	123456
c70b5dd9ebfb6f…	abc123
b109f3bbbc244e…	password
…	…

2.另外一个缺点是可以看到谁有相同的密码

代码语言:javascript
复制
username	password
tom	ba3253876aed6b…
jerry	ba3253876aed6b…
…	…

Level2: 哈希+salt

学名叫加盐(salt),salt可以简单的理解成:随机产生的一定长度的,可以和密码相结合,从而使hash算法产生不同结果的字符串。

123456 + 0x23f22(salt)→SHA-512→bc22711a45e73e5e50f8...

代码语言:javascript
复制
username	salt	password
tom	0x23f22	bc22711a45e73e5e50f8…

优点:这种方法会极大防止受到彩虹表的攻击,因为即便攻击者构造出彩虹表,因为你使用了 hash(密码+ salt),攻击者彩虹表里的哈希值(hash(密码))和你数据库中的哈希值是不同的。 缺点: 如果攻击者知道了salt和你的哈希值,就可以计算出你的原始密码(当然也没有那么容易)

增强版本: 两次MD5,使用一个随机字符串salt与密码的md5值再进行一次md5,使用很广泛 由于现在的彩虹表大部分是针对一次md5的,当然可能存在多次md5的彩虹表,那么我们可以多次md5,大大增加他的存储成本和少量的计算成本

Level3: 增加计算的时间 (哈希 + salt + Iteration)

通过迭代计算的方式增加计算密码的成本。迭代的周期控制在用户可以接受范围内,这样攻击者的计算和时间成本就会大大增加。

123456 + 0x23f22(salt)→SHA-512 (500000 times)→bc6567567a45e73...

代码语言:javascript
复制
username	iteration	salt	password
tom	500000	0x23f22	bc6567567a45e73…

类似的方法可以使用: BCript(比正常的hash+salt慢10000倍,因此增加了10000倍的破解成本)

hashed value = BCript(password,salt,cost factor)

123456 + 0x23f22(salt) + 10 (cost factor)→BCript→bc6567567a45e73...

代码语言:javascript
复制
username	password
tom	$2a$10$rocuFOLJQLDDM12XMDJ32

注:

  1. 一般的应用做到LEVEL3就可以了,如果需要更加安全的方式请看下文。
  2. 增加迭代次数会增加自己的系统的运行成本,比如说:原来用MD5时一台服务器解决用户登录问题负载刚好100%,你用这个该死的bcrypt算法就需要该死的上万台服务器才能解决问题。

Level4: 加密哈希后的密码 Encrypt(BCript的结果或者密码+salt经过hash的结果)

密钥(Encryption key) + BCript的结果→AES 256→ox2c78a32f...

代码语言:javascript
复制
username	password
tom	ox2c78a32f…
  • 定时更换密钥(准备一组密钥定时更换,首先通过密钥解密加密存储的密码得到 bscript计算出的hash值,在用新的密钥进行加密)
  • 密钥存储在在不同的数据源 (通过将密钥存储在不同的数据源的方法,进一步增加了破解难度,因为需要同时获得用户密码表数据,同时要获得其他数据源存储的密钥)

Level5: 在Level4的基础上,将密码分成若干个块,分发到不同的数据库

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Level0:明文也就是不加密
  • Level1:摘要式身份验证
  • Level2: 哈希+salt
  • Level3: 增加计算的时间 (哈希 + salt + Iteration)
  • Level4: 加密哈希后的密码 Encrypt(BCript的结果或者密码+salt经过hash的结果)
  • Level5: 在Level4的基础上,将密码分成若干个块,分发到不同的数据库
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档