Задать вопрос
@d1sn3y_1337

Как обезопасить секрет в памяти?

Привет! Я начал разрабатывать достаточно чувствительное ПО и столкнулся с проблемой хранения секрета в памяти. Есть некоторый массив байт - как можно максимально обезопасить его так, чтобы извлечь секрет было невозможно с помощью WinApi-hooking, DLL-инъекций, руткитов, дампов и других подобных методов без доступа к 0-му кольцу? Возможно, это звучит как бред - если хочешь защищенное ПО, нужен доступ к драймерам - но существует ли способ максимально защитить секрет без таких прав? Неужели Windows не предоставляет разработчикам (у которых нет подписанных драйверов) никаких возможностей для защиты? или предоставляет только косвенные.

З.Ы. Важно, что секрет постоянно используется в программе для шифровки данных и иногда может меняться, отсюда вопроc: как в последствии безопасно пользоваться ключом?
  • Вопрос задан
  • 307 просмотров
Подписаться 2 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Яндекс Практикум
    Разработчик C++ расширенный
    12 месяцев
    Далее
  • Яндекс Практикум
    Мидл разработчик С++
    4 месяца
    Далее
Пригласить эксперта
Ответы на вопрос 3
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Обезопасить полностью — никак. Можно только усложнить доступ к данным. Есть Windows Data Protection API — можно использовать его для хранения ваших данных. Есть Rfc2898DeriveBytes Class для получения ключа на основе пароля с использованием псевдо-случайного генератора. Вот тут ещё пишут на эту тему: How to securely save username/password

Так же не забываем про другие методики защиты приложения от попыток чтения памяти — ограничения прав, шифрование переменных в памяти и целых блоков, использование рандомизации выделения адресов и блоков в памяти, ссылочные типы, какая-нибудь изощрённая логика алгоритмов, пропущенная через какой-нибудь безумный оптимизатор, алгоритмы с бессмысленной логикой, определение попыток доступа к памяти, использование нестандартных компиляторов и языков программирования, и всё такое прочее. А ещё есть отдельные инструменты для защиты приложений типа Enigma Protector и Enigma Virual Box. Стандартный подход: усложнить взлом на столько, чтобы процесс взлома был дороже полученного результата.

Если кому-то очень будет надо — всё равно вскроют и достанут всё, что нужно, независимо от всех ваших усилий и их объёма.
Ответ написан
Комментировать
CityCat4
@CityCat4 Куратор тега C
Жил да был черный кот за углом...
Защиты, которая не ломается нет. Обычный принцип защиты - усложнить взлом настолько, чтобы от него отказались.
Ответ написан
Комментировать
Используйте аппаратный ключ с ключом шифрования, который будет шифровать/дешифровывать ваши данные в памяти.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы