Введение
В условиях цифровой трансформации объём конфиденциальной информации, требующей защиты от несанкционированного доступа, неуклонно растёт. Традиционные централизованные хранилища уязвимы для атак и единых точек отказа. Альтернативой выступает дисперсное хранение, при котором данные шифруются, разбиваются на фрагменты и распределяются по нескольким независимым узлам. Существующие решения (Storj, IPFS, Cryptomator) обладают ограничениями: либо сложны в использовании, либо не обеспечивают встроенного шифрования, либо не поддерживают истинную распределённость.
Цель настоящей работы — описание разработанного программного модуля, реализующего дисперсное хранение документов с комбинацией криптографической защиты и избыточного кодирования, а также анализ его архитектуры и ключевых компонентов.
Архитектура программного модуля
Модуль спроектирован по принципам объектно-ориентированного подхода и включает следующие основные компоненты, представленные на рис.1:
Рис. 1. Упрощённая диаграмма классов программного модуля
– DocumentManager — отвечает за валидацию и чтение/запись файлов;
– CryptoEngine — реализует шифрование/дешифрование AES-256 в режиме GCM с выработкой ключа через PBKDF2;
– ShardingEngine — выполняет фрагментацию и сборку данных с помощью кодов Рида-Соломона (параметры N информационных и M избыточных фрагментов);
– StorageBackend — абсрактный интерфейс для различных хранилищ (локальная файловая система, S3-совместимые хранилища);
– MetadataManager — управляет сохранением метаданных документа (карта расположения фрагментов, параметры шифрования, хэши) в базе SQLite;
– RecoveryEngine — координирует процесс восстановления документа;
– MainController — обеспечивает взаимодействие между компонентами и пользовательским интерфейсом (Tkinter).
Такая архитектура обеспечивает высокую гибкость: например, для добавления нового типа хранилища достаточно реализовать интерфейс StorageBackend и зарегистрировать его в конфигурации. Криптографический алгоритм можно заменить, создав другую реализацию CryptoEngine. Все компоненты слабо связаны, что упростило модульное тестирование.
Реализация криптографической защиты
Для шифрования используется алгоритм AES‑256 в режиме GCM, который обеспечивает как конфиденциальность, так и аутентификацию данных [2]. Ключ формируется из мастер-пароля пользователя с помощью функции PBKDF2 (соль 16 байт, 100 000 итераций SHA‑256) [2]. Каждый документ получает уникальные соль и вектор инициализации (IV), что гарантирует отличие шифротекстов даже при одинаковых паролях.
Фрагмент кода реализации метода шифрования на Python с использованием библиотеки cryptography:
При дешифровании выполняется обратная операция с автоматической проверкой целостности.
Фрагментация с использованием кодов Рида — Соломона
Для обеспечения отказоустойчивости применяется схема избыточного кодирования (Erasure Coding). В частности, используются коды Рида — Соломона над полем Галуа GF(256), реализованные в библиотеке reedsolo [3;1]. При защите документа зашифрованные данные кодируются с добавлением M избыточных байт, после чего разбиваются на N+M фрагментов примерно равного размера. Параметры N и M могут задаваться пользователем (по умолчанию N=8, M=4). Это позволяет восстановить исходные данные при наличии любых N фрагментов [1].
На рис. 2 представлена схема процесса фрагментации и сборки:
Рис. 2. Схема фрагментации (вверху) и восстановления (внизу)
Данная реализация использует только проверенные криптографические примитивы и не содержит собственных «изобретений», что соответствует принципу «не доверяй самодельным криптоалгоритмам».
Модуль распределённого хранения
Унифицированный интерфейс StorageBackend позволяет подключать различные типы хранилищ. В текущей версии реализованы два бэкенда:
– LocalStorage — сохраняет фрагменты в локальной файловой системе, организуя иерархию подкаталогов по первым символам идентификатора фрагмента.
– S3Storage — взаимодействует с S3-совместимыми облачными хранилищами (MinIO, AWS S3 и др.) через библиотеку boto3 [4]. Для каждого фрагмента формируется ключ вида fragments/XX/fragment_id.
Конфигурация хранилищ задаётся в файле config.py, что позволяет легко добавлять новые бэкенды без изменения основной логики.
Управление метаданными
Информация о документе (идентификатор, список фрагментов с указанием бэкенда и пути, соль, IV, исходный размер, хэши фрагментов) хранится в базе данных SQLite. Использование SQLite обеспечивает атомарность операций и простоту резервного копирования. Метаданные могут быть дополнительно зашифрованы, однако в текущей версии предполагается, что доступ к файлу базы данных имеют только доверенные пользователи.
Пользовательский интерфейс и сценарии работы
Графический интерфейс построен на библиотеке Tkinter и поддерживает два основных режима: защита документа и восстановление. При защите пользователь выбирает файл, вводит пароль и при необходимости корректирует параметры N и M. Модуль генерирует уникальный идентификатор документа, который выводится на экран. При восстановлении вводится идентификатор и пароль, указывается путь для сохранения, после чего выполняется сбор фрагментов, проверка целостности и дешифрование.
Результаты тестирования
Проведено функциональное, нагрузочное и интеграционное тестирование модуля. Функциональные тесты подтвердили корректность шифрования/дешифрования и восстановления данных при различных комбинациях утраченных фрагментов. Нагрузочное тестирование (имитация работы с файлами до 100 МБ, использование 5 параллельных потоков) показало, что узким местом являются операции ввода‑вывода, а не криптографические вычисления. Время обработки документа размером 10 МБ при N=8, M=4 составило в среднем 2,3 с. (на ноутбуке с Intel i5, SSD).
Интеграционное тестирование с MinIO и AWS S3 подтвердило корректную работу с облачными хранилищами. Дополнительно проверена устойчивость к потере до M фрагментов — во всех случаях документ восстанавливался успешно.
Заключение
Разработанный программный модуль демонстрирует эффективное сочетание криптографической защиты и избыточного кодирования для дисперсного хранения конфиденциальных документов. Использование открытых библиотек и модульной архитектуры обеспечивает гибкость и возможность дальнейшего расширения (например, добавление поддержки децентрализованных сетей или иных криптоалгоритмов). Полученные результаты могут найти применение в корпоративных системах документооборота, персональных хранилищах и облачных сервисах, где требуется повышенный уровень безопасности и отказоустойчивости.
Литература:
- Plank J. S. Erasure Codes for Storage Systems: A Brief Primer // Usenix Magazine. — 2013. — Vol. 38, № 6. — P. 20–27.
- Cryptography documentation [Электронный ресурс]. — URL: https://cryptography.io/ (дата обращения: 14.03.2026).
- reedsolo: Reed-Solomon encoder / decoder [Электронный ресурс]. — URL: https://pypi.org/project/reedsolo/ (дата обращения: 14.03.2026).
- Boto3 documentation — AWS SDK for Python [Электронный ресурс]. — URL: https://boto3.amazonaws.com/ (дата обращения: 15.03.2026)
- ГОСТ Р 7.0.100–2018. Библиографическая запись. Библиографическое описание. Общие требования и правила составления. — М.: Стандартинформ, 2018.

