Надежная защита информации — актуальная проблема. Количество данных в мире возрастает со скоростью 50000 гб/сек [1]. Человек все больше хочет обезопасить свою информацию, но при этом иметь к ней прямой доступ. Для этого используются шифры, позволяющие переводить открытую информацию в закрытую при помощи секретного алгоритма или ключа. Довольно часто возникает необходимость сохранить информацию в секрете до определенного момента. Это могут быть как простые поздравления, открытки, так и довольно серьезные разработки, о которых не должны узнать до их официальной презентации.
В настоящее время применяются несколько вариантов передачи информации для использования ее в необходимый момент:
- Физическая передача.
- Передача информации электронным способом в зашифрованном виде с последующей передачей ключа.
- Передача по электронному каналу связи в необходимый момент.
Рассмотрим каждый из них:
- Физическая передача информации осуществляется при помощи курьеров, поэтому велика вероятность получения оной сторонними лицами, ее изменения, либо утери. Этот метод является самым незащищенным.
- При передаче в зашифрованном виде, утечка открытой информации практически невозможна. Главным неудобством такой системы является необходимость передачи ключа. Для дешифрации информации в определенное время, ключи должны быть переданы в соответствующий временной период. В случае утери связи с адресатом, ключи или информация не будут своевременно получены адресатом.
- Передача информации по каналу связи в определенный момент также обладает недостатком. В случае неисправности оборудования при передаче данных, информация не дойдет до адресата и будет утеряна. Ключевым плюсом этого механизма передачи данных является невозможность получения информации до необходимого срока.
В нашей работе используются такие библиотеки как Time [9] — для получения корректного времени с сервера, Datetime [7] — для перевода даты, представленной в стандартном виде в секунды от начала эпохи, Random [8] — для генерации случайного токена, Tkinter [10] — для отрисовки графического интерфейса, Requests [16] — для общения с сервером точного времени. И модуль, не использованный в программах, но позволяющий скомпилировать их в исполняемый файл — Pyinstaller [14].
Описание шифрования и принцип работы программы
Для усложнения взлома, в нашей программе используется собственная система шифрования. За основу взята система с закрытым ключом. В качестве ключа используется время в секундах от начала эпохи до времени расшифровки. Время в секундах от начала эпохи (UNIX время) — общепринятая система измерения времени в программах. Представляет собой количество секунд, прошедших с 01.01.1970 [11]. Во время работы программы дешифратора номер каждой секунды от начала эпохи проверяется как ключ. Если он подходит, начинается процесс дешифрации с использованием этого ключа. Поэтому для расшифровки, программу-дешифратор нужно запустить раньше срока расшифровки и ожидать, когда при наступлении оговоренного срока начнется процесс дешифрации.
Принцип работы кода программы шифратора
Она не обладает графическим интерфейсом, так как может быть использована алгоритмом.
Импортируем модули времени, рандом.
Получаем от пользователя время расшифровки файла и сам файл.
Читаем файл побайтово.
Преобразуем двоичную кодировку в шестнадцатеричную.
Генерируем одноразовый токен.
Для ускорения работы шифруем 50 % файла, выбираем случайные символы для шифрования.
При помощи цикла шифруем выбранные символы.
Если символ — буква, умножаем его символ в таблице символов на время расшифровки, деленное на токен.
Если цифра, то умножаем ее на время расшифровки, деленное на токен.
Добавляем в начало строки токен.
Записываем файл.
Принцип работы кода программы для расшифровки
Она должна обладать интерфейсом, причем темным, чтобы не «бить» по глазам, ведь время расшифровки может прийти ночью.
Импортируем модули общения с сервером времени, для удаления погрешности на запрос к серверу, для отрисовки графического интерфейса.
Создаем функцию получения точного времени:
Запоминаем время до запроса.
Делаем запрос к серверу.
Прибавляем к полученному времени время на запрос.
Создаем главную функцию:
Даем пользователю выбрать файл для расшифровки.
Читаем его.
Получаем точное время при помощи функции, описанной выше.
Проверяем, не подходит ли сейчас идущая секунда, как ключ.
Если секунда подходит, начинаем расшифровку.
Записываем файл.
Рисовка интерфейса:
Создаем объект Tkinter.
Создаем Label для информации и располагаем его.
Создаем кнопку для запуска главной функции и располагаем ее.
Применение разработки
Разработка может быть применима для защиты информации от ее утечки, до срока ее использования. Защищаемая информация может быть изображением, текстом, презентацией, аудио, видео, исполняемым файлом, скриптом и любым другим файлом, записанным двоичным кодом. Программа может использоваться для защиты разработок до их официальной презентации, может открывать поздравления и т. п.
Для работы программ шифрации и дешифрации нужна лишь операционная система Windows. Для перевода скрипта.py в исполняемый файл.exe мы воспользовались модулем Pyinstaller и auto_py_to_exe. Отсутствие необходимости установки Python и дополнительных модулей для работы программы делает ее общедоступной. Кроме того, скомпилированные скрипты не позволят злоумышленникам похитить механизм шифрации и подобрать ключ.
Предложенная программа шифрования данных до определенного срока, позволит частным или юридическим лицам защищать свою информацию до наступления установленного времени. С помощью этой программы удобно расшифровать информацию без передачи ключа отдельно, не используя курьеров или сети, что, несомненно, делает ее безопасней существующих методов. Системные требования программы позволяют запустить ее на большинстве компьютеров. Для проверки защищенности информации, программа была загружена в социальную сеть ВК группу по кибербезопасности в качестве загадки. Пользователям предлагалось получить информацию с инструкцией для дальнейших действий до наступления определенного времени. Для прохождения задания необходимо было отправить текст из файла в личные сообщения автора. Скачиваний файла было порядка 200, однако ни один человек не смог заполучить информацию до срока. Затем пост был удален для предотвращения утечки программы. Из проведенного эксперимента следует, что программа является безопасной и может использоваться для шифрования данных на определенный срок.
Информация, чертежи, документы могут безопасно храниться до их официального релиза. Такая программа обеспечивает безопасность любой информации, что делает ее востребованной и универсальной. За помощь в работе благодарим сотрудников Яндекс.Лицея за обучение языку программирования Python 3, научного руководителя Филину Екатерину Владимировну и родителей!
Литература:
- Благирев А. Big Data простым языком.- М.:АСТ, 2019.
- Борсук Н. А., Козеева О. О. Сравнительный анализ языков программирования Python и php // Символ науки. № 4, 2017
- http://cryptographer.ru/article1.php
- http://www.tadviser.ru/index.php/ %D0 %A1 %D1 %82 %D0 %B0 %D1 %82 %D1 %8C %D1 %8F: %D0 %9A %D1 %80 %D0 %B8 %D0 %BF %D1 %82 %D0 %BE %D0 %B3 %D1 %80 %D0 %B0 %D1 %84 %D0 %B8 %D1 %8F
- https://compress.ru/article.aspx?id=10135&iid=420
- https://dic.academic.ru/dic.nsf/ruwiki/1305314
- https://docs.python.org/3/library/datetime.html?highlight=datetime#module-datetime
- https://docs.python.org/3/library/random.html?highlight=random#module-random
- https://docs.python.org/3/library/time.html
- https://docs.python.org/3/library/tkinter.html?highlight=tkinter#module-tkinter
- https://habr.com/ru/post/123461/
- https://inf1.info/hexadecimal
- https://lifehacker.ru/otpravka-pisem-v-budushhee/
- https://pypi.org/project/PyInstaller/
- https://python-scripts.com/import-modules-python
- https://pythonru.com/biblioteki/kratkoe-rukovodstvo-po-biblioteke-python-requests
- https://studfiles.net/preview/6210714/
- https://www.helloworld.ru/texts/comp/lang/python/python2/index.htm