当前位置: 首页 > 网络应用技术

加密系列:BCRYPT加密算法详细说明

时间:2023-03-07 10:38:38 网络应用技术

  我今天想向您介绍的一种加密算法称为bcrypt。BCRYPT是由Niels Provos和DavidMazières设计的密码哈希功能。他基于Blowfish密码,并于1999年在Usenix上提议。

  除了添加盐以抵抗彩虹桌攻击外,BCRypt的一个非常重要的特征是适应性,它可以确保加密的速度在特定范围内。,慢慢加密速度,可以抵抗暴力搜索攻击。

  BCRYPT函数是OpenBSD和其他系统,包括某些Linux发行版的默认密码哈希算法(例如Suse Linux)。

  让我们首先回顾一下Blowfish的加密原理。首先需要生成K数组和S-box,用于加密的Blowfish和Blowfish,这需要一定时间来生成最终的K数组和S-Box。每个新密钥都需要准备大约4 kb text.com,并用其他分组密码算法做好准备,这将非常慢,但是一旦生成,或者键常数,池塘仍然是一种快速的加密方法。

  那么慢吗?

  当然,因为对于普通应用程序,将不会经常更换密钥。因此,预处理只会生成一次。稍后使用时,它会很快。

  对于恶意攻击者,每次尝试一个新钥匙时,都需要执行长时间的准备处理,因此攻击者破解Blowfish算法并不是成本效益。

  Provos和Mazières使用了这一点,并进一步开发了它。它们为Blowfish开发了一种新的密钥设置算法,该算法称为“ Eksblowfish”(“昂贵的密钥计划Blowfish”)。这是对Blowfish的改进算法。在BCRYPT的最初关键设置中,使用盐和密码来设置子键。然后在一轮标准的池塘算法之后,使用盐和密码作为钥匙,每轮依赖于上一轮键的状态。尽管从理论上讲,BCRYPT算法的强度不比池塘好,而是因为可以配置重置BCRPYT中的钥匙的车轮数量,因此可以通过增加车轮数量来更好地抵抗暴力攻击。

  简而言之,bcrypt算法是字符串OrpheanbeholdersCryDoubt上64个Blowfish加密的结果。某些朋友会问,BCRypt是否使用BCRypt来加密密码?如何加密字符串?

  不用担心,bcrpyt是加密密码作为字符串的因素,该因素也具有加密的效果。let,请参见BCRypt的基本算法实现:

  上述函数BCRYPT具有3个输入和1个输出。

  在输入部分中,成本代表轮横梁的次数。我们可以自己指定。

  盐是加密的盐,使密码混淆。

  密码是我们要加密的密码。

  最终输出是哈希的加密结果。

  使用3个输入,我们将调用EksblowFishSetup函数以初始化18个子键和4个1K S-box,以实现最终的P和S。

  然后使用P和S在“ OrpheanbeholdersCryDoubt”上执行64个洪水操作,并最终获得结果。

  接下来,查看EksblowFishSetup方法的算法实现:

  代码非常简单。EksblowFishSetup接收上述3个参数,以18个子pyes返回最终P和4 1K Sbox。

  首先初始化,获取初始P和S。

  然后致电ExpandKey,输入盐和密码,并生成P和S的第一轮。

  然后循环2个成本时间,轮流使用密码和盐作为生成P和S的参数,最后返回。

  最终查看ExpanyKey的实施:

  ExpandKey主要用于生成P和S。算法的产生相对复杂。如果您有兴趣,可以详细研究它。

  我们可以使用bcrypt来加密密码。最后,它以bcrypt哈希的形式保存到系统中。bcrypt哈希的格式如下:

  例如:

  在上面的示例中,哈希算法的独特符号是bcrypt算法。

  10代表成本系数,即2的第10侧,即1024轮。

  N9QO8uloICKX2ZMRZOMYE是16个字节(128bits)获得的22个长度。

  最后一个IJZAGCFL7P92LDGXAD68LJZDL17LHWY是24字节(192BITS)。由Bash64获得的31个长度字符已编码。

  此哈希格式遵循OpenBSD密码文件中使用的模块化密码格式格式。开始时,格式定义如下:

  但是,最初的规格并未定义如何处理非ASCII字符,也没有定义如何处理NULL终止符号。修订后的规格规定了hash string时:

  由于这些更改,BCRYPT的版本数量已修改。

  但是,在2011年6月,由于PHP对bcypt_blowfish在错误中的bug的实现,他们建议系统管理员更新其存在。到crypt_blowfish。

  然后在2014年2月,在OpenBSD的BCrypt实现中也发现了一个错误,该实现将字符串的长度存储在非symbol char中(即8- bit Byte)。如果密码的长度超过255个字符,则将溢出。

  由于BCRypt是为OpenBSD创建的。因此,当错误出现在其库中时,他们决定将版本编号升级到。

  最受欢迎的解释,最深的干货,最简单的教程,您不知道的许多技巧正在等待您发现!

  欢迎注意我的公共帐户:“程序的事情”,了解技术并更好地了解您!