如果我提供的密钥大于 64 个十六进制字符(64*4=256 位),则会出现以下错误。
根据这个官方文件,blowfish能够支持32到448位的密钥。
可变密钥长度:32 位至 448 位
是否有可能绕过此限制?出了什么问题?
实际密钥大小足够大,但我希望尽可能地提高安全性。
谢谢,
答案1
虽然算法本身支持最大 448 位的可变密钥长度,而 OpenSSL 的实现限制为 256 位。我发现有几页提到了这个限制;这个有一个很好的表格: http://etutorials.org/Programming/secure+programming/Chapter+5.+Symmetric+Encryption/5.18+Using+Variable+Key-Length+Ciphers+in+OpenSSL/
答案2
256 位和 448 位对称密钥之间没有任何有意义的加密差异。任何理智的人都不会试图暴力破解 256 位 blowfish 对称密码。
这是 1999 年写的,但仍然适用:https://www.schneier.com/crypto-gram-9902.html#snakeoil
答案3
实际上,openssl 程序中有一个小错误。它允许密钥长度最大为 256 位,但实际上,blowfish 密钥只使用了前 128 位。使用更长密钥的唯一方法是使用库编写程序。
通过在 enc 中使用 -p 选项,我们可以验证所使用的密钥是否为 128 位密钥:
echo toto | openssl enc -bf-cbc -K 000000000000000000000000000000000000000000000000000000 -iv 0 -a -p
结果 :
salt=801D670000000000
key=00000000000000000000000000000000
iv =0000000000000000
5XAXlTvP0ZE=
我最近发现了 stackexchange 的安全网站,并问了同样的问题。Brendan 给了我以下信息回答。
我应该删除这个问题吗?