虽然bcrypt通常被认为是一个不可逆转的散列函数,但它是基于可逆Blowfish密码。我只是好奇这是怎么回事。下面是来自wiki的伪代码:
bcrypt(cost, salt, input)
state ← EksBlowfishSetup(cost, salt, input)
ctext ← "OrpheanBeholderScryDoubt" //three 64-bit blocks
repeat (64)
ctext ← EncryptECB(state, ctext) //encrypt using standard Blowfish in ECB mode
return Concatenate(cost, salt, ctext)我知道第一个bcrypt将通过EksBlowfishSetup密钥释放器函数输出状态作为加密密钥。然后用密钥对文本"OrpheanBeholderScryDoubt"进行加密。
根据https://security.stackexchange.com/questions/66050/should-bcrypt-be-used-for-client-side-password-hashing/66056#66069中的一个答案,bcrypt是不可逆转的,因为BCrypt可以被看作是通过丢弃密钥来加密的。虽然已知的明文攻击几乎是不可能的,但这是什么使bcypt不可逆转?因为我认为已知的明文攻击在计算上仍然是可行的。
我想知道的是,如果我们使用已知的明文攻击(或以其他方式)获得加密密钥(由EksBlowfishSetup(cost, salt, input)生成),并且有传递给EksBlowfishSetup的成本和盐,那么是否有可能获得真正的密码?
根据答案在这里的说法,EksBlowfishSetup使brcypt成为单向的,因为您需要知道传递给它的所有3个参数才能检索明文密码。所以我可以说是EksBlowfishSetup使bcrypt成为不可逆转的吗?
有什么可能对你有帮助:密码技术与实践
发布于 2016-11-30 15:27:00
bcrypt使用EksBlowfishSetup ( blowfish密码的扩展密钥步骤函数)将您的密钥展开为一个正确的密码随机密钥来使用它。然后,扩展密钥用于加密某些文本,该加密文本是存储的散列。
因此,攻击者可以知道纯文本("OrpheanBeholderScryDoubt")、成本和盐(它在散列中)。但是Blowfish由于每一个被认为安全的现代密码系统(如AES或Serpent)都是专门设计来防止已知的明文攻击的,这意味着攻击者无法从明文及其对应的密文中获取密钥,因此,他唯一的机会是尝试每一个可确认的密码来加密该文本并获得相同的结果,这是一种用实际已知的硬件“计算上不可行”的野蛮攻击。
发布于 2016-11-30 23:18:20
发布于 2016-11-30 14:04:46
为什么说使用已知的明文攻击计算密钥在计算上是“可行的”?事实并非如此。据我所知,对于短文本来说,Blowfish并不是“坏掉”的,它需要千兆字节的数据才能破解弱键,这使得它对于较长的文本来说更弱一些。“安全”加密算法的一个特点是不可能找到比蛮力更快的方法,只知道加密文本和一些明文就可以恢复加密密钥。由于bcrypt中的密码被用作加密密钥的一部分,因此属性使其成为单向函数。河豚是可逆的,因为如果你知道密钥,你就可以逆转加密。但在这种情况下,您试图找到密钥,知道密文,这是不可能的,除了猜测键和观察结果。
https://crypto.stackexchange.com/questions/41955
复制相似问题