Вопрос или проблема
Итак, я решил написать свой собственный менеджер паролей. Есть подобные посты, но с менее конкретными (или не полностью охваченными) ответами/запросами.
Учитывая, как популярные операционные системы написаны с избыточным кодом и с небольшим вниманием к безопасности, я хочу хотя бы минимизировать риск.
Изначально я хотел сделать это на python3, но поскольку он не позволяет управлять памятью и очищать строку пароля после использования, я рассматриваю возможность перейти на любой язык + библиотеку GUI, которая соответствует моим ожиданиям (очистка всех копий переменных + кроссплатформенность):
-
позволяет перезаписывать оригинальную переменную строкой пароля (C/C++ это позволяет)
-
безопасная библиотека GUI? которая гарантирует, что я могу очистить пароль из элементов GUI? GUI может иметь свои собственные копии переменной пароля, которые могут быть недоступны для меня для перезаписи после того, как я поместил его в GUI, поэтому, вероятно, должны быть методы GUI для этого или GUI, использующий ссылку на переменную и не создающий никаких копий вообще…
-
альтернативно (хотя это не лучшее решение), я думал, что может быть второе приложение, использующее системные вызовы для перезаписи памяти после закрытия приложения; это потребует запуска такого приложения с указанием памяти для перезаписи и должно работать на Windows/Linux/Android
-
Я хочу, чтобы мое приложение можно было компилировать на Windows/Linux/Android без переписывания большей части кода (например, GUI)
-
Я думаю о переходе на C++, если есть набор инструментов/библиотек, которые позволят мне портировать его с GUI на Android и сохранить все в безопасности.
Моя цель – иметь 3 слоя шифрования с 3 разными библиотеками (и методами шифрования) и 3 разными паролями. Снова, это я уже могу найти в C/C++. Это удовлетворит мои параноидальные требования позволить такой зашифрованный файл в облаке – предполагая, что хотя бы одна библиотека/шифрование не повреждены.
Также я хочу, чтобы мои пароли очищались из памяти через некоторое время после расшифровки (например, 60 секунд), чтобы минимизировать риск раскрытия ОС.
В общем, я хочу охватить:
- риск наличия расшифрованного пароля в памяти
- риск того, что GUI сохранит копию расшифрованных паролей, которая недоступна для перезаписи
- риск раскрытия облачного файла, имея 3 независимых слоя шифрования.
- множественные устройства, использующие библиотеку паролей через облачное хранилище
Любые предложения о том, как проще всего проверить, что память была очищена на Windows/Linux/Android, приветствуются. На Windows был cheatengine, но, может быть, сегодня есть что-то лучше?
Ответ или решение
Ваша задача разработать безопасный менеджер паролей требует внимательного выбора языка программирования, библиотек и графических интерфейсов. Я представлю несколько рекомендаций, основываясь на ваших требованиях, с акцентом на безопасность и возможность кросс-платформенной разработки.
Язык программирования: C++
C++ является отличным выбором для создания менеджера паролей по следующим причинам:
- Управление памятью: C++ позволяет вам управлять памятью напрямую и гарантировать, что пароли будут очищены из памяти после использования (например, путем перезаписи переменных).
- Кросс-платформенность: C++ можно скомпилировать на Windows, Linux и Android без значительных изменений в коде, что особенно важно для вашей цели.
Библиотеки для шифрования
Для достижения ваших целей, связанных с безопасностью, вы можете рассмотреть следующие библиотеки:
-
cryptlib: Эта библиотека предоставляет обширный набор криптографических функций. Она поддерживает различные алгоритмы шифрования и обеспечивает гибкость при использовании нескольких слоев шифрования.
-
OpenSSL: Это одна из самых известных библиотек для шифрования, которая поддерживает множество стандартов и протоколов. Вы можете использовать OpenSSL для реализации вашего трехуровневого шифрования.
-
libsodium: Эта библиотека разработана с акцентом на простоту использования и безопасность. Она предлагает удобные функции для шифрования и работы с безопасными строками.
GUI-библиотеки
Для создания графического интерфейса вы можете рассмотреть следующие библиотеки:
-
Qt: Qt — это мощный фреймворк для разработки кросс-платформенных приложений с поддержкой C++. Он обеспечивает множество функций и инструментов для создания сложных графических интерфейсов. Важно отметить, что Qt предоставляет методы для управления памятью, и вы можете реализовать очистку данных.
-
wxWidgets: Это еще одна кросс-платформенная библиотека для создания графических интерфейсов. Она позволяет разрабатывать приложения для разных ОС с минимальными изменениями в коде.
-
FLTK: Этот легкий фреймворк GUI также является хорошим выбором для проектов, где важна эффективность и безопасность.
Очищение памяти
Для реализации автоматического удаления паролей из памяти вы можете использовать фоновый поток или таймер. Этот подход позволит вам устанавливать срок жизни переменных, после чего они будут перезаписаны нулями или случайными значениями.
Риски безопасности
Для минимизации рисков, связанных с оставлением расшифрованных паролей в памяти:
-
Контролируйте доступ к переменным: Убедитесь, что GUI не создает копии паролей. Используйте ссылки или указатели на переменные для передачи данных в интерфейс.
-
Запланированное очищение: Реализуйте функцию травмы, которая будет перезаписывать пароли через заданный интервал времени (например, через 60 секунд после их расшифровки).
-
Тестирование безопасности: Для тестирования успешной очистки памяти вы можете использовать инструменты, такие как Valgrind на Linux или Debug Diagnostics Tool на Windows. Для Android попробуйте использовать Android Profiler в Android Studio.
Обмен паролями через облако
Для обеспечения безопасности облачных файлов установите сертификаты и используйте шифрование на уровне файловой системы. Убедитесь, что каждая из ваших библиотек использует уникальные ключи шифрования для каждого слоя, чтобы злоумышленник не мог получить доступ ко всем данным сразу.
Заключение
Выбор языка C++ и использование перечисленных библиотек обеспечат вам возможность разработки безопасного кросс-платформенного менеджера паролей, который сможет эффективно справляться с вашими требованиями к безопасности. Убедитесь, что вы также реализуете тестирование на безопасность, чтобы проверить, что данные правильно очищаются из памяти после их использования.