大家好,我必须使用 C++ 中的 Blowfish 算法加密我的数据……你们能告诉我,另一端是否知道我使用的是什么算法,他们可以不提取密钥并解密吗?这种方法的数据安全性如何?
3 回答
你们能告诉我另一端是否知道我使用的是什么算法,他们可以不提取密钥并解密吗?
不。标准化加密算法的全部意义(与那些依赖于晦涩难懂的算法相反)是,即使每个人都知道它的所有细节,除非有密钥,否则无法解密它。
这种方法有效,因为破解加密的唯一方法是尝试所有可能的密钥,其中有太多的密钥。随着计算能力的提高,以前“安全”的算法确实变得“不安全”。对于某些算法,也可能存在允许进行其他形式的推理的缺陷,从而显着减少可能的密钥空间,从而加速这些暴力攻击。但是(据我们所知)河豚在这里是安全的。
保守密钥的秘密当然是必不可少的。如果您的程序还包含密钥(而不是询问用户或某些设备,或者使用本身使用公钥加密进行加密的随机会话密钥),那么逆向工程师可能会找到它并破坏您的方案。
保持密钥机密的一个重要部分是保持它“不可猜测”并且不将其用于不同目的。随机生成的密钥是最好的。
另外,“另一端”是指攻击者,对吗?通常,“另一端”是指 Bob The Intended Recipient,他当然需要能够解密消息。
没有已知的针对 Blowfish 的攻击(截至 2011 年 1 月),因此您的数据与密钥长度一样安全(在 Blowfish 中可以达到 448 位)。
据我了解,选择特定加密和解密方法的全部要点之一是通信流的两端将知道数据是用哪种算法加密的。
如果您“必须”使用 Blowfish 算法加密您的数据,那么仅此要求就应该告诉您收件人期待使用 Blowfish 方案加密的消息。
正如Thilo所说,“标准化加密算法的全部意义在于……即使每个人都知道它的所有细节,但除非有密钥,否则无法解密它。”
防止中间人攻击和其他涉及恶意方拦截您的消息的攻击的最佳方法是确保您的密钥安全 - 不要将其硬编码到任何程序中(甚至可以分析已编译的程序)和通过确保他们的安全实践最大限度地减少恶意代理获取相关密钥的机会,与您的收件人建立信任。或者,如果您的收件人支持它,您可以使用“一次性密码” - 用于加密数据的唯一密码/密钥。