Вы должны войти, чтобы создавать сообщения и темы.

Бастион V16 - Шифрование

Страница 1 из 24► 24

Всем привет!
Хочу поделиться ещё одной программой, возможно, кому-нибудь пригодится.

Бастион V16
Позволяет шифровать и расшифровывать текст с помощью криптографии, основанной на пароле.

Ключевые особенности

- Использует связку из функции формирования ключа (KDF), потокового шифра и HMAC для защиты ваших данных.

- Работает на SpongeV16 — кастомной «губке» с 512-битным (16x32) внутренним состоянием и функцией-перестановкой.

- HMAC (Hash-based Message Authentication Code) гарантирует, что зашифрованные данные не могут быть изменены без обнаружения.

- Позволяет контролировать количество раундов KDF для нахождения баланса между производительностью и безопасностью.

- Весь исходный код доступен для изучения.

Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg

Лайкнули Mio, Bad_Wolf и ещё 6
MioBad_WolfNemiro56PsydiantЛатукamazonReplaceStringOnePunchMan

Полностью переработан метод генерации паролей

Предыдущая реализация генератора паролей основывалась на стандартных алгоритмах C++.
Генератор Мерсенна-Твистера является превосходным генератором псевдослучайных чисел для статистических и симуляционных задач, однако он не является криптографически стойким.

Его внутреннее состояние можно предсказать после анализа достаточно длинной последовательности сгенерированных им чисел, что делает его непригодным для создания ключевой информации, такой как пароли.

Новый генератор построен по принципу криптографически стойкого генератора псевдослучайных чисел.
В качестве основного источника непредсказуемости (энтропии) теперь используется функция BCryptGenRandom() из API криптографии Windows.
Она предоставляет высококачественные случайные данные напрямую от операционной системы.

Полученная энтропия используется для инициализации "впитывания" состояния криптографической губки SpongeV16, которая уже является ядром криптосистемы "Бастион V16".
Пароль формируется из байтов, полученных путем "отжимания" из объекта SpongeV16.

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

Ссылка та же

Блокировка критических данных в оперативной памяти

Теперь все критически важные данные — вводимый пароль, производные ключи шифрования и аутентификации, а также сам расшифрованный текст — принудительно удерживаются в оперативной памяти на всё время их использования.

Ранее программа уже использовала надежный метод очистки памяти по окончании работы с секретными данными.
Однако это не защищало от специфического сценария атаки.

Современные операционные системы (включая Windows) для оптимизации производительности могут временно выгружать неактивные страницы оперативной памяти на жесткий диск в специальный файл (файл подкачки, или page file).
Если в этот файл попадали данные с ключом шифрования, они могли остаться на диске даже после того, как программа завершала работу и очищала память.

Благодаря нововведению, операционной системе категорически запрещено выгружать на диск те участки памяти, где "Бастион" хранит секреты.
Это полностью исключает риск утечки ключей через файл подкачки и обеспечивает дополнительный, "параноидальный" уровень защиты, соответствующий самым высоким стандартам безопасности для настольных приложений.

Ссылка та же

Чтобы сделать криптосистему "Бастиона" полностью прозрачной, самодостаточной и доказуемо честной, принято решение полностью перегенерировать все константы с нуля, используя сам SpongeV16.
Изначально константы достались от предыдущей вариации хешера, который был построен по другой архитектуре (в стиле SHA-2).

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

Ссылка та же

Добавлены проверки результатов системных вызовов генератора случайных чисел (BCryptGenRandom)

В редких случаях системный генератор может дать сбой.
Ранее это могло привести к использованию небезопасных (например, нулевых) данных для соли или нонса.
Теперь программа корректно отлавливает такие сбои и прерывает операцию шифрования, предотвращая создание потенциально уязвимых файлов.

Устранено дублирование кода в функциях открытия файлов.
Теперь вся логика загрузки файлов централизована в одном месте, что повышает стабильность программы и упрощает ее дальнейшую поддержку.

Проведена общая "чистка" кода и удалены избыточные проверки для повышения читаемости и качества кодовой базы.

Почему генератор паролей по умолчанию создает именно 21 символ

Выбор длины пароля по умолчанию в 21 символ — это не случайность, а осознанное инженерное решение.
Главная цель — обеспечить, чтобы сгенерированный пароль был как минимум таким же криптографически стойким, как и сам алгоритм шифрования, который он защищает.

