问题 用于文件解密的神经网络 - 可能吗?


我之前已经使用过神经网络,并且了解了大多数关于它们的基础知识。我特别喜欢常规的多层感知器。我现在被某人询问是否有可能以某种方式感到挑战掌握问题:)


情况 

假设我有一个可以加密和解密常规ASCII编码文件的程序。我根本不知道具体的加密方法和使用的密钥。我所知道的是,该程序可以反转加密,从而读取原始内容。

我想要的是?

现在我的问题是:你认为有可能训练(某种类型)神经网络,它可以用可接受的努力复制精确的解密算法吗?

到目前为止我的想法和工作

我对加密没有太多经验。有人建议只假设AES加密,所以我可以编写一个小程序来批量加密ASCII编码文件。因此,这将涵盖用于监督学习的学习数据的收集。使用加密文件输入神经网络和原始文件作为训练数据我可以训练任何网络。但是现在我被卡住了,你会建议如何将输入和输出数据提供给神经网络。那么你们会使用多少输入和输出神经元? 由于我不知道加密文件会是什么样子,因此以二进制形式传递数据可能是最好的主意。但我不能只使用数千个输入和输出神经元并同时传递所有位。也许经常性的网络和一个接一个的馈送?听起来也不是很有效。

另一个问题是,你不能部分解密 - 这意味着你不能大致正确。你要么做对不对。换句话说,最后净误差必须为零。根据我迄今为止使用ANN所经历的情况,这对于大型网络来说几乎是不可能实现的。这个问题可以解决吗?


11235
2018-05-13 08:14


起源

嗯,说实话,这对我来说似乎完全不可能。至少破解AES加密文件的想法。我基于两个想法。首先,我怀疑使用这种“旧”技术可以破解已经存在三年竞争的标准加密算法。然后,另一点是我怀疑NN的“表现力”。我的意思是,基本上,你正在寻找一个功能。这个函数属于一个函数空间,在我看来,它不太可能包含神奇的AES解密函数。由于我没有可靠的证据,我更喜欢评论! - Fezvez
神经网络实际上相当“具有表现力”(从某种意义上说,我认为你的意思是它)。可以训练只有少数节点的小型双层网络来计算两位上的任何布尔运算符。如果您允许使用ANDs,OR,NOT,XOR等,显然可以计算AES中断功能(在我们所有的计算机都执行之后),那么如果您提供的话,NN也必须这样做足够的图层和节点。所以表达力不是我想的问题。相反,问题更多的是...... - Kris
...神经网络的大小和拓扑,以及您需要多少训练数据和时间/计算来使反向传播算法学习该功能。或者即使该功能完全“可学习”。 - Kris


答案:


另一个问题是,你不能部分解密 - 这意味着你不能大致正确。你要么做对不对。

这正是问题所在。神经网络可以近似 连续功能,意味着输入值的微小变化会导致输出值的微小变化,而加密函数/算法被设计为尽可能不连续。


12
2018-05-13 08:56



我想这个答案会把它放在坚果壳里。但我开始对加密感兴趣,也许我应该对这个主题做一些阅读。感谢您的回答。 - EliteTUM
你说NN可以“近似连续函数”(并暗示它们只能这样做) - 这很有趣。我试图写一个类似的声明,声明NN只能发现线性函数,但我意识到我不理解NN或布尔线性与足够的技巧,使其自信。不过,我很高兴其他人也这么做了! - Tom Anderson
@Tom Anderson:单层感知器只能发现线性函数。对于非线性函数存在更复杂的NN。 - Fred Foo
确实,神经网络计算连续函数,但其​​输出值可以解释为“布尔”(即输出神经元的值为0..1。Properlt训练值接近1可以表示'真'且值接近0 '假'。如果它介于两者之间意味着'我不太确定'。例如,神经网络实际上非常擅长分类问题,并且分类功能是明确的 不 一个连续的功能。 - Kris


我认为如果这样有效,人们就会这样做。据我所知,他们没有这样做。

说真的,如果你可以在神经网络上抛出大量的明文/密文对并构造一个解密器,那么它将是一种非常有效的已知明文或选择明文攻击。然而,我们对当前密码的这种攻击根本不是很有效。这意味着整个开放式加密社区都错过了这个想法,或者它不起作用。我意识到这远非一个确凿的论点(它实际上是来自权威的论证),但我认为这表明这种方法不起作用。


2
2018-05-13 08:37



只是想指出,除非有人做了什么,否则没有人做过任何事情。我的意思是,有人总是第一个。在极少数情况下,几个人都是第一个。昨天的惊人发现是明天的常识。 - Tim Bender
我喜欢蒂姆的答案;)但是汤姆有一个观点:如果可能的话,那之前就已经完成了。特别是因为它是一种非常简单的方法(我认为只有一种更简单的是Brute Force)。感谢oppinions。也许我会咨询我的朋友,他对加密有更多的了解。 - EliteTUM
@Tim:当然是真的。但我倾向于认为,如果很多人在一个地区做了很长一段时间的事情,那么就不可能有任何简单但有用的创新。这不是不可能,只是不太可能。我很欣赏这是一个令人尴尬的弱论点,尤其是在像这样的网站上。 - Tom Anderson
@EliteTUM:我也喜欢Tim的回答。 - Tom Anderson
例如,人们正在这样做 link.springer.com/chapter/10.1007%2F978-3-642-34500-5_75但问题是这是否实用,或者永远都是如此。训练NN需要花费大量时间,训练样例和计算能力。直觉上,我们应该期望解密函数非常难以学习(从输入到输出的不可预测的映射)。如果它们很容易被NN学习,那么它们就不会是好的加密算法,并且可能也很容易被其他方法破解而不是NN。 - Kris


假设您有两个密钥A和B,分别将密文K转换为Pa和Pb。 Pa和Pb都是密文K的“正确”解密。因此,如果你的神经网络只有K作为输入,它就无法实际预测正确的答案。大多数加密破解方法都包括查看结果,看它是否与您所追求的一样。例如,可读文本更可能是明文而不是明显随机的垃圾。神经网络需要善于猜测它是否根据用户期望的内容得到正确的答案,这可能永远不会100%正确。


然而,神经网络理论上可以学习任何功能。所以如果你有足够的密文/明文对 对于特定的加密密钥那么一个足够复杂的神经网络可以学会完全是解密算法 对于那个特定的密钥

关于连续与离散问题,这基本上已经解决了。输出有类似sigmoid函数的东西,所以你只需选择一个阈值1对0.5可以工作。通过足够的训练,理论上你可以得到1对0 100%的正确答案。

以上假设您有一个足够大的网络可以同时处理整个文件。对于任意大小的密文,您可能需要一次使用RNN执行块,但我不知道它是否仍然具有与传统网络相同的“计算任何功能”属性。

这些都不是说这种解决方案实际上是可行的。


0
2017-10-12 05:33