Можно ли хранить пароли в локальной системе (Windows XP), к которым может получить доступ только само приложение?
Мой инстинктивный ответ был бы «нет». Даже если используется какое-то хеширование или шифрование, я бы подумал, что пока доступен исходный код, определенный искатель всегда может использовать его для получения пароля.
Я работаю над личным хобби-проектом с открытым исходным кодом, в котором я хотел бы дать пользователям возможность хранить пароли на диске, чтобы им не приходилось вводить их каждый раз, когда они используют программное обеспечение. Одним из примеров пароля, который можно сохранить, может быть пароль, используемый для аутентификации на прокси-сервере их сети.
Здесь есть несколько связанных вопросов о переполнении стека, и наиболее подходящим решением является использование службы операционной системы, такой как DPAPI.
Верна ли основная посылка, что до тех пор, пока пароль может быть извлечен программным обеспечением без какого-либо ввода пользователя, а исходный код является открытым, пароль всегда будет извлекаться (технически и умышленно склонным) прохожим?





Вы можете прочитать о том, как разработчики Pidgin взяли его на вооружение, здесь: Простые текстовые пароли.
Если пароль может быть восстановлен программным обеспечением без какого-либо пользовательского ввода, то пароль всегда сможет восстановить прохожий (с технической точки зрения и умышленно настроенный). Открытый или закрытый исходный код влияет только на то, сколько усилий требуется.
Использование DPAPI в режиме UserData позволит только вашей учетной записи на вашем компьютере получить доступ к зашифрованным данным.
Он генерирует главный ключ на основе ваших учетных данных и использует его для шифрования.
Безусловно, вы можете написать программу для безопасного хранения паролей.
Используя AES, вы можете заставить свою программу генерировать ключ AES и хранить этот ключ в защищенной области операционной системы. В WinXP это реестр, зашифрованный с помощью DPAPI. Таким образом, единственный способ получить доступ к ключу - иметь физический доступ к машине.
Вам необходимо убедиться, что при создании ключа AES вы делаете это криптографически безопасным способом. Простое использование RAND не сработает и не будет генерировать случайную строку символов.
Открытый исходный код имеет очень мало общего с безопасностью (на мой взгляд). Учитывая уровень сложности инструментов для обратного проектирования исходного кода, даже если у вас было решение с закрытым исходным кодом, люди, решившие отслеживать ваш код, могли это сделать.
Ваши усилия лучше потратить на то, чтобы следовать рекомендациям по передовой практике при использовании выбранной схемы шифрования. Я бы сказал, что открытое рассмотрение вашего кода более широким сообществом на самом деле сделает ваш код более безопасным; уязвимости и угрозы, вероятно, будут обнаружены раньше, если более широкая аудитория будет просматривать ваш код.