R2-D2, C3PO и Чубакка учатся шифровать сообщения или генеративно-состязательные сети в криптографии
Введение
Задавались ли вы вопросом: могут ли нейронные сети использовать секретные ключи для защиты информации? В этой статье мы узнаем, как обучить две нейронные сети (будем называть их R2-D2 и C3PO) end-to-end шифрованию и дешифрованию сообщений с помощью секретного ключа, не предписывая им конкретные криптографические алгоритмы, а вместо этого мы будем тренировать их с нуля.
Детали обучения
Начнем с R2-D2. Он будет получать на вход n-битное сообщение (закодированное в вектор значений -1 и 1 для представления 0 и 1 соответственно) и аналогично закодированный n-битовый ключ. Задача R2-D2 состоит в том, чтобы выдать n-битный вектор, его мы воспринимаем как зашифрованный текст. R2-D2 будет представлять из себя полносвязный слой, за которым следуют четыре одномерных сверточных слоя.
В обработке изображений, чтобы воспользоваться свойством пространственной локальности в изображениях, более распространено использование сверточных слоев, за которыми следует полносвязный слой. Для криптографии же мы хотим, чтобы локальность была изученным свойством, а не заданным заранее (когда первые n-бит соответствуют тексту, а следующие n-бит - ключу).
C3PO получает в качестве входных данных зашифрованный текст и тот же ключ, который был дан R2-D2. Задача C3PO: восстановить исходное сообщение. Архитектура нейронной сети C3PO идентична R2-D2:
Вот и все, вперед нейронные сети!
Стойте стойте стойте, а ведь R2-D2 и C3PO начнут просто игнорировать ключи и передавать на выход исходное сообщение, зачем им учиться шифровать и дешифровать сообщения с помощью данного ключа? Тут нам и понадобится Чубакка.
Чубакка будет представлять из себя враждебную нейронную сеть, которая на вход получает только зашифрованный текст и пытается выдать исходный текст.
Чем лучше у Чубакки это получается, тем хуже шифруют и дешифруют сообщения R2-D2 и C3PO. И наоборот, чем лучше R2-D2 и C3PO шифруют и дешифруют сообщения, тем хуже у Чубакки получается расшифровать зашифрованный текст без ключа.
Функция потерь Чубакки и C3PO - L1 расстояние от исходного сообщения. Другими словами, они обучаются восстанавливать сообщение по зашифрованному тексту. Функция потерь для C3PO обновляется таким образом, чтобы она также учитывала оценку реконструкции Чубакки (чем лучше Чубакка восстанавливает сообщение, тем больше функция потерь C3PO).
Все вместе выглядит так:
Теперь точно все, приступаем к обучению!
Результаты обучения
Зеленая линия показывает ошибку реконструкции Чубакки, а красная линия - ошибку C3PO. Вы можете видеть, что примерно за 8000 шагов обучения C3PO и Чубакка начинают восстанавливать исходное сообщение (хотя C3PO справляется лучше, чем Чубакка). Примерно через 15000 шагов обучения C3PO эффективно дешифрует зашифрованное сообщение.
Ручная проверка сети R2-D2 показала, что эффект изменения ключевого бита или бита текста распространялся на несколько элементов зашифрованного текста (а не ограничивался одним битом, как это было бы с XOR). Обычно однобитное изменение значительно влияет на 3-6 элементов вывода с меньшими изменениями в других элементах.
P.S. реализация будет доступна позже.