В "Бастионе" для генерации паролей используется набор из 93 символов (латиница в обоих регистрах, цифры и все основные спецсимволы).
При длине в 21 символ, количество возможных комбинаций составляет 93²¹, что примерно равно 6.2 x 10⁴¹ (это шестёрка с 41 нулём).

В криптографии такая сложность измеряется в "битах энтропии".
Пароль из 21 случайного символа в "Бастионе" обеспечивает примерно 139 бит энтропии.

Это астрономически огромное число.
Чтобы понять его масштаб, давайте сравним с общепринятым стандартом:

"Золотым стандартом" современного симметричного шифрования является AES-128, который обеспечивает 128-битную безопасность.
Это означает, что пароль, сгенерированный "Бастионом", сложнее подобрать методом прямого перебора, чем взломать сам шифр AES-128.

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

Какую роль тогда играет KDF (раунды)

Функция выработки ключа (KDF) с 20 000 раундов служит дополнительным и очень важным уровнем защиты.
Она не может спасти от подбора очень слабого пароля (вроде "12345"), но она делает процесс перебора даже для паролей средней сложности чрезвычайно медленным и дорогим.

А для 21-символьного случайного пароля, подбор которого и так невозможен, KDF превращает атаку из "невозможной" в "абсолютно немыслимую".

Значение в 20 000 раундов выбрано как разумный компромисс между безопасностью и скоростью работы на среднестатистическом компьютере.
Однако, если ваше устройство достаточно мощное, вы можете значительно увеличить это число в поле "Раунды".

Установка значения в 200 000 или даже 1 000 000 раундов сделает каждую попытку подбора пароля для злоумышленника в 10 или 50 раз более затратной, при этом задержка при шифровании/расшифровании для вас может остаться вполне приемлемой.

Ссылка та же

Все операции чтения (LoadFileContent) и записи (DoSaveFile, save_settings) теперь используют блоки try-catch для перехвата любых сбоев.
Это предотвращает потерю данных или "тихие" отказы, если файл не может быть открыт, диск переполнен или у программы нет прав на запись.
Пользователь теперь получает информативное сообщение об ошибке.

Функции wstring_to_utf8 и utf8_to_wstring теперь проверяют результат вызовов WinAPI, предотвращая сбои в случае неудачного преобразования кодировок.

Внесены изменения для совместимости с компиляторами Clang и GCC (MinGW).
Теперь для открытия файлов с std::wstring используется стандартный метод .c_str(), что соответствует стандарту C++.

Ссылка та же

В облаке добавлены 64-разрядные версии программы

Настраиваемая длина генерируемого пароля

Рядом с кнопкой "Сгенерировать" появилось поле для ввода желаемой длины пароля.

Минимум 16 символов — это современный стандарт безопасности

С ростом вычислительных мощностей старые рекомендации (8-12 символов) постепенно устаревают.
Пароль из 16 символов, состоящий из букв разного регистра, цифр и спецсимволов, создает астрономически большое количество комбинаций.
Это делает его подбор методом "грубой силы" (brute-force) практически невозможной задачей даже для самых мощных систем.

Максимум 128 символов — для самых параноидальных сценариев

Честно говоря, пароль длиной даже в 30 символов уже является избыточно надежным для большинства задач.
Лимит в 128 символов — это разумный верхний предел для защиты чего-то сверхособого: долгосрочных архивов, мастер-ключей или данных, которые должны оставаться в безопасности десятилетиями.

Устаревшая двухэтапная инициализация структуры OPENFILENAMEW с помощью функции ZeroMemory была заменена на современный и более безопасный C++ подход с использованием агрегатной инициализации (OPENFILENAMEW ofn = {};).

В функциях DoOpenFile и DoSaveFile значение поля ofn.nMaxFile теперь вычисляется как sizeof(szFile) / sizeof(wchar_t).
Это обеспечивает корректную передачу размера буфера в количестве символов, а не в байтах, как того требует документация WinAPI.

Ссылка та же

Автоматическая блокировка зашифрованных данных

Реализован алгоритм, который анализирует содержимое основного текстового поля.
Если программа определяет, что в поле находятся зашифрованные данные (на основе их структуры, включающей HMAC и Base64), она автоматически переводит поле в режим "только для чтения", блокируя любой ввод с клавиатуры.

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

Как только вы успешно расшифровываете текст или очищаете поле, оно автоматически становится доступным для редактирования.

Ссылка та же

Умная установка атрибутов для сохраненных файлов

