Могу ли я использовать PBKDF2 для генерации ключа AES256 для шифрования и неявной аутентификации? - PullRequest
5 голосов
/ 01 декабря 2010

У меня есть 2 устройства, и я хочу установить безопасный канал связи между ними.Единственный общий секретный ключ - это пароль (от 7 до 20 символов ASCII).Если я использую PBKDF2 (из RFC 2898) с общей солью, итерациями и парольной фразой для генерации ключа AES256-CBC и IV с обеих сторон, я думаю, что смогу аутентифицировать пользователя и предоставить зашифрованный канал за один шаг.Это правда, или есть какая-то причина, почему я видел, как люди используют PBKDF2 только для проверки паролей?

Я считаю, что обеим сторонам нужно знать кодовую фразу для генерации одного и того же ключа и IV.Поэтому, если устройство B может дешифровать данные с устройства A, они оба продемонстрировали, что имеют одинаковую парольную фразу.

Ответы [ 4 ]

4 голосов
/ 01 декабря 2010

PBKDF2 - это прекрасный способ генерации общего ключа из общего секрета (хотя генерировать IV таким способом не следует - этот IV должен быть случайным и передаваться вместе с зашифрованным текстом).

Однако CBC не является режимом шифрования аутентификации. Это связано с тем, что злоумышленник может взять зашифрованное сообщение и внести в него предсказуемые изменения без необходимости читать сообщение или знать ключ. Такие атаки сломали системы реального мира в прошлом.

Вместо CBC вы можете использовать режим шифрования аутентификации, такой как Счетчик Галуа (GCM).

Альтернативой является Encrypt-Then-MAC. Используйте PBKDF2 с двумя разными солями для генерации двух разных ключей - сначала данные шифруются с использованием CBC с первым ключом, а затем HMAC вычисляется по шифротексту с использованием второго ключа.

Вам также понадобится использовать одноразовые одноразовые номера для предотвращения повторных атак.

2 голосов
/ 01 декабря 2010

Как правило, вы не сможете аутентифицировать сообщение, используя шифр, потому что сообщение может быть чем угодно. Однако, если сообщение соответствует какому-либо указанному формату, я полагаю, что разумно предположить, что зашифрованный текст должен быть создан с общим ключом - более длинные сообщения в более сложных форматах дают большую уверенность. Например, заполнение в блочном шифре может служить слабой аутентификацией.

Для большей безопасности вычислите MAC, используя общий секрет, и отправьте его с зашифрованным текстом.

Хотя PBKDF2 можно использовать для создания IV, это можно сделать только для одного сообщения. В большинстве случаев лучше выбрать случайный IV и отправить его с зашифрованным текстом.

1 голос
/ 01 декабря 2010

PBKDF2 не «проверяет пароли». Генерирует ключи из паролей.

Для проверки пароля обычно у вас есть вещь, которая шифруется ключом. Ключ генерируется из исходного пароля через PBKDF2. Затем криптекст сохраняется.

Если вы хотите проверить, соответствует ли введенный пользователем текст паролю, сгенерируйте ключ из пароля-кандидата, используя PBKDF2, а затем попытайтесь расшифровать сохраненный криптекст. Если расшифровка работает, то у вас есть совпадение.

Обычно, однако, вы не используете ключ на основе пароля в качестве сеансового ключа .

Итак, НЕТ, вы обычно не защищаете защищенный канал с помощью ключа на основе пароля.

0 голосов
/ 01 декабря 2010

Кафе ответ хороший.Я просто хотел бы добавить, что вы пытаетесь внедрить криптографию, и даже для обученных экспертов это, как правило, плохая идея .Используя библиотеку самого высокого уровня, вы можете быть в безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...