У меня есть настольное приложение, в котором у пользователя есть библиотека зашифрованных файлов ZIP. Файл конфигурации содержит мастер-пароль для расшифровки этих ZIP-архивов. Идея состоит в том, что пользователь вводит пароль программы, который он выбрал при установке приложения, чтобы открыть программу, и этот пароль используется для расшифровки главного пароля, хранящегося в файле конфигурации.
Суть всей этой безопасности заключается в том, что даже если кто-то имеет доступ к жесткому диску и учетной записи Windows пользователя, в идеале он все равно не сможет проникнуть внутрь ZIP-файлов без пароля.
Чтобы проверить пароль программы, введенный пользователем, я использую хэш-код C # (преобразованный в VB) отсюда (внизу страницы):
http://crackstation.net/hashing-security.htm
Все идет нормально. Мы храним только хэш пароля программы, поэтому хакер не мог прочитать его, просмотрев файл конфигурации.
Теперь я пытаюсь реализовать шифрование, как показано здесь:
http://msdn.microsoft.com/en-us/library/yx129kfs.aspx
Актуальный вопрос:
Итак, что из следующего сохраняется в виде простого текста в файле конфигурации, который будет использоваться для расшифровки главного пароля ZIP во время выполнения с помощью пароля программы, введенного пользователем?
Соль, используемая для генерации ключа шифрования (может ли она быть такой же, как соль, используемая для хеширования пароля, как указано выше?)
Вектор инициализации (IV)?
Ключ шифрования? (Вероятно, нет ...) (k1 в примере MS)
Ключ дешифрования? (k2 в примере MS)
В примере MS у них есть шифрование и дешифрование, перемешанные вместе ... У меня много частей, но я не знаю, как их собрать ...
Обновить
Я читал, что шифрование AES более безопасно, чем шифрование Triple DES, которое MS использует в приведенном выше примере. Видя, что мы используем AES для zip-файлов, было бы неплохо использовать AES и для пароля ZIP-файла.
Итак, как я могу объединить этот пример AES:
С PBKDF2 для генерации ключа шифрования?