Возможно ли получение 128-битного ключа AES с PBKDF2 с использованием SHA-256

Я разрабатываю протокол шифрования, в котором мне нужно создать ключ AES в режиме CTR. Я решил сохранить длину ключа 128 бит, так как более короткий размер ключа будет означать меньшую вычислительную мощность для мобильных устройств.

Теперь, чтобы создать этот ключ, я использую PBKDF2, который позволяет мне устанавливать его определенные параметры, такие как хеш-функция и номер итерации, поскольку он создает ключ, используя исходную информацию, такую ​​как пароль, который у меня есть. Поскольку SHA-1 сломан, я хотел использовать SHA-256 для хэширования ключа функции деривации ключа, но я не понимаю, возможно ли это. Поскольку я хочу, чтобы ключ был 128-битным, а SHA-256 выдает 256-битный, способен ли PBKDF2 на это?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
519
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Во-первых, AES-256 не такой медленный по сравнению с AES-128. См. от Криптография

CPU overhead (+20% for a 192-bit key, +40% for a 256-bit key:

Выходной размер PBKDF2 равен используемой функции PRF, в вашем случае это хэш-функция SHA-256. Поэтому вывод будет иметь размер 256 бит.

Для функции PBKDF2 требуется параметр dkLen — желаемая длина ключа.

PBKDF2(PRF, Password, Salt, c, dkLen)

Когда вы поместите 128 в этот параметр, вы получите 128-битный. Результатом является подстрока полного 256-битного вывода. Вы получите первый 128-битный.

Вы можете увидеть это из реализации как здесь

Большое спасибо за ответ, так что, если эти 256 бит обрезаны и взяты первые 128 бит, означает ли это менее безопасный ключ?

Ahmet Eroğlu 09.07.2019 18:36

Короткий ответ: нет. Дизайн хеш-функций позволяет это. Вы можете видеть, что есть SHA-224 с другими начальными параметрами, но результат усечен до 224 бит.

kelalaka 09.07.2019 18:47

AES-256 ненамного медленнее, чем AES-128, установка ключей немного медленнее, и для каждого блока требуется всего 4 дополнительных раунда (от 11 до 15). Таким образом, это максимум примерно на 40% медленнее, а с современными телефонами, имеющими специальные наборы инструкций AES, вероятно, даже меньше.

PBKDF2 может выводить ключ практически любого размера, и в основном HMAC-SHA1 или HMAC-SHA256 (не SHA1 или SHA256 напрямую, но большинство API принимают только хеш-функцию в качестве параметра и неявно выполняют HMAC) используется в качестве строительного блока «случайная функция» . Но любой из них может создавать ключи размером 256, 128 или 10000 байт (в любом случае вам не нужен такой большой ключ). С HMAC-SHA256 одинаково дешево или дорого получить 256- или 128-битный ключ (последний является усеченной версией первого, но это не проблема); это же работа. С HMAC-SHA1 (который так же безопасен, как HMAC-SHA256 для PBKDF2) немного сложнее получить 256-битный ключ, так как 256 больше, чем размер дайджеста.

Поэтому используйте AES-256 и PBKDF2-(HMAC)-SHA256, проблем с производительностью быть не должно.

Другие вопросы по теме