@12rbah

Как правильно хранить ключ шифрования для десктопных приложений?

Недавно увидел статью https://habr.com/ru/company/globalsign/blog/492970/ (кратко взлом относительно старых версий team Viewer, который хранил файлы с паролями в реестре в зашифрованном виде), и задался вопросом, есть ли надежный способ для хранения ключа шфирования (с учетом того, что он должен хранится локально)?
  • Вопрос задан
  • 309 просмотров
Решения вопроса 1
wataru
@wataru
Единственный надежный способ - это использовать мастер пароль. Если пароля нет, то любой способ шифрования можно отреверс-инженирить и расшифровать все сохраненные данные точно так же, как это делает сам продукт. Иногда даже разбираться не надо - можно просто выдрать нужные куски кода из продукта и запустить.

А с поролем - надо какой-то криптографически стойкой kdf-функцией преобразовать его в ключ шифрования и дальше применять хоть AES, хоть какой-то другой алгоритм шифрования.

Главное самостоятельно ничего криптографического не велосипедить. Берите популярные крипто-библиотеки и используйте стандратные и современные криптографические приметивы.

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

Для проверки, что пароль правильный, данные надо снабдить какой то контрольной суммой (до шифрования).

Все остальное - это security through obscurity. Не работает в долгой перспективе.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Jump
@Jump
Системный администратор со стажем.
Да как угодно.
В вашем случае ключ шифрования это по сути просто ценная информация, утечка которой критична.
Не храните ее на компьютере, если храните то зашифруйте, и компьютер от сети отключите.
Ответ написан
@none7
Пароли в принципе нельзя хранить, ни на диске, ни в памяти, ни к чему хорошему это не приводит. Даже мастер-пароли могут украсть во время их ввода и обработки. Но справедливости ради сервера хранят секретные ключи, чтобы мы могли к ним подключится с шифрованием. Они всего лишь уповают на разграничение привилегий операционной системой. Но если другая программа запущена с привилегиями Вашем программы или более высокими или злоумышленник имеет физический доступ к Вашему железу, то они могут прочесть все ваши секреты. Но на Windows или Android это разграничение бесполезно, на первой куча мусора исполняется с максимальными привилегиями, а на второй дыры не закрывают вообще и только самоё свежее железо в состоянии хранить секреты.
Безопасность это комплекс мер и простым действиями на уровне программы её не обеспечить.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы