gitlab用户密码加密研究——bcrypt加密算法

一、背景

获取了gitlab的git权限后,可通过gitlab-rails console进入控制台,对gitlab的数据库进行读写操作,面临一个很棘手的问题就是,数据库中的用户密码均采用了bcrypt加密算法,通常情况下,知名的cmd5都难以解密获取原明文密码。bcrypt作为一种专为密码存储设计的哈希函数,它结合使用了盐值、工作因子和Blowfish算法,使得其在防御彩虹表攻击和暴力破解方面表现出色。通过独特的哈希机制,bcrypt能够确保密码的安全性,有效防止潜在的安全威胁。

二、算法起源

该算法由Niels Provos和David Mazières共同设计,其灵感来源于Blowfish密码算法。该函数在1999年的USENIX会议上被正式提出,自那时起便因其独特性和安全性而备受关注。bcrypt 的设计初衷是为了保护存储在数据库中的密码免受攻击,提供一种更加强大、可靠的密码散列方式,以防止暴力破解和彩虹表攻击等常见密码攻击手段。

三、原理

生成盐——>>设置工作因子——>>组合密码和盐——>>扩展密钥——>>生成哈希值——>>校验密码

对密码进行哈希处理时,bcrypt算法首先会生成一个随机的盐值。这个盐值是一个足够长的随机数,通常为128位(16字节),其关键作用在于确保即便是对相同的密码,每次哈希处理的结果也会不同。同时,工作因子或称为成本因子,用于确定哈希计算的复杂程度。随着工作因子的提升,计算哈希所需的时间和资源会相应增加。这一因子实质上是一个指数,表示主循环的迭代次数为2的某个次方,这个数值通常为10。

在哈希过程中,bcrypt会将密码与盐值组合在一起,确保即使密码相同,由于盐值的不同,最终生成的哈希值也会有所差异。随后,利用Blowfish算法对密码和盐进行多轮加密操作,这一过程被称为密钥扩展。这一过程中,会多次加密一个固定的文本,通过这种方式,可以显著提高密码哈希的计算成本,从而有效抵御暴力破解攻击。

经过多轮迭代加密后,bcrypt最终会生成一个固定长度的哈希值,这个值将被存储在数据库中,用于后续的密码校验。当用户尝试登录时,系统会取出数据库中存储的哈希值,并使用相同的参数对用户输入的密码进行哈希处理,以便与存储的哈希值进行比对验证。

经过上述流程,bcrypt展现出了其在密码保护方面的卓越能力。即便在数据库遭受泄露的情况下,由于哈希运算的复杂性和每次哈希结果的唯一性,攻击者想要破解密码也变得极为困难。

四、bcrypt hash的结构

一个标准的bcrypt hash的格式如下:

$2b$[cost]$[22 character salt][31 character hash]

例如:

$2a$10$QzFHpoR3JJOAYI4O.wlF9OaDEApA1/lZuq8ButmNEWh0oy7ns41Tm

\__/\/\____________________/\______________________________/

Alg cost      salt                       hash

$2a$是 Bcrypt hash 算法的一个显著标志,它用于标识该算法。

而"10"在此处指的是工作因子,它实际上表示的是主循环的迭代次数为2的10次方,即1024轮。这个数值决定了哈希计算的复杂度,数值越高,计算哈希所需的时间和资源就越多。

"QzFHpoR3JJOAYI4O.wlF9"是经过Base64编码的16个字节的盐值,它确保了对相同密码的每次哈希结果都不同,从而提高了密码的安全性。这段编码后的盐值长度为22个字符。

至于"OaDEApA1/lZuq8ButmNEWh0oy7ns41Tm",它是24个字节的哈希值经过Base64编码后得到的字符串,长度为31个字符。这个哈希值是存储在数据库中用于后续密码校验的。

Gitlab便是通过这样一种强加密的方式保存了用户名密码,以至于即使有数据库的操作权限,也无法轻易获取其明文密码。

  • 13
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值