Bcrypt

Bcrypt是单向Hash加密算法,类似Pbkdf2算法 不可反向破解生成明文。



一、Bcrypt是怎么加密的?



Bcrypt有四个变量:



saltRounds: 正数,代表hash杂凑次数,数值越高越安全,默认10次。
myPassword: 明文密码字符串。
salt: 盐,一个128bits随机字符串,22字符
myHash: 经过明文密码password和盐salt进行hash,个人的理解是默认10次下 ,循环加盐hash10次,得到myHash

BCrypt方法加密:BCrypt.hashpw(myPassword, BCrypt.gensalt())



那即使黑客得到了bcrypt密码,他也无法转换明文,因为之前说了bcrypt是单向hash算法;



那如果黑客使用彩虹表进行hash碰撞呢?
有文章指出bcrypt一个密码出来的时间比较长,需要0.3秒,而MD5只需要一微秒(百万分之一秒),一个40秒可以穷举得到明文的MD5,在bcrypt需要12年,时间成本太高



https://www.jianshu.com/p/2b131bfc2f10



Argon2是一个密钥推导函数,在2015年7月被选为密码哈希大赛的冠军,它由卢森堡大学的Alex Biryukov、Daniel Dinu和Dmitry Khovratovich设计,Argon2的实现通常是以Creative Commons CC0许可(即公共领域)或Apache License 2.0发布,并提供了三个相关版本,分别是Argon2d,Argon2i和Argon2id。



Argon2算法
Argon2 的设计很简单,旨在实现最高的内存填充率和对多个计算单元的有效利用,同时还能提供对 tradeoff attacks 的防御(通过利用处理器的缓存和内存)。



Argon2有三个变种。Argon2i、Argon2d和Argon2id。Argon2d速度更快,并且使用数据依赖的内存访问方式,这使得它对GPU破解攻击有很强的抵抗力,适合没有side-channel timing attacks威胁的应用(例如加密货币)。



Argon2i则使用数据无关的内存访问,这对于密码哈希和基于密码的密钥推导算法来说是首选,其特点是速度较慢,因为它在内存上运行了更多的处理逻辑,以防止 tradeoff attacks 。



Argon2id是Argon2i和Argon2d的混合体,采用数据依赖型和数据独立型内存访问相结合的方式,从而可以同时抵御side-channel timing attacks和GPU破解攻击的能力。



https://blog.csdn.net/superfjj/article/details/120392344



https://zhuanlan.zhihu.com/p/103585966



BCrypt加密:是一种加盐的加密方法,MD5加密时候,同一个密码经过hash的时候生成的是同一个hash值,在大数据的情况下,有些经过md5加密的方法将会被破解.使用BCrypt进行加密,同一个密码每次生成的hash值都是不相同的。每次加密的时候首先会生成一个随机数就是盐,之后将这个随机数与密码进行hash,得到 一个hash值存到数据库中使用的函数是BCrypt.hashpw(password, BCrypt.gensalt())。当用户在登陆的时候,输入的是明文的密码,这个时候,在springSecurity.xml文件中的认证管理器中配置BCrypt加密方式,将会将会从数据库中取出这个hash值进行分离,前面的22位就是加的盐,之后将随机数与前端输入的密码进行组合求hash值判断是否相同,使用的函数是: match BCrypt.checkpw(candidate, hashed)。



https://blog.csdn.net/qq_41174684/article/details/90214341



Scrypt
Scrypt was also designed to make it costly to perform large-scale custom hardware attacks by requiring large amounts of memory.
Even though its memory hardness can be significantly reduced at the cost of extra computations, this function remains an excellent choice today, provided that its parameters are properly chosen.



https://doc.libsodium.org/password_hashing#argon2



How to Hash and Verify Passwords With Argon2 in Go



go get golang.org/x/crypto/argon2



https://www.alexedwards.net/blog/how-to-hash-and-verify-passwords-with-argon2-in-go



https://github.com/tvdburgt/go-argon2



Category algorithm