Я создаю приложение, которое хранит несколько паролей пользователя.Первый пользователь должен указать свое имя пользователя и пароль, а после успешного входа в систему ему будут предоставлены все сохраненные пароли.
Поскольку вы используете C #, я предполагаю, что вы работаетена винде а не моно проект.Во-первых, пользователь подтвердил свою личность при входе в систему, поэтому нет необходимости просить его сделать это снова.
Во-вторых, используйте API защиты данных (DPAPI) .Это стандартный способ хранения пользовательских секретов в системе Windows.(см. Написание безопасного кода , глава 9, стр. 305).В более ранней версии .Net вам нужно будет взаимодействовать.В более поздних версиях .Net (3.5, IIRC) он доступен через CLR.
Наконец, MD5 сломан, поэтому его не следует использовать в криптографических целях.NIST рекомендует уровень безопасности 112 бит (ср., Специальная публикация 800-57 ).То же самое для ECRYPT .
Если вам нужно сбросить DPAPI, используйте SHA-224 или выше в качестве хэша для функции получения ключа на основе пароля.Зашифруйте файл с помощью 3-х ключей TDEA, AES, Camellia и т. Д. Используйте аутентифицированный режим шифрования (EAX, CCM, GCM) для обнаружения взлома.Если у вас нет режима шифрования с проверкой подлинности, вам необходимо добавить гарантии подлинности с помощью CMAC или HAMC (DPAPI сделает это за вас).
Jeff