在给定明文和密文的情况下计算对称加密的关键

时间:2017-12-14 07:08:59

标签: c encryption cryptography

作为赋值的一部分,我需要制作一个算法,该算法将2个文件作为输入,一个包含明文,另一个包含密文。考虑到加密模型是硬编码/已知的,并且是对称加密,有没有办法使用openSSL来计算用于将提供的明文加密到提供的密文中的密钥?

为方便起见,我使用了5段Lorem Ipsum作为明文,以及河豚作为密码。

openSSL文档和Google证明不太有用。

谢谢!

3 个答案:

答案 0 :(得分:4)

不,这样做的能力几乎会破坏密码学的整个目的。可能有一些工具可以用琐碎的系统(例如Caesar密码)做这种事情,但是如果能够在合理的时间内为当前的密码系统计算密钥,它们就会被破坏。

答案 1 :(得分:2)

您所看到的是“Known Plaintext Attack”:如果攻击者知道密文和明文,是否可以找到密钥?

所有优秀的现代密码,包括Blowfish,都是为抵御这种攻击而设计的。因此,正如已经说过的那样,你的问题的答案是,“不,你找不到钥匙。”

答案 2 :(得分:1)

不,你不能。
不适用于河豚算法。

然而,原因是如果可以从一对纯文本和密码派生密钥,那么任何加密方案都会被破坏,即使很容易这样做。
这个答案的其余部分是为了解释这一点。

尽管允许导出密钥,但至少有一种加密方案是安全的。它是一次性密码加密方案,恰好是唯一已知的真正安全的加密方案,因为它是不可破解的。 关键是如果知道一条消息的密钥允许解密所有未来消息,则导出一条消息的密钥只会破坏加密方案。如果重复使用相同的密钥,这又适用。

一次性密码加密的特点是

a)每个密钥仅用于一条消息,而不再用于    (这就是为什么它被称为“垫”,指的是带有许多键的记事本,带有用过的钥匙的纸张很容易被拿走并销毁) b)密钥与消息
一样长    (否则使用部分已知的纯文本来获取密码的一部分密钥将允许解密消息的其余部分)

使用这些属性,即使使用简单的XOR进行加密也是不可破解的,消息中的每个位都对应于密钥中自己的专用位。这也与de- / encryption一样快,并且永远不会增加消息长度。

一次性密码加密当然存在巨大的劣势,即关键物流。使用这种加密几乎不适用,因为需要为消息的接收者提供许多大密钥(或者更好的是一个非常长的密钥,可以部分地用于任何大小的消息)并且事先这样做。
这就是为什么不使用一次性密码加密的原因,尽管它比所有其他用户更安全和更快,并且至少在尺寸效率方面。

其他加密方案被认为实际上是安全的,否则它们当然不会被使用 然而,必须与密码分析的任何显着进展并行地增加密钥大小。没有数学证明任何其他算法是不可能的(意味着不可能从普通密码对派生密钥)。没有数学专家接受“我想不出任何办法去做那件事。”证明一件事是不可能的。最重要的是,新技术可以减少密钥推导的时间,或者用于查找没有密钥的纯文本的时间,减少一小部分,突然显示常用的密钥长度。

算法的对称性或不对称性与此无关。两种都可以派生或不派生。

只有与消息长度相关的密钥大小才是重要的。即使使用一次性密码加密,也是一个短密钥(消息长度是密钥长度的倍数)  必须不止一次使用。如果密码的第一部分具有已知的纯文本并允许导出密钥,则重复使用它可以为消息的其余部分找到未知的普通文本。
对于块密码方案也是如此,这些方案改变了每个块的密钥,但是如果它是相同的,仍然允许在知道前一个密钥的情况下找到新密钥。为了这个答案,使用一个(可能是非对称的)主密钥来创建不能彼此导出的多个(通常是对称的)块密钥的混合方案,如果可以导出主密钥,则认为是可导出的。当然没有广泛使用的算法,这是真的。

对于任何方案,可导出的风险随着密钥中的比特数与消息中的比特数的比率而增加。密码比特和普通比特对与每个密钥比特相关,可用于分析的信息越多。对于一对一的关系,可以将一个普通密码对的信息限制为该单个对。

因此,任何可派生加密都需要密钥长度等于消息长度 相反,这意味着只有不可导出的加密才能有短密钥。拥有短键当然是一个优点,特别是如果密钥长度意味着处理持续时间。大多数加密方案需要更长的密钥。然而,对于任何密钥长度,一次性垫都同样快。

所以任何具有简单密钥后勤的算法(不需要事先就大量的密钥位达成一致)都是不可导出的。任何具有可接受速度的算法都是不可导出的 对于任何广泛使用的算法都是如此,包括河豚。

然而,并非所有算法都是如此,特别是对于唯一真正安全的算法,一次性密码加密(XOR)。

所以你的具体问题的答案确实是:
您不能使用河豚和您可能想到的大多数算法。但是......