Шифрование VB.NET с использованием пароля

У меня есть настольное приложение, в котором у пользователя есть библиотека зашифрованных файлов 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:

http://msdn.microsoft.com/en-us/library/system.security.cryptography.aescryptoserviceprovider.aspx#Y2300

С PBKDF2 для генерации ключа шифрования?


person John    schedule 29.06.2012    source источник
comment
Re: Обновление: С какой частью у вас проблемы? PBKDF дает вам массив байтов.   -  person SLaks    schedule 01.07.2012


Ответы (1)


Вам необходимо сохранить соль и счетчик итераций для функции PBKDF (которая не должна быть той же самой солью, которая используется для хеширования пароля).

Ключом будет результат PBKDF, который для данной соли и количества итераций является фиксированным.

Вам также необходимо сохранить IV.
Если вы хотите, вы можете использовать (PBKDF) хэш пароля, используя третью (сохраненную) соль в качестве IV.

person SLaks    schedule 29.06.2012
comment
В примере MS я не вижу, где счетчик итераций используется для дешифрования ... Как это вписывается? - person John; 30.06.2012
comment
Если вы хотите, вы можете использовать хэш пароля (PBKDF), используя третью (сохраненную) соль в качестве IV. Как это обеспечивает дополнительную безопасность? - person John; 30.06.2012
comment
@ John # 1: Как сказано в комментарии myIterations, они полагаются на значение по умолчанию. - person SLaks; 01.07.2012
comment
@ John # 2: он не позволяет злоумышленникам узнать IV. Не знаю, действительно ли это делает его более безопасным, но сделать это достаточно просто. - person SLaks; 01.07.2012