При сохранении файла "Бастион" анализирует его содержимое.
Если вы сохраняете зашифрованный текст, файл автоматически помечается атрибутом "Только для чтения".

При сохранении обычного текста этот атрибут снимается.

Теперь вы не сможете случайно открыть и повредить зашифрованный файл в стороннем редакторе (например, в Блокноте), так как операционная система предотвратит сохранение изменений.

Ссылка та же

Усилен механизм очистки памяти

Улучшена процедура удаления конфиденциальных данных (паролей, ключей шифрования) из оперативной памяти после их использования.

Теперь программа не просто затирает эти данные нулями, а выполняет двухэтапную очистку:

Сначала критически важная область памяти перезаписывается случайным набором байт, сгенерированным системным криптопровайдером.
Затем эта область затирается нулями, как и ранее.

Оптимизирована логика сохранения файлов

Предыдущая версия содержала одну и ту же проверку в двух разных местах.

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

Ссылка та же

ВАЖНОЕ ЗАМЕЧАНИЕ О СОВМЕСТИМОСТИ

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

Основные улучшения

1. Полностью переработанный криптографический алгоритм.

Центральная функция-перестановка, отвечающая за "перемешивание" данных, была заменена на новый, многослойный алгоритм.
Он спроектирован с использованием проверенных временем криптографических принципов (ARX и S-Box), которые обеспечивают значительно более надежное и сложное преобразование данных.

Новый алгоритм гарантирует превосходный "лавинный эффект".
Это означает, что даже малейшее изменение в исходном тексте или пароле приводит к кардинальному и совершенно непредсказуемому изменению всего зашифрованного результата.
Это делает любые попытки анализа или взлома шифра практически невозможными.

2. Усиленная защита от статистического анализа.

Структура нового алгоритма включает в себя несколько различных слоев преобразований, каждый из которых выполняет свою уникальную задачу по запутыванию и перемешиванию данных.
Такая многослойная защита (defense in depth) значительно повышает устойчивость к продвинутым методам криптоанализа.
Теперь алгоритм не имеет простых математических зависимостей, которые могли бы быть использованы для атак.

3. Прозрачность и верифицируемость: Принцип "Ничего в моем рукаве".

Все "магические числа" (криптографические константы), используемые в алгоритме, генерируются с помощью отдельной, публично доступной программы-генератора.
Этот генератор, в свою очередь, использует для своей работы сам финальный алгоритм "Бастиона" и общеизвестные математические константы (такие как Золотое сечение и √2).

Это стандартная практика в профессиональной криптографии, которая доказывает, что константы не были подобраны со злым умыслом для создания скрытых уязвимостей.
Любой желающий может запустить генератор и убедиться, что константы в программе получены честным и предсказуемым путем.

Вместе с генератором констант публикуются и официальные тестовые векторы.
Это заранее рассчитанные контрольные хеш-суммы для стандартных строк.

Тестовые векторы позволяют любому разработчику проверить, что его реализация алгоритма "Бастион" на другом языке или платформе на 100% совместима с оригиналом.
Это гарантирует целостность и предсказуемость работы криптографии.

Заключение

Обновленный "Бастион" представляет собой значительный шаг вперед в обеспечении безопасности и надежности.

Ссылка та же

Исправлено расположение файла настроек

Ранее, если вы сохраняли зашифрованный файл в какую-либо папку (например, на диске D:), файл настроек settings.dat также создавался в этой папке, а не рядом с программой.
Это могло приводить к потере настроек или созданию нескольких файлов settings.dat в разных местах.

Теперь программа всегда определяет свое собственное местоположение и сохраняет settings.dat исключительно в той же папке, где находится Bastion.exe.
Это гарантирует, что ваши настройки (размер окна, количество раундов и т.д.) всегда будут загружаться корректно, а работа программы станет более стабильной и предсказуемой.

Ссылка та же

Устранен конфликт сохранения для зашифрованных файлов

Ранее, если вы шифровали файл (который программа корректно помечала как "только для чтения" для защиты), а затем открывали его снова, расшифровывали и пытались сохранить, возникала ошибка.
Программа не могла перезаписать файл, который сама же и защитила.

Теперь "Бастион" работает умнее.
Перед любой операцией сохранения он автоматически проверяет, защищен ли файл от записи.
Если да, он временно снимает эту защиту, выполняет сохранение, а затем автоматически восстанавливает флаг "только для чтения", если сохраненный текст по-прежнему является зашифрованным.

Ссылка та же

Страница 1 из 24► 24