Нейронная сеть для дешифрования файлов - возможно?

Я уже работал с Neural Networks раньше и знаю о них большинство основ. У меня особенно есть опыт работы с регулярными многослойными перцептронами. Меня теперь спросил кто-то, если возможно следующее и как-то почувствовать себя оспариваемым, чтобы справиться с проблемой:)


Ситуация

Предположим, у меня есть программа, которая может шифровать и расшифровывать обычные ASCII-кодированные файлы. Я понятия не имею о конкретном методе шифрования или используемом ключе. Все, что я знаю, это то, что программа может отменить шифрование и, таким образом, прочитать исходный контент.

Что мне нужно?

Теперь мой вопрос: вы думаете, что можно обучить (какую-то) нейронную сеть, которая с приемлемым усилием реплицирует точный алгоритм дешифрования?

Мои идеи и работа до сих пор

У меня мало опыта в шифровании. Кто-то предложил просто предположить шифрование AES, поэтому я мог написать небольшую программу для пакетного шифрования ASCII-кодированных файлов. Таким образом, это будет охватывать сбор учебных данных для контролируемого обучения. Используя зашифрованные файлы как вход для нейронных сетей, так и исходные файлы в качестве учебных данных, я мог бы обучать любую сеть. Но теперь я застрял, как бы вы предложили подавать входные и выходные данные в нейронную сеть. Итак, сколько входов и выходов-нейронов вы бы использовали? Поскольку у меня нет идеи, как выглядят зашифрованные файлы, может быть, лучше всего передать данные в двоичной форме. Но я не могу просто использовать тысячи входных и выходных нейронов и передавать все биты одновременно. Может быть, повторяющиеся сети и кормить один бит за другим? Также звучит не очень эффективно.

Другая проблема заключается в том, что вы не можете расшифровать частично - это означает, что вы не можете быть грубо правильным. Вы либо правильно, либо нет. Иначе говоря, чистая ошибка должна быть равна нулю. Из того, что я до сих пор наблюдал с ANN, этого почти невозможно достичь для больших сетей. Так разрешена ли эта проблема?

Ответ 1

Другая проблема заключается в том, что вы не можете расшифровать частично - это означает, что вы не можете быть грубо правильным. Вы либо правильно, либо нет.

Это точно проблема. Neural Networks может приближать непрерывные функции, что означает, что небольшое изменение входных значений вызывает небольшое изменение выходного значения, тогда как функции/алгоритмы шифрования чтобы быть как можно более непрерывным.

Ответ 2

Я думаю, что если это сработает, люди это сделают. Насколько я знаю, они этого не делают.

Серьезно, если бы вы могли просто выбросить много пар открытого текста/шифротекста в нейронную сеть и построить decrypter, тогда это будет очень эффективная атака известного открытого текста или выбранного текста. Но атаки такого рода, которые мы имеем против нынешних шифров, не очень эффективны. Это означает, что либо все открытое криптографическое сообщество упустило эту идею, либо это не сработало. Я понимаю, что это далеко не окончательный аргумент (это фактически аргумент от авторитета), но я бы предположил, что этот подход не будет работать.

Ответ 3

Скажем, у вас есть две клавиши A и B, которые транслируют зашифрованный текст K в Pa и Pb соответственно. Pa и Pb являются "правильными" дешифрованиями зашифрованного текста K. Итак, если ваша нейронная сеть имеет только K в качестве входных данных, у нее нет средств для фактического предсказания правильного ответа. Большинство способов взлома шифрования включают в себя просмотр результата, если он похож на то, что вам нужно. Например, читаемый текст, скорее всего, будет открытым текстом, чем, по-видимому, случайный мусор. Нейронная сеть должна быть хорошо угадана, если она получит правильный ответ в зависимости от того, что пользователь будет ожидать от содержимого, которое никогда не может быть на 100% правильным.


Однако, нейронные сети могут теоретически изучать любую функцию. Таким образом, если у вас достаточно пар cyphertext/plaintext для определенного ключа шифрования, то достаточно сложная нейронная сеть может научиться точно алгоритму дешифрования для этого конкретного ключа.

Также в отношении непрерывной и дискретной проблемы это в основном решается. Выходы имеют что-то вроде сигмовидной функции, поэтому вам просто нужно выбрать порог для 1 против 0. 0,5 может работать. С достаточной подготовкой вы могли бы теоретически получить правильный ответ за 1 против 0 100% времени.

Вышеприведенное предполагает, что у вас есть одна сеть, достаточно большая, чтобы обрабатывать весь файл сразу. Для зашифрованного текста произвольного размера вам, вероятно, потребуется делать блоки одновременно с RNN, но я не знаю, имеет ли он все те же свойства "вычислить любую функцию", что и для традиционной сети.

Ничто из этого не означает, что такое решение практически выполнимо.