我之前已经使用过神经网络,并且了解了大多数关于它们的基础知识。我特别喜欢常规的多层感知器。我现在被某人询问是否有可能以某种方式感到挑战掌握问题:)
情况
假设我有一个可以加密和解密常规ASCII编码文件的程序。我根本不知道具体的加密方法和使用的密钥。我所知道的是,该程序可以反转加密,从而读取原始内容。
我想要的是?
现在我的问题是:你认为有可能训练(某种类型)神经网络,它可以用可接受的努力复制精确的解密算法吗?
到目前为止我的想法和工作
我对加密没有太多经验。有人建议只假设AES加密,所以我可以编写一个小程序来批量加密ASCII编码文件。因此,这将涵盖用于监督学习的学习数据的收集。使用加密文件输入神经网络和原始文件作为训练数据我可以训练任何网络。但是现在我被卡住了,你会建议如何将输入和输出数据提供给神经网络。那么你们会使用多少输入和输出神经元?
由于我不知道加密文件会是什么样子,因此以二进制形式传递数据可能是最好的主意。但我不能只使用数千个输入和输出神经元并同时传递所有位。也许经常性的网络和一个接一个的馈送?听起来也不是很有效。
另一个问题是,你不能部分解密 - 这意味着你不能大致正确。你要么做对不对。换句话说,最后净误差必须为零。根据我迄今为止使用ANN所经历的情况,这对于大型网络来说几乎是不可能实现的。这个问题可以解决吗?
另一个问题是,你不能部分解密 - 这意味着你不能大致正确。你要么做对不对。
这正是问题所在。神经网络可以近似 连续功能,意味着输入值的微小变化会导致输出值的微小变化,而加密函数/算法被设计为尽可能不连续。
我认为如果这样有效,人们就会这样做。据我所知,他们没有这样做。
说真的,如果你可以在神经网络上抛出大量的明文/密文对并构造一个解密器,那么它将是一种非常有效的已知明文或选择明文攻击。然而,我们对当前密码的这种攻击根本不是很有效。这意味着整个开放式加密社区都错过了这个想法,或者它不起作用。我意识到这远非一个确凿的论点(它实际上是来自权威的论证),但我认为这表明这种方法不起作用。
假设您有两个密钥A和B,分别将密文K转换为Pa和Pb。 Pa和Pb都是密文K的“正确”解密。因此,如果你的神经网络只有K作为输入,它就无法实际预测正确的答案。大多数加密破解方法都包括查看结果,看它是否与您所追求的一样。例如,可读文本更可能是明文而不是明显随机的垃圾。神经网络需要善于猜测它是否根据用户期望的内容得到正确的答案,这可能永远不会100%正确。
然而,神经网络理论上可以学习任何功能。所以如果你有足够的密文/明文对 对于特定的加密密钥那么一个足够复杂的神经网络可以学会完全是解密算法 对于那个特定的密钥。
关于连续与离散问题,这基本上已经解决了。输出有类似sigmoid函数的东西,所以你只需选择一个阈值1对0.5可以工作。通过足够的训练,理论上你可以得到1对0 100%的正确答案。
以上假设您有一个足够大的网络可以同时处理整个文件。对于任意大小的密文,您可能需要一次使用RNN执行块,但我不知道它是否仍然具有与传统网络相同的“计算任何功能”属性。
这些都不是说这种解决方案实际上是可行的。