有没有任何程序,给定一个密文,它会告诉我加密算法是什么?
如果我有纯文本怎么办?在这种情况下有什么可以做的吗?
有没有任何程序,给定一个密文,它会告诉我加密算法是什么?
如果我有纯文本怎么办?在这种情况下有什么可以做的吗?
不。
加密的重点是产生一个与随机噪声无法区分的密文。
在没有任何外部提示的情况下,确定使用哪种加密机制的唯一方法是使用正确的密码运行解密程序并检查结果是否正确。
在相关说明中,同样,确定您是否使用正确密码的唯一方法是使用正确的密码运行解密程序并检查结果。
加密原理的一个主要原则是,即使您确切地知道某物是如何加密的,您仍然没有比暴力搜索密钥更好的攻击方式。
另一方面,如果您在某处发现一堆带有“密码是 foobar”的注释的位,那么拥有已知加密软件使用的常见包装器和文件格式的字典可能会很有用。我从来没有见过,但我相信专业人士有他们。
只要使用现代密码学,就绝对无法确定使用了什么密码。
但是,如果您有纯文本,并且在任何时候都来自流密码的 PRNG 流,那么您可以使用简单的异或运算解密未知消息。 PRNG 重用是讨厌的,但只有新手才会犯这样的错误。
你的问题有两个方面:
如果加密系统好的话,它的输出与随机字节没有区别。因此,使用算法A1的加密和使用算法A2的加密应该彼此无法区分,因为两者都与随机字节无法区分。
密码学家总是假设攻击者知道使用了哪种算法。这是假设的,因为我们不知道算法名称可以有多安全;毕竟它化身为软件,在一个可执行文件中,并且在某处有源代码,而且很多人都知道使用的是哪种算法。这不可能是非常秘密的。因此,安全分析采取谨慎(如果保守)的立场,认为只有密钥是秘密的(这就是密钥的用途:集中秘密)。
由于第 2 点,许多加密格式都包含标头(在真正加密的部分之外),这些标头非常清楚地定义了使用哪种加密算法。它不会改变安全分析,因为我们在假设任何攻击者都已经知道标头包含的所有内容的情况下进行分析。但是,这样的头部对于应用程序的健壮性非常方便;值得注意的是,它对算法敏捷性(支持多种算法的能力)有很大帮助。
例如,使用S/MIME加密的电子邮件实际上是一个CMS对象(以 Base64 编码,因此它可以像电子邮件一样不受伤害地传播),其中包含一个清晰可见的加密算法规范(ContentEncryptionAlgorithmIdentifier在 CMS 规范中输入)。
摘要:虽然加密算法名称通常不能从加密数据中重新计算(无论您是否知道明文),但通常可以从加密 blob 周围的元数据中获取该信息,这不是安全问题。
(或者更确切地说,如果知道算法对攻击者有很大帮助,那么算法就是垃圾